4 lisp null loops for-loop list
我想知道,如何在LISP中打印新列表中的循环"for"中的每个新值,每次通过调用函数创建.
我创建了func:
(defun make (id name surname) (list :id id :name name :surname surname) )
Run Code Online (Sandbox Code Playgroud)
在这里我创建了全局变量:
(defvar *db* nil)
Run Code Online (Sandbox Code Playgroud)
在这里我定义了func,用于添加每个新值以将其存储在db中:
(defun add (cd) (push cd *db*))
Run Code Online (Sandbox Code Playgroud)
所以,我能够将每个新数据添加到db,如下所示:
(add (make 0 "Oleg" "Orlov" ) )
Run Code Online (Sandbox Code Playgroud)
要查看我的数据库的内容,我可以使用:
*db*
Run Code Online (Sandbox Code Playgroud)
所以,我想知道如何使用"for"循环将每个新记录列表放到db中,我在lisp中的"for"循环中打印值,如下所示:
(loop for i from 1 to 10 do ( ... ))
Run Code Online (Sandbox Code Playgroud)
如果,我使用:
(loop for i from 0 to 10 do (add (make i "Oleg" "Orlov") ) )
Run Code Online (Sandbox Code Playgroud)
如果您阅读db,*db*您会看到所有evelen记录都已添加,但在调用最后一行后,您将获得NIL结果.
为什么我会捕获NIL结果,而不是T,它是什么意思?
谢谢,最好的问候!
Lisp中的每个表单都会评估某些内容.
如果您键入的表单未返回值,则NIL默认情况下将评估为(否则,将计算其返回的值).你的循环实际上并没有返回一个值; 它只执行10个赋值(每个中间表达式都返回一个值,但是你不收集并返回它们).因此,该代码将返回NIL.
如果您还没有这样做,请查看Practical Common Lisp的第3章,其中Peter Seibel逐步创建一个简单的数据库.它可能会让您对Lisp如何工作的基础知识有所了解.您询问的具体问题(为什么表单NIL默认返回,以及它在Common Lisp的上下文中具体含义)在同一本书的第2章中得到了解答
至于如何明确地使您loop发出它添加的项目列表*db*,请尝试以下操作
(loop for i from 1 to 10
for elem = (make i "Oleg" "Orlov")
do (add elem)
collect elem)
Run Code Online (Sandbox Code Playgroud)