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^" 全体の記号として解析されますか?)