1

構造体と一致させ、そこから構造体を構築したいのですtestが、どうすればよいですか?
私もこれを行うために使用evalすることはできませんか?

コードを参照してください、

#lang racket

  (struct test (num) #:prefab)

  (define s `((AK= #(struct:test 100))
   (AV)
   ))

  (define ns (make-base-namespace))
   (define (set-state-space-vals!)
   (namespace-set-variable-value! 'test test #f ns)
   )

(match s
   [`((AK= #(struct:test ,val) (AV)))  ;; can't match
     (displayln val)
    ]
   [`((AK= ,val) (AV))   ;; can match, but how to build the struct?
     (struct? (eval val ns))
     (match-define (struct test (num)) (eval val ns)) ;this will fail
     (displayln num)
    ]  )
4

2 に答える 2

3

私はあなたがこのようなものを探していたと思います:

(struct test (num) #:prefab)

(define s '((AK= #s(test 100)) (AV)))

(match s
  [`((AK= ,(struct test (val))) (AV))
   (displayln val)])

また、一般的evalにこのような状況で使用することは強くお勧めできません。疑わしい場合は、を使用しないでくださいeval。詳細な説明については、このブログ投稿を参照してください。プレハブパターンマッチングに関するガイドエントリもご覧ください。

于 2012-09-28T18:53:06.127 に答える
1

また、一致のドキュメントにはありませんが、 `((AK = #s(test、val))(AV))は有効なパターンです。

于 2012-09-28T19:01:50.697 に答える