Chicken Scheme 4.8.0.5
问候所有人,
以下是列表清单错误定义的片段。我说畸形是因为 变量名称位于最左边的括号之外,并且没有明确的定义语句即。 (定义techDisplays((AG1 fillerIgnore .... nil nil))
snippet.il
techDisplays(
;( LayerName Purpose Packet Vis Sel C2C Drg Val )
;( --------- ------- ------ --- --- --- --- --- )
( AG1 fillerIgnore AG1_fillerIgnore t t nil t nil )
( AG2 drawing AG2_drawing t t nil t t )
( AG2 fillerIgnore AG2_fillerIgnore t t nil t nil )
( AG2 frame AG2_frame t t nil t t )
( AG2 frameOnly AG2_frameOnly t t nil t t )
( AG2 frameOnlyHole AG2_frameOnlyHole t t nil t t )
( y0 flight y0_flight t t t t nil )
( y1 flight y1_flight t t t t nil )
( y2 flight y2_flight t t t t nil )
( y3 flight y3_flight t t t t nil )
( y4 flight y4_flight t t t t nil )
( y5 flight y5_flight t t t t nil )
( y6 flight y6_flight t t t t nil )
( y7 flight y7_flight t t t t nil )
( y8 flight y8_flight t t t t nil )
( y9 flight y9_flight t t t t nil )
( border boundary border_boundary t nil t t nil )
( snap grid snap_grid t nil t nil nil )
) ;techDisplays
问题:我需要让Scheme将其识别为有效的顶级定义 进一步的问题:解决方案必须是可扩展的,因为这个问题的解决方案有100多个 我也必须读一读 约束:我非常希望不必编写一些解析例程,因为它很可能 对于所有括号计数,匹配和分层,结果出错了。
任何想法,暗示,建设性批评都是受欢迎的。
TIA,
仍在学习史蒂夫
答案 0 :(得分:0)
考虑一下,
; this is structured as your input with just a space after the first name
#;1> (define inp
'(techdisps (foo bar baz)
(foo1 bar1 baz1)
(foo2 bar2 baz2)))
#;2> inp
(techdisps (foo bar baz) (foo1 bar1 baz1) (foo2 bar2 baz2))
#;3> (define techdisps cdr)
;get all the displays from you input
#;4> (techdisps inp)
((foo bar baz) (foo1 bar1 baz1) (foo2 bar2 baz2))
;this should be just a tech display, let's see how it parses.
#;5> (car (techdisps inp))
(foo bar baz)
#;6> (define foo car)
#;7> (define bar cadr)
#;8> (define baz caddr)
;this will give us all the bazes
#;9> (map baz (techdisps inp))
(baz baz1 baz2)
如果你认为这不会扩大规模(虽然100多个人不会成为一个现代计划翻译在一个体面的盒子中会遇到麻烦),我们可以提出替代方案。 希望这可以帮助。
干杯。