매개변수를 이용하여 시나리오 프로그램 실행 파일 생성

매개변수를 이용하여 시나리오 프로그램 실행 파일 생성

scheme다음 명령을 사용하여 실행하는 프로그램이 있습니다 ; (primes<= n). 이 프로그램은 다음보다 작은 모든 소수를 제공합니다.n

예를 들어, ; (primes<= 200)200보다 작은 모든 소수를 알려주세요.

다음 프로그램에 대해 Linux에서 n매개변수로 실행 파일을 생성하는 방법

----------프로젝트 계획------------------------- ---- ------------- ---------

    #lang racket

(define  (interval-list m n)
  (if (> m n)
      '()
      (cons m (interval-list (+ 1 m) n))))
(define (sieve l)
  (define (remove-multiples n l)
    (if (null? l)
         '()
         (if  (= (modulo (car l) n) 0)      ; division test
              (remove-multiples n (cdr l))
              (cons (car l)
                    (remove-multiples n (cdr l))))))
  (if (null? l)
      '()
      (cons (car l)
             (sieve (remove-multiples (car l) (cdr l))))))
(define (primes<= n)
  (sieve (interval-list 2 n)))

위 프로그램은 (primes<= 100)으로 실행되어 100보다 작은 모든 소수를 출력합니다.

답변1

계획 시스템에 대한 문서를 확인하고 싶을 것입니다.

  • 네이티브 실행 파일로 컴파일되고
  • OS 셸에서 명령줄 인수 전달

예를 들어, 다음을 사용하는 경우MIT/GNU 프로젝트, 다음을 참조하시기 바랍니다.

MIT/GNUScheme은 Linux를 포함한 많은 운영 체제로 포팅되었으므로 사용할 Scheme 해석기를 선택할 수 있는 유연성이 있는 경우 위의 예에 적합합니다.

답변2

이 Scheme 프로그램을 Scheme 해석기를 실행하는 파일로 변환하려면 다음을 사용하십시오.셰르본행을 실행 가능하게 만듭니다( chmod +x /path/to/program). shebang 라인은 실행 파일의 첫 번째 라인으로, 로 시작하고 #!그 뒤에 인터프리터의 전체 경로가 옵니다. 라켓을 사용하고 있으므로

#!/usr/bin/racket    

인터프리터의 전체 경로를 지정하지 않고 대신 실행 가능한 검색 경로에서 찾으려면 다음을 $PATH사용하세요.

#!/usr/bin/env racket

명령줄 매개변수에 액세스하기 위해 Racket은 명령줄 구문 분석 라이브러리를 제공합니다](http://docs.racket-lang.org/reference/Command-Line_Parsing.html) 또는 명령줄 인수를 직접 검색할 수 있습니다.(current-command-line-arguments). racket다음 옵션을 사용하여 호출해야 합니다 -f.

#!/usr/bin/racket -f
(define arg (string->number (vector-ref (current-command-line-arguments) 0)))
(display (primes<= arg))
(newline)

Find in 과 함께 사용할 수 없습니다 #!/usr/bin/env. 이것을 원한다면 스크립트를 다음과 같이 설정하십시오.racket$PATH다국어:

#!/bin/sh
":"; exec racket -f "$0" "$@"

스크립트를 Scheme 구현 간에 이식 가능하게 하려면 구현이 다음 원칙을 따르는 한 가능합니다.SRFI 22(라켓은 그렇지 않습니다).

#!/usr/bin/env scheme-r5rs
(define (main argv)
  (display (primes<= (string->number (list-ref argv 1))))
  (newline))

관련 정보