我正在处理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)))
感谢您的阅读。
编辑:我正在尝试以格式制作输入统一。在新的样本输入中,(〜男孩)被解析为2个符号,(~~男孩)为1个符号,(〜〜女孩)为3。我认为这很难解析。尤其是符号/操作员/空格的不同变化。(即"儿童^"是" child"," child","^"或" child^"整个符号?)
重新编辑:
根据您下面的评论,在我看来,您实际上要在球拍中编写此算法。
在这种情况下,我有一个更简单的处方:不要做任何事情。特别是,您的输入目前根本不包含任何空间。您看到的空间被插入了球拍的显示机制的一部分,与数据库打印机可能会以逗号或选项卡分离的字段与数字相同。
而不是担心逗号,而要关注分辨率算法。它需要什么,它产生了什么?