Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Common lisp 公共口齿不清:什么是+;无_Common Lisp - Fatal编程技术网

Common lisp 公共口齿不清:什么是+;无

Common lisp 公共口齿不清:什么是+;无,common-lisp,Common Lisp,前几天(可能是昨天),我对在中找到的#+nil读取时间条件感到非常困惑 经过深思熟虑后,我得出结论,这是一种非常简洁的注释代码的方式。有人能证实这一点吗 也许我的假设是完全错误的。无论如何,请提前感谢。请参阅 为了对从输入中读取表达式进行条件化,Common Lisp使用该功能 在这种情况下,它被用来注释表单。 这是读者的一部分#+查看下一个项目(通常是同名的关键字符号)是否是列表*功能*的成员。如果是,则下一项将被正常读取,如果不是,则跳过。。通常:NIL不是该列表的成员,因此跳过该项。因此,

前几天(可能是昨天),我对在中找到的
#+nil
读取时间条件感到非常困惑

经过深思熟虑后,我得出结论,这是一种非常简洁的注释代码的方式。有人能证实这一点吗

也许我的假设是完全错误的。无论如何,请提前感谢。

请参阅

为了对从输入中读取表达式进行条件化,Common Lisp使用该功能

在这种情况下,它被用来注释表单。

这是读者的一部分
#+
查看下一个项目(通常是同名的关键字符号)是否是列表
*功能*
的成员。如果是,则下一项将被正常读取,如果不是,则跳过。。通常
:NIL
不是该列表的成员,因此跳过该项。因此,它对Lisp隐藏了表达式。可能有一个Lisp实现,但这不起作用:NIL,Lisp的新实现。它可能在
*features*
列表上有符号
:NIL
,以指示实现的名称

默认情况下,在
关键字
包中读取
NIL
等功能:

  • #+NIL
    ->在
    cl:*功能*
  • #+CL:NIL
    ->在
    CL:*功能中查找
    CL:NIL
示例

(let ((string1 "#+nil foo bar"))             ; string to read from

  (print (read-from-string string1))         ; read from the string

  (let ((*features* (cons :nil *features*))) ; add :NIL to *features*
    (print (read-from-string string1)))      ; read from the string

  (values))                                  ; return no values
它打印:

BAR 
FOO 
请注意,Common Lisp还有其他注释表单的方法:

; (sin 3) should we use that?

#| (sin 3)  should we use that?
   (cos 3)  or this?            |#
,但您不应该在生产代码中遗漏这一点

更好的选择是
#+(或)


它只需再输入一个字符,如果您使用Emacs paredit或自动插入右括号的其他模式,则需要按相同的键,并且不受符号
:nil
作为注释存在于
*功能*

中的约束;它看起来像是
SBCL
忽略
#+nil…
表达式,即使
nil
位于
*功能*
中。如果在文件中写入,然后加载,以下内容将打印“Nope”:
(push nil*features*)#+nil(格式t“nil在*features*”)#-nil(格式t“Nope”)
@Inaimathi,这是因为特征表达式被读取到关键字包中
:NIL
将是
*功能*
@m-n:Yup中的相关符号。将上面的第一个表达式替换为
(push:nil*features*)…
打印
nil在*features*
中。感谢链接。如果我早一点发现这个问题,我就不必发表我的问题了,但是
#+nil
确实很难搜索。尽管(至少在我看来)更好的是
#-(和)
,因为
-
看起来更像是在评论某件事,而不是
+
那样。我有时会使用
#+\35;:如果我感到偏执,就忽略