Running Scheme from the command line

后端 未结 4 2152
青春惊慌失措
青春惊慌失措 2021-01-01 23:01

How do you run Scheme programs from the terminal in linux(ubuntu)? Also how to accept arguments from the command-line in a Scheme program?

Edit: Im using the DrSc

相关标签:
4条回答
  • 2021-01-01 23:15

    Also how to accept arguments from the command-line in a Scheme program?

    The R6RS library defines a function called command-line which returns the list of the arguments (the first one being the name of the program). Not all implementations of Scheme implement R6RS though; your implementation might have some other function for this.

    How do you run Scheme programs from the terminal in linux(ubuntu)?

    It depends on which implementation of Scheme you're using.

    0 讨论(0)
  • 2021-01-01 23:20

    The DrScheme scheme implementation, and the name you use to execute it from the command line, is mzscheme. The documentation for starting a command line script is found here: Unix Scripts (PLT Scheme documentation). Use of the command line args is explained here: Command-line Parsing (PLT Scheme Documentation).

    The upshot is that you can use shebang scripts like this:

    #! /usr/bin/env mzscheme
    #lang scheme/base
    (...scheme s-exps...)
    

    or if you want more control over the command line flags for mzscheme, you need to start the script like this:

    #! /bin/sh
    #|
    exec mzscheme -cu "$0" ${1+"$@"}
    |#
    #lang scheme/base
    (...scheme s-exps...)
    

    The function you use to process command line args is command-line. You will find examples of how to use it in the article linked to by the second link.

    0 讨论(0)
  • 2021-01-01 23:21

    This solution works for me

    #! /usr/bin/env guile
    !#
    
    (display "hello")
    (newline)
    
    0 讨论(0)
  • 2021-01-01 23:29

    It is not standardized in the R6RS. There is a recommendation SRFI-22, which some interpreters support. If your interpreter does not support SRFI-22 then it depends on your implementation.

    Below is an example from the SRFI. It assumes your interpreter is a binary named scheme-r5rs. Basically it calls a function named main with a single arg that is a list of command line args.

    #! /usr/bin/env scheme-r5rs
    
    (define (main arguments)
      (for-each display-file (cdr arguments))
      0)
    
    (define (display-file filename)
      (call-with-input-file filename
        (lambda (port)
          (let loop ()
        (let ((thing (read-char port)))
          (if (not (eof-object? thing))
              (begin
            (write-char thing)
            (loop))))))))
    
    0 讨论(0)
提交回复
热议问题