2017-04-07 82 views
0

我第一次學習Scheme,對於練習我試圖編寫一個程序,返回一個指定長度的列表,其中所有值等於1.我使用MIT在Windows 10/GNU埃德溫·編輯下面是我輸入的代碼:edwin模式中的未綁定變量

(define (listlength n) 
    (if (= n 1) 
     (list 1) 
     (append (list 1) (listlength (- n 1))))) 

(listlength 5) 

我希望爲C-x C-e回到(1 1 1 1 1),而是我得到一個未綁定變量的錯誤:

;Unbound variable: listlength 
;To continue, call RESTART with an option number: 
; (RESTART 3) => Specify a value to use instead of listlength. 
; (RESTART 2) => Define listlength to a given value. 
; (RESTART 1) => Return to read-eval-print level 1. 
;Start debugger? (y or n): 

唯一的原因,我可以想到的是,它不像我在definiti中調用listlength一樣on listlength,但是這應該是Scheme Scheme的一部分,所以???我不知所措?感謝你給與我的幫助!

+1

如果您查看堆棧跟蹤,是遞歸調用還是原始調用中發生錯誤? – Barmar

+1

您是否曾經使用'C-x C-e'來評估函數定義?還是你只在'(listlength 5)'形式的末尾按'C-x C-e'?請參閱[手冊](https://www.gnu.org/software/mit-scheme/documentation/mit-scheme-user/Edwin-Scheme-Evaluation.html#Edwin-Scheme-Evaluation)。 – Renzo

回答

0

您應該檢查在功能結束時是否使用C-x C-e。 C-x C-e將評估光標左側的表達式。或者你可以使用M-z,它將評估整個表達式,而不管光標在哪裏。 我也是Scheme的初學者,希望答案可以幫到你!