首页 > 解决方案 > 这个 Scheme 解释器输出的含义是什么?

问题描述

我正在通过简单的方案工作。我正在使用 DrRacket 作为我的定义文件

https://gist.github.com/alexgian/5b351f367169b40a4ad809f0bb718e1f

我在练习 17.3,上面写着

https://people.eecs.berkeley.edu/~bh/ssch17/lists.html

描述此 map 调用返回的值

> (map (lambda (x) (lambda (y) (+ x y))) '(1 2 3 4))

在 DrRacket 中,我得到了 map 调用的以下输出:

(#<procedure> #<procedure> #<procedure> #<procedure>)

我知道 lambda 可以让您返回过程。我很难弄清楚由于某种原因正在返回什么程序,这里到底发生了什么。

标签: scheme

解决方案


只需将列表的每个值依次替换为内部函数中的变量 x 即可。换句话说,结果等于:

(list (lambda (y) (+ 1 y))
      (lambda (y) (+ 2 y))
      (lambda (y) (+ 3 y))
      (lambda (y) (+ 4 y)))

四个函数的列表,每个函数将其参数增加一个不同的值。


推荐阅读