gpt4 book ai didi

lisp - 涉及 assoc 函数的列表的 Cadr

转载 作者:太空宇宙 更新时间:2023-11-03 18:57:15 31 4
gpt4 key购买 nike

我在网上四处寻找,找不到我的查询的答案。如果有人能在不降低这篇文章评分的情况下提供一个好的答案,我将不胜感激。

在 Lisp car 中,cdr 用于数据模式,如 '(无论此处如何),这对我来说很有意义。

现在,在Land of Lisp一书中,作者正在解释如何构建文本引擎,突然他使用以下描述来创建一个函数。

(defun describe-location (location nodes)
(cadr (assoc location nodes)))

我能问一下他为什么要在列表上做 cadr 吗?为什么它会提供响应而不是错误?它不应该是一种数据模式,即在左括号 '(这里的任何内容)前面有一个引号

还有为什么他在 (assoc location nodes) 而不是 (assoc 'garden *nodes*)

中使用 assoc

第二种正确的使用方法不是 assoc 吗?我可能错过了大局,因此非常感谢有人解释这些要点。

非常感谢!

最佳答案

ASSOC 是一个函数。 Lisp 评估它的所有参数,然后用这些值调用它。这就是函数求值在 Lisp 中的工作方式。

(assoc 'garden *nodes*)
  • Lisp 认为 assoc 是一个函数。它现在将评估参数。
  • Lisp 计算'garden 为符号garden
  • Lisp 计算 *nodes* 为变量 *nodes* 的值。
  • Lisp 使用这些值调用 assoc

现在:

(assoc location *nodes*)
  • Lisp 认为 assoc 是一个函数。它现在将评估参数。
  • Lisp 计算 location 为变量 location 的值。
  • Lisp 计算 *nodes* 为变量 *nodes* 的值。
  • Lisp 使用这些值调用 assoc

例如,如果变量 location 的值是符号 garden,则上面的 assoc 表达式返回相同的结果。

关于lisp - 涉及 assoc 函数的列表的 Cadr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23966768/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com