【发布时间】:2017-07-17 17:49:57
【问题描述】:
在我的 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 > (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)
【问题讨论】:
-
将代码缩进四个空格或突出显示并按 ctrl+k 以正确格式化。
-
您已经在错误循环中深入了三层。你确定你知道自己在做什么吗?
标签: lisp common-lisp