gpt4 book ai didi

syntax - 为什么在 Common Lisp 中冒号在变量之前

转载 作者:行者123 更新时间:2023-12-03 14:31:04 25 4
gpt4 key购买 nike

Common Lisp 中的语法,变量前面的冒号是什么意思?我见过这样的程序,我将在这里展示一些示例代码,来自大量函数。

(defun expand (successorf node)
(mapcar (lambda (action-state-cost)
(let ((action (car action-state-cost))
(state (cadr action-state-cost))
(cost (caddr action-state-cost)))
(make-node :state state :parent node
:action action :path-cost (+ (node-path-cost node) cost)
:depth (1+ (node-depth node)))
))
(funcall successorf (node-state node))
))

最佳答案

关键字符号
:fookeyword象征。

  • KEYWORD 实习和导出包
  • 不断地束缚自己

  • 用法

    当需要以下属性的组合时使用关键字符号:
  • 符号是正确的数据结构
  • 同名符号应该是唯一的(通过将它们放在一个包中)-> 包 KEYWORD
  • 不需要或不需要不同的包 -> 包 KEYWORD
  • 编写符号应该很容易,不需要引用它们 -> :foo优于 ':foo
  • 不需要充当具有不同值的变量的能力-> :foo计算结果为 :foo本身且仅对 :foo

  • 在 Common Lisp 中,符号通常可以在一个包中(一种命名空间)。

    未导出的符号 bar在一个包中 foo写为 foo::bar .双冒号位于包名和符号名之间。

    然后导出的符号写为 foo:bar .使用单个冒号。

    如果符号在当前包中可用,则写为 bar没有包裹。

    KEYWORD

    有一个特殊的包叫做 KEYWORD .一个符号 bar在该包中简单且始终写为 :bar .

    示例

    这些关键字符号也有这些有趣的属性:符号是自动从包 KEYWORD中导出的。 (所以 keyword::barkeyword:bar::bar:bar 都是相同的符号)并且它们对自己进行评估:
    CL-USER 5 > :bar
    :BAR

    CL-USER 6 > (describe :bar)

    :BAR is a SYMBOL
    NAME "BAR"
    VALUE :BAR
    FUNCTION #<unbound function>
    PLIST NIL
    PACKAGE #<The KEYWORD package, 0/4 internal, 5830/8192 external>

    CL-USER 7 > (eq 'keyword::bar ':bar)
    T

    CL-USER 8 > (eq :bar ':bar) ; quoted or unquoted, each subform evaluates to :bar
    T

    用法

    例如,关键字符号用作命名参数中的名称:
    (defun foo (&key bar) (+ bar 10))

    (foo :bar 7)

    通常它们也用于实例和结构构造的参数。
    (defstruct node state parent action)
    DEFSTRUCT是一个 Common Lisp 宏,它生成几个函数。其中之一是函数 MAKE-NODE ,可以用作:
    (make-node :state 'open
    :parent some-parent
    :action an-action)

    注意:有时数据也可能是关键字。例如在上面的表格中,状态可能是 :open而不是 open :
    (make-node :state :open
    :parent some-parent
    :action an-action)

    关于syntax - 为什么在 Common Lisp 中冒号在变量之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8567155/

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