6

abc.scmファイルを作成し、Ubuntu のターミナルで「 guild compile」、「scm」、および「guile」コマンドを使用して、バイナリ (または guile スキームがコンパイルするもの) にコンパイルしようとしました。

guild compile abc.scm については、出力が得られます。ファイルを開き、次のように実行します-「./abc.scm.go」は、許可が拒否されたことを示しています。「 chmod 755」または「chmod 777
」 を使用して必要な権限を与えると、「bash: ./abc.scm.go: バイナリ ファイルを実行できません: Exec フォーマット エラー」のようなエラーが表示されます。

scmwhat-file-name.scm」は、scm インタープリターを開くだけです。

" guile what-file-name.scmは何もしません。

公式の GNU/Guile Scheme のリンクはあまり役に立ちません。

私を助けてください。ガイル スキームのスクリプト ファイルを作成したいと考えています。それをコンパイルし、C/C++ プログラムとして実行します。出来ますか?コンパイルができない場合は、少なくともGNU/guile スキームまたはMIT-Schemeのスクリプト ファイルを実行する方法を知りたいです。

{ステップバイステップは非常に高く評価されています。私はまだUbuntuとSchemeを使用する初心者です。}

前もって感謝します。

4

3 に答える 3

4

シバン表記を使用して Guile スクリプトを作成できます (-s新しいバージョンの Guile ではオプションです)。

#!/usr/bin/guile -s
!#
(display "Hello, world!\n")

!#2 行目の に注意してください。Guile は#!をブロック コメントの開始として扱い (#|標準のスキームと同様)、これを終了する必要があります!#(標準のスキームと同様|#)。

スクリプトでコマンド ライン オプションを Guile 自体に渡したい場合は、メタ スイッチについてお読みください。その例を次に示します。

#!/usr/bin/guile \
-e main -s
!#
(define (main args)
  (if (null? (cdr args))
      (format #t "Hello, world!~%")
      (for-each (lambda (name)
                  (format #t "Hello, ~a!~%" name))
                (cdr args))))
于 2016-06-12T16:09:53.353 に答える
3

どうやらそれがSchemeソースファイルであるとguile foo想定しています。がプリコンパイル済みのバイナリファイルであるfoo場合は、とにかくそれをテキスト ファイルとして扱い、もう一度コンパイルしようとしますが、失敗します。コンパイル済みファイルを実行するための同等のコマンド ライン構文が見つかりませんでした。foo.go.go

ただし、次のようにするとほぼ同じ効果が得られます。

  • foo.scmメイン プロシージャをエクスポートするソース ファイルを作成します。
(define-module (foo)
  #:export (main))

(define (main)
  (display "Hello world!")
  (newline))
  • でプリコンパイルしますguild compile -o foo.go foo.scm
  • を実行するシェル スクリプトを記述しますguile -C "$PWD" -c "(use-modules (foo)) (main)"。フラグ (大文字の-C dirC) は、ディレクトリからコンパイル済みファイルをロードするように指示しますdir。フラグ (小文字の-c exprc) は、Scheme コードを評価するように指示しますexpr。この場合use-module、コンパイル済みのモジュールをロードしてからメイン プロシージャを呼び出します。
于 2019-05-21T21:27:44.273 に答える