#符号的LISP含义
在我的Lisp代码中,我有一个函数(nfa regex compile),它创建一个cons列表,初始状态、转换和最终状态(表示自动机的节点)从作为参数的正则表达式开始 在本例中,我将表达式作为一个序列,但我不明白为什么,如果我给出两个以上的符号,函数会生成(##)而不是生成新的状态#符号的LISP含义,lisp,common-lisp,Lisp,Common Lisp,在我的Lisp代码中,我有一个函数(nfa regex compile),它创建一个cons列表,初始状态、转换和最终状态(表示自动机的节点)从作为参数的正则表达式开始 在本例中,我将表达式作为一个序列,但我不明白为什么,如果我给出两个以上的符号,函数会生成(##)而不是生成新的状态 CL-USER 39 : 3 > (nfa-regex-compile '(seq a)) ((INITIAL 0) ((DELTA 0 A 1) (FINAL 1))) CL-USER 40 : 3
CL-USER 39 : 3 > (nfa-regex-compile '(seq a))
((INITIAL 0) ((DELTA 0 A 1) (FINAL 1)))
CL-USER 40 : 3 > (nfa-regex-compile '(seq a b))
((INITIAL 0) ((DELTA 0 A 1) ((DELTA 1 B 2) (FINAL 2))))
CL-USER 41 : 3 > (nfa-regex-compile '(seq a b c))
((INITIAL 0) ((DELTA 0 A 1) ((DELTA 1 B 2) (# #))))
CL-USER 42 : 3 > (nfa-regex-compile '(seq a b c d e f))
((INITIAL 0) ((DELTA 0 A 1) ((DELTA 1 B 2) (# #))))
例如,如果我有一个序列abc,自动机应该是:
(INITIAL 0) (DELTA 0 A 1) (DELTA 1 B 2) (DELTA 2 C 3) (FINAL C)
打印时,标准变量控制打印机下降到嵌套结构的深度。如果结构深度超过该级别,打印机将停止并打印一个裸露的
#
,而不是任何其他结构
例如:
* (defvar *structure*
'(:level-1 :level-1
(:level-2 :level-2 :level-2)
(:level-2 :level-2 (:level-3 :level-3
(:level-4) :level-3))))
* (dotimes (i 5)
(let ((*print-level* i))
(print *structure*)))
#
(:LEVEL-1 :LEVEL-1 # #)
(:LEVEL-1 :LEVEL-1 (:LEVEL-2 :LEVEL-2 :LEVEL-2) (:LEVEL-2 :LEVEL-2 #))
(:LEVEL-1 :LEVEL-1 (:LEVEL-2 :LEVEL-2 :LEVEL-2)
(:LEVEL-2 :LEVEL-2 (:LEVEL-3 :LEVEL-3 # :LEVEL-3)))
(:LEVEL-1 :LEVEL-1 (:LEVEL-2 :LEVEL-2 :LEVEL-2)
(:LEVEL-2 :LEVEL-2 (:LEVEL-3 :LEVEL-3 (:LEVEL-4) :LEVEL-3)))
实际的结构永远不会改变,只有印刷的表现
此变量有时会在调试器中反弹,以避免打印大量嵌套的结构。有关详细信息,请参阅实现文档。将代码缩进四个空格,或高亮显示代码,然后按ctrl+k以正确设置格式。您已经陷入了三级错误循环中。你确定你知道你在做什么吗?