2013-01-02 51 views
1

我正在學習Scheme。我想建立腳本福過濾器瘸子,所以我是用tinyscheme執行我所做的腳本,但似乎tinyscheme有一組非常有限的功能,如maxmineven?功能,缺失。 (我想有人來證明我錯了這裏:()如何正確執行scheme48的程序?

好了,其實,我只是想scheme48執行計劃的腳本。我該怎麼辦呢?

例如,我怎麼執行與scheme48

(define (addx inNum inX) 
    (if (> (* inNum inX) 999) 0 
     (+ (* inNum inX) (addx inNum (+ 1 inX))))) 

(display 
    (- (+ (addx 3 1) (addx 5 1)) (addx 15 1))) 
+1

我想象你會把它放在一個文件中,然後用一個引用該文件的標誌啓動scheme48。這是什麼操作系統?你嘗試了什麼,它做了什麼? –

+1

你可能想嘗試使用drscheme,它非常易於使用。 – iabdalkader

+0

@JohnClements我認爲並不那麼簡單,就像使用參數並執行腳本一樣。 GNU/Linux,你可能想檢查問題的標籤。無論如何,我都是作爲新手請求指導。 – yeyo

回答

3

以下文件我也無法運行方案,腳本scheme48成功(我找不到手冊中還暗示)。您可以選擇使用狡詐(假設,你正在使用Linux或類似的東西):

#!/usr/local/bin/guile -s 
!# 

(define (addx in-num in-x) 
    (if (> (* in-num in-x) 999) 
     0 
     (+ (* in-num in-x) (addx in-num (+ 1 in-x))))) 

(display (- (+ (addx 3 1) (addx 5 1)) (addx 15 1))) 
(newline) 

保存它,然後運行:

$chmod u+x test.scm 
./test.scm 
233168 
$ 

(順便說一句:請不要格式化方案像C)。

編輯

據邁克斯佩伯對Scheme48 mailing list後,shebanging將無法正常工作。明確地調用Scheme48是這樣做的:

#!/bin/bash 
scheme48 -a batch << EOF 
(letrec ((fac (lambda (n) 
      (if (= n 1) 
       1 
       (* n (fac (- n 1))))))) 
(fac 5)) 
EOF 

$ ./test.scm 
120 
+0

是的,XD對此感到抱歉,類C語法對我來說更自然。我仍然不習慣使用Lisp語法。另外,謝謝你的詳細答案。 Guile非常好。 – yeyo

+0

對不起,我不能接受你的答案,因爲它與原始問題沒有太大關係。雖然,多虧了你,現在我可以運行我製作的腳本。 – yeyo

+0

@Kira:爲什麼我的回答與您的問題無關? :) – 2013-01-02 19:33:19