Zel*_*ahl 5 shell scripting scheme guile
我正在尝试学习一些 Guile Scheme,并且正在查看gnu 上的教程:脚本示例
\n\n目前我有以下代码:
\n\n#!/usr/bin/env sh\nexec guile -l fact.scm -e \'(@ (my-module) main)\' -s "$0" "$@"\n!#\n\n;; Explanation:\n;; -e (my-module)\n;; If run as a script run the `my-module` module\'s `main`.\n;; (Use `@@` to reference not exported procedures.)\n;; -s\n;; Run the script.\n\n(define-module (my-module)\n #:export (main))\n\n;; Create a module named `fac`.\n;; Export the `main` procedure as part of `fac`.\n\n(define (n-choose-k n k)\n (/ (fact n)\n (* (fact k)\n (fact (- n k)))))\n\n(define (main args)\n (let ((n (string->number (cadr args)))\n (k (string->number (caddr args))))\n (display (n-choose-k n k))\n (newline)))\nRun Code Online (Sandbox Code Playgroud)\n\n#!/usr/local/bin/guile \\\n-e main -s\n!#\n\n;; How to run this program?\n;; Example:\n;; guile -e main -s factorial-script.scm 50\n;; Explanation:\n;; -e specifies the procedure to run\n;; -s specifies to run this as a script\n;; 50 is the number we take as input to the script\n\n(define (fact n)\n (if (zero? n) 1\n (* n (fact (- n 1)))))\n\n(define (main args)\n (display (fact (string->number (cadr args))))\n (newline))\nRun Code Online (Sandbox Code Playgroud)\n\n我使我的主脚本可执行chmod +x modules.scm,然后尝试运行该脚本:./modules.scm 10 3应该是 120),但出现错误:
Backtrace:\n 4 (apply-smob/1 #<catch-closure 119cb80>)\nIn ice-9/boot-9.scm:\n 705:2 3 (call-with-prompt ("prompt") #<procedure 11aa8e0 at ice-9/eval.scm:330:13 ()> #<procedure default-prom\xe2\x80\xa6>)\nIn ice-9/eval.scm:\n 619:8 2 (_ #(#(#<directory (guile-user) 1233140>)))\nIn /home/xiaolong/development/Guile/scripting/./modules.scm:\n 26:13 1 (main _)\n 18:0 0 (n-choose-k _ _)\n\n/home/xiaolong/development/Guile/scripting/./modules.scm:18:0: In procedure n-choose-k:\nIn procedure module-lookup: Unbound variable: fact\nRun Code Online (Sandbox Code Playgroud)\n\n因此,尽管fact我正在加载,但不知何故该程序并未加载fact.scm。我也尝试重命名fact.scm为fact为教程中的名称,并更改在 shebang 行之后加载脚本的参数,但结果相同
教程是错误的,还是我忽略了一些简单的事情?
\n| 归档时间: |
|
| 查看次数: |
653 次 |
| 最近记录: |