虽然我偶尔会在 Perl 正则表达式中做梦,但 Common Lisp (CLisp) 的格式规范仍然让我有些困惑。我正在拍摄以下结果:
("No Match" (-2378 11 4) (-2378 11 5))
给定我想要的列表:
| No Match| -2378 11 4| -2378 11 5|
出另一端。这是我得到的:
[685]> (fss sd)
("No Match" (-2378 11 4) (-2378 11 5))
[686]> (format t "|~{~9<~a~>~2*~}~:*~{~*~{|~6d~3d~3d~}~}|" (fss sd))
| No Match| -2378 11 4
*** - There are not enough arguments left for this format directive.
Current point in control string:
"|~{~9<~a~>~2*~}~:*~{~*~{|~6d~3d~3d~}~}|"
|
The following restarts are available:
ABORT :R1 Abort main loop
Break 1 [687]> :R1
[688]>
我很高兴我已经走了 2/3 的路程,但这种情况让我有点发疯。如果我理解正确,则|~{~9<~a~>~2*~}
消耗列表的第一个元素,No Match
然后跳过其余部分。下一部分,~:*
将参数指针重置回列表的开头。然后~{~}
包装器将我放在列表中。接下来~*
跳过列表中已处理的部分。下一对~{~}
进入参数的第一个子列表。第一个子列表处理正确。然后...错误。显然,我对格式的理解有问题,但我不清楚那可能是什么。
我经常觉得 CL 的其余部分非常简单,但我真的认为我们至少需要CL Cookbook中的“Format Cookbook”一章。
总之,这个有抱负的人需要一个更有知识的追随者的帮助。帮助!