【问题标题】:Remove Spaces From List of Lists in Racket从 Racket 的列表中删除空格
【发布时间】:2014-04-10 03:11:51
【问题描述】:

我正在开发一个 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^”是一个完整的符号?)

【问题讨论】:

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


    【解决方案1】:

    重新编辑:

    根据您在下面制作的 cmets,在我看来您实际上是要在 Racket 中编写此算法。

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

    与其担心逗号,不如关注解析算法。它需要什么,产生什么?

    【讨论】:

    • 啊,对不起,我忘了删除那个(显示)它只是为了帮助我在调试时检查我的输出。我现在已经删除了。我还添加了示例输入。谢谢!
    • 感谢您如此详细的回复。首要目标是编写 PL-Resolution 算法的 Racket 实现。我正在尝试将逻辑语句(KB AND NOTalpha)转换为 CNF,以便我可以将其传递到一个循环中,该循环检查空子句并根据需要重复出现。我相信每个命题逻辑句子(输出行)都应该放在自己的括号中,这样我就可以检查是否有任何句子(子句?)是空的。输入数据 KB 可能定义为奇数间距,在转换为 CNF 时可能会导致解析失败,这就是我尝试删除空格的原因。
    • 我稍微澄清了我的问题。请注意新的示例输入和“编辑:”。不知道你能不能帮忙?
    • 你能分享更多关于这个问题的框架吗?输入来自哪里?
    猜你喜欢
    • 2022-11-15
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 2022-06-16
    • 2020-07-05
    • 2017-03-05
    • 2013-04-06
    • 1970-01-01
    相关资源
    最近更新 更多