我正在开发一个 PL 逻辑解析器,我需要确保输入没有空格或均匀间隔。我认为删除空格会更容易。所以我正在编写一个从输入中删除空格的函数。
到目前为止,我有:
;sample input
(define KB&!alpha
'((Girl)
(~ Boy)
(~~Boy)
( ~(FirstGrade ^ ~ ~ Girl))
(Boy / Child)))
(define formatted null)
;formatting function
(define (Format_Spaces KB&!alpha)
(for/list ((item KB&!alpha))
(cond
((list? item)(Format_Spaces item))
((not (eq? item " "))(set! formatted (append formatted (list item))))
((eq? item " ")(Format_Spaces (cdr KB&!alpha)))
)
)
)
但这显然给了我错误的输出。
不仅空间仍然存在,而且输出是输入的奇怪组合。有人可以帮我解决这个问题吗?
我想得到这样的东西:
'((FirstGrade)
(FirstGrade=>Child)
(Child^Male=>Boy)
(Kindergarten=>Child)
(Child^Female=>Girl)
(Female)))
谢谢阅读。
编辑:我正在尝试使输入格式统一。在新的示例输入中,(~ Boy) 被解析为 2 个符号,(~~Boy) 被解析为 1 个符号,(~ ~ Girl) 被解析为 3 个。我认为这将很难解析。尤其是符号/运算符/空格的不同变体。(即“Child^”是被解析为“Child”、“^”还是“Child^”是一个完整的符号?)