![매개변수를 이용하여 시나리오 프로그램 실행 파일 생성](https://linux55.com/image/49979/%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%8B%9C%EB%82%98%EB%A6%AC%EC%98%A4%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%20%EC%8B%A4%ED%96%89%20%ED%8C%8C%EC%9D%BC%20%EC%83%9D%EC%84%B1.png)
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))