1

を使用できるようにするための次のテスト例がありますがread、いくつかの問題が発生します。

#lang racket
(struct test (num) #:prefab)
(define s3 (read (open-input-string "((AK= #s(test .)) (AV))")))
(match s3
   [`((AK= ,(struct test (val))) (AV)) (displayln val)])

出しますread: unexpected)'`

が原因であることはわかっています.が、私のソースにはこの種のものがたくさん含まれています。

前もって感謝します...

4

1 に答える 1

2

read-accept-dotとでドットの読み取りを無効にできますがread-accept-infix-dot、ドットがあるとエラーになります。したがって、ここでカスタムの readtableを使用したいようです(ガイドのセクションも読んでください)。

#lang racket
(struct test (num) #:prefab)
(define rt:no-dots
  (make-readtable (current-readtable)
                  #\. 'non-terminating-macro (  _ #'|.|)))
(define (read-with-dots str)
  (parameterize ([current-readtable rt:no-dots])
    (read (open-input-string str))))
(define s3 (read-with-dots "((AK= #s(test .)) (AV))"))
(match s3
   [`((AK= ,(struct test (val))) (AV)) (displayln val)])

または、ドットをコメントとして扱うようにすることもできます:

(define rt:no-dots
  (make-readtable (current-readtable)
                  #\. 'non-terminating-macro
                  (  _ (make-special-comment #f))))
于 2012-09-28T21:22:43.187 に答える