在Scheme中返回副作用的惯例是什么?

时间:2012-09-29 21:44:26

标签: lisp scheme sicp

我正在阅读计算机程序的结构和解释 MIT视频讲座系列,我有一个关于从函数中返回副作用的快速问题。

video 3A中,教授为for-each写了一个类似于此的快速等式:

(define (for-each p l)
   (if (null? l)
      "done"
      (p (car l)
         (for-each p (cdr l)))))

是否存在从Scheme中的函数返回副作用的特定约定,或者"done"是否是任意选择?

1 个答案:

答案 0 :(得分:2)

这不是副作用,而是每个Scheme函数都必须返回一些东西。字符串"done"是一种东西。通常,当您致电for-each时,您可能会执行以下操作:

(for-each (lambda (x) (display x)) lst)

并忽略for-each的返回值。作者可以轻松地从基本案例中选择任何其他值。