为什么这个方案函数正确运行然后产生"非法函数"错误?

4 scheme

我正在尝试编写一个方案函数,在新行上打印列表的每个条目.此函数和样本输入按预期工作,然后出现"非法函数"错误并退出.我正在使用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) )
Run Code Online (Sandbox Code Playgroud)

soe*_*ard 5

括号后跟表达式表示函数应用程序.

(expr1 expr2 ...)
Run Code Online (Sandbox Code Playgroud)

表示评估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) )
Run Code Online (Sandbox Code Playgroud)

这里(开始表达式1表达式2 ....)指evalute expr1,expr2,...为了.最后返回最后一个表达式的值.