我正在尝试编写一个方案函数,该函数在新行上打印列表的每个条目。该函数和示例输入按预期工作,然后给出“非法函数”错误并退出。我正在使用 debian 存储库中的tinyscheme。
(define print-list
(lambda (l)
(if (null? l)
(display "done\n")
(
(display (car l))
(newline)
(print-list (cdr l))
)
)
)
)
(print-list '(1 2 3 4 5) )
最佳答案
括号后跟表达式表示函数应用。
(expr1 expr2 ...)
手段评估expr1
, expr2
, ....然后应用 expr1
的结果结果为expr2
....如果expr1
的结果不是函数,那么您将看到“非法函数”错误。
修复方法是按照 leppie 的说明添加 begin
:
(define print-list
(lambda (l)
(if (null? l)
(display "done\n")
(begin
(display (car l))
(newline)
(print-list (cdr l))))))
(print-list '(1 2 3 4 5) )
这里
(开始 expr1 expr2 ....)
表示评估expr1
, expr2
, ... 为了。最后返回最后一个表达式的值。
关于scheme - 为什么这个方案函数运行正确却产生 "illegal function"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30026004/