scheme - 为什么这个方案函数运行正确却产生 "illegal function"错误?

标签 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) )

最佳答案

括号后跟表达式表示函数应用。

(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/

相关文章:

clojure - 你能翻译 Functional Languages 101 中的这两个例子吗? (方案 -> Clojure)

lisp - 在列表中查找元素的 Scheme 函数是什么?

algorithm - 为什么我的连续分数不能正确近似?

scheme - Dr Scheme 中的图形表示

scheme - 检查参数是列表还是原子

lisp - 在 Windows 中试用 "The Little Schemer"书中的示例

module - 两个 Racket 模块碰撞

recursion - 如何在 Scheme/Racket 中使用尾递归实现追加过程?

multithreading - 如何杀死 Racket 中的线程? Kill-thread 继续使用 "proc"而不是线程

scheme - Lisp中'quote的含义