从Racket列表中删除空格

时间:2014-03-07 05:23:08

标签: list recursion formatting racket conjunctive-normal-form

我正在研究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 ^”整个符号?)

1 个答案:

答案 0 :(得分:3)

RE-编辑:

根据您在下面发表的评论,我认为您实际上将在Racket中编写此算法。

在这种情况下,我有一个很多更简单的处方:不要做任何事情。特别是,您的输入当前不包含任何空格。您看到的空格是作为Racket显示机制的一部分插入的,就像数据库打印机可能打印用逗号或制表符分隔的字段一样。

不要担心逗号,而是专注于解析算法。它需要什么,它产生了什么?