lisp - 有人可以帮忙解释一下这个计划程序吗

标签 lisp scheme

问题:

((lambda (x y) (x y)) (lambda (x) (* x x)) (* 3 3))

这是期中考试的第一名,我输入“81 9”,他以为我忘记划掉 lawl,所以我划掉了 81,然后他就哇哇大叫。不管怎样,我不明白为什么是 81。

我明白为什么 (lambda (x) (* x x)) (* 3 3) = 81,但是第一个 lambda 我不明白那里的 x 和 y 值是什么,以及[body] (x y) 是。

所以我希望有人能向我解释为什么第一部分看起来没有任何作用。

最佳答案

这需要一些缩进来澄清

((lambda (x y) (x y))
 (lambda (x) (* x x))
 (* 3 3))
  • (lambda (x y) (x y));以 y 作为唯一参数调用 x
  • (lambda (x) (* x x));评估为其参数的平方。
  • (* 3 3);评估为 9

所以整个事情的意思是:“以 9 作为参数调用 square 函数”。

编辑:同样的事情可以写成

((lambda (x) (* x x))
 (* 3 3))

我想这个练习的目的是强调评估方案形式如何涉及隐式函数应用。

关于lisp - 有人可以帮忙解释一下这个计划程序吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/223468/

相关文章:

scheme - .vimrc 中 Scheme 的条件选项

lisp - defvar、defparameter、setf 和 setq 之间有什么区别

lisp - |5E| 是什么意思在 Common Lisp 中是什么意思?

lisp - 从列表创建对列表

lisp - 普通LISP中列表的插入排序

tree - 打开音乐 : L-System tree generation using lisp

scheme - 类似于 SICP 中的 "picture language"的小语言

recursion - 为什么在传递否定参数时我的代码会卡在递归调用中?

scheme - call/cc 如何处理从 "Lisp in Small Pieces"开始的 CPS 转换?

c - 使用列表内存 - 家庭作业