gpt4 book ai didi

functional-programming - defun 和 defstruct 中的百分号

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

我正在自学 Common Lisp。我一直在看康威生命游戏的例子,有一段语法我不明白。

完整代码可用here .我特别遇到问题的部分如下:

(defstruct (world (:constructor %make-world)) 
current
next)

(defun make-world (width height)
(flet ((make-plane (width height)
(make-array (list width height)
:element-type 'bit
:initial-element 0)))
(%make-world
:current (make-plane width height)
:next (make-plane width height))))

我想知道,首先,%make-world 中百分号的意义是什么?第二,为什么构造函数要指定两个不同的名字? (make-world 和 %make-world) 我以前见过这种语法,但名字总是一样的。似乎有一些更深层次的功能,但它正在逃避我。

最佳答案

当涉及到标识符时,Lisp 世界有几种命名约定。有关概述,请参阅:http://www.cliki.net/Naming+conventions

可以使用系统生成的函数来创建对象或结构。 DEFSTRUCT 将创建一个 MAKE-FOO 函数,并将槽的初始值作为关键字参数。

有时人们更喜欢带有普通位置参数的函数——这样写起来更短,而且在调用函数时必须给出参数——你不能省略它们。

在这种情况下,需要以不与用户应使用的名称冲突的方式命名 DEFSTRUCT 生成的函数。所以 %MAKE-FOO 表示这是库的内部辅助函数,预计不会被用户级代码调用。

关于functional-programming - defun 和 defstruct 中的百分号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23493877/

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