【发布时间】:2017-04-07 03:02:32
【问题描述】:
我是第一次学习 Scheme,为了练习,我正在尝试编写一个程序,它返回一个指定长度的列表,所有值都等于 1。我正在使用 MIT/GNU Edwin 编辑器Windows 10。这是我输入的代码:
(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):
我能想到的唯一原因是它不喜欢我在 listlength 的定义中调用 listlength,但这应该是 Scheme Scheme 的一部分,所以???我不知所措??感谢您能给我的任何帮助!
【问题讨论】:
-
如果您查看堆栈跟踪,错误是在递归调用中发生还是在您的原始调用中发生?
-
您之前是否使用
C-x C-e评估函数定义?还是您只在(listlength 5)表格的末尾按了C-x C-e?请参阅manual。
标签: recursion scheme lisp edwin