パラメータを使用したシナリオプログラム実行可能ファイルの生成

パラメータを使用したシナリオプログラム実行可能ファイルの生成

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))

関連情報