- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在自学 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/
在 CLHS 中,我为 :read-only x 读到:“当 x 为真时,这指定不能更改此插槽;它将始终包含构造时提供的值。” 我可以做到这一点(CCL、SBCL): CL-USER> (defstr
我想将数据保存到文件中,并在重新运行程序时恢复数据。 我已经这样定义了我的 defstruct: (defstruct书签:url:标题:评论) 程序将简单地执行以下操作: 1. 从 url-db.t
是否可以像函数一样定义结构的槽之一并访问槽以使用该函数?如果是,如何使用它?例如,像这样: (defstruct problem state (player (defun getplaye
在普通的 lisp 中,我注意到我可以这样写: (defun foo (&key (a 1) (b 2) (c (+ a b))) (print (+ a b c))) 当我打电话时 (foo) ,
我正在尝试将 defstruct 的实例嵌套为另一个 defstruct 中的一些 &key 参数,如下面的代码所示。出于某种原因,要插入外部 defstruct 的变量不会被绑定(bind)到它们的
我在 Lisp 中定义了一个非常简单的数据结构: ;;Data structure for a person (defstruct person (name nil) (age 0) (s
我正在尝试调整此 defstruct例如,添加本书中描述的 select- 函数:Practical Common Lisp .我使用 Common Lisp 包在 Emacs 中运行代码。 sele
我正在尝试调整此 defstruct例如,添加本书中描述的 select- 函数:Practical Common Lisp .我使用 Common Lisp 包在 Emacs 中运行代码。 sele
我正在自学 Common Lisp。我一直在看康威生命游戏的例子,有一段语法我不明白。 完整代码可用here .我特别遇到问题的部分如下: (defstruct (world (:constructo
ClojureScript 不支持 defstruct - 这似乎是设计使然。现在这可能实际上是 Clojure 语言中已弃用的部分,ClojureScript 的设计者只是希望每个人都继续前进。 (
问题:如何为析构(以及实例)的嵌套槽值编写通用访问器宏? 动机:我是一名 LISP 程序员,羡慕 Python 等中的“点符号”,其中嵌套槽访问距离只有几个点 用例:我想做的是 (print (??
是否有比以下更简单的方法来测试符号是否是结构的名称: (fboundp 'make-symbol) 最佳答案 (defun symbol-names-structure-p (symbol) (l
在常见的 lisp 中,我可以使用什么来使用插槽名称/符号访问结构插槽? 我想要的是 (defstruct point (x 0) (y 0)) (defmacro -> (struct slo
假设我们有上面的代码: (require-extension defstruct) (defstruct tree height age leaf-color) (define coconut (
我了解如何使用 @type 指令来定义用户定义的类型。到目前为止,我只在函数规范中遇到过它的用法。我很想知道它的用法是否可以扩展到结构,使参数与其数据类型之间存在紧密耦合。 我开始探索一个示例程序。
我是一名优秀的程序员,十分优秀!