- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在网上四处寻找,找不到我的查询的答案。如果有人能在不降低这篇文章评分的情况下提供一个好的答案,我将不胜感激。
在 Lisp car
中,cdr
用于数据模式,如 '(无论此处如何)
,这对我来说很有意义。
现在,在Land of Lisp一书中,作者正在解释如何构建文本引擎,突然他使用以下描述来创建一个函数。
(defun describe-location (location nodes)
(cadr (assoc location nodes)))
我能问一下他为什么要在列表上做 cadr 吗?为什么它会提供响应而不是错误?它不应该是一种数据模式,即在左括号 '(这里的任何内容)前面有一个引号
?
还有为什么他在 (assoc location nodes)
而不是 (assoc 'garden *nodes*)
第二种正确的使用方法不是 assoc
吗?我可能错过了大局,因此非常感谢有人解释这些要点。
非常感谢!
最佳答案
ASSOC
是一个函数。 Lisp 评估它的所有参数,然后用这些值调用它。这就是函数求值在 Lisp 中的工作方式。
(assoc 'garden *nodes*)
assoc
是一个函数。它现在将评估参数。'garden
为符号garden
。*nodes*
为变量 *nodes*
的值。assoc
。现在:
(assoc location *nodes*)
assoc
是一个函数。它现在将评估参数。location
为变量 location
的值。*nodes*
为变量 *nodes*
的值。assoc
。例如,如果变量 location
的值是符号 garden
,则上面的 assoc
表达式返回相同的结果。
关于lisp - 涉及 assoc 函数的列表的 Cadr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23966768/
我想知道如何在 Racket 中实现 cadr、caddr 等的可变版本,而不需要单独定义每个版本? IE。不 (define (mcadr exp) (mcar (mcdr exp))) 对
我在网上四处寻找,找不到我的查询的答案。如果有人能在不降低这篇文章评分的情况下提供一个好的答案,我将不胜感激。 在 Lisp car 中,cdr 用于数据模式,如 '(无论此处如何),这对我来说很有意
这个问题在这里已经有了答案: Unusual stack overflow when inserting nodes in binary tree (1 个回答) 关闭 6 年前。 我(仍在)将代码
我是一名优秀的程序员,十分优秀!