文字列からsxml式を作成する単純なパーサーを作成しようとしています。
"This is a [Test]" ===> (item "This is a" (subitem "Test"))
与えられた例の中の角括弧について疑問に思っている人は誰でも、いわゆるライデンの慣習を見るかもしれません。
これは私がこれまでに書いたコードです:
(define my-sequence '("this" "[" "is" "a" "]" "test"))
(define (left-square-bracket? item)
(or (equal? item "[")
(eq? item #\x005b)))
(define (right-square-bracket? item)
(or (equal? item "]")
(eq? item #\x005d)))
(define (parse-sequence sequence)
(cond ((null? sequence) '())
((left-square-bracket? (car sequence))
(let ((subsequence (get-subsequence (cdr sequence))))
(list subsequence)))
(else
(cons (car sequence)
(parse-sequence (cdr sequence))))))
(define (get-subsequence sequence)
(if (right-square-bracket? (car sequence))
'()
(cons (car sequence)
(get-subsequence (cdr sequence)))))
(parse-sequence my-sequence)
歩留まりの評価("this" ("is" "a"))
。ネストされた式が作成されましたが、プログラムは最後の項目を評価せずに終了しました"test"
。問題は、どうすればからに戻ることができるかということget-subsequence
ですparse-sequence
。
どんな助けでもありがたいです、事前に感謝します!:)