1

パターン マッチングを機能させようとしていますが、コンパイラではなく Chicken インタープリターでしか機能しません。

インタープリターでの例を次に示します。

CHICKEN
(c) 2008-2015, The CHICKEN Team
(c) 2000-2007, Felix L. Winkelmann
Version 4.10.0 (rev b259631)
freebsd-unix-clang-x86-64 [ 64bit manyargs dload ptables ]
compiled 2015-08-04 on yves.more-magic.net (Linux)

#;1> (use matchable)
; loading /usr/local/lib/chicken/7/matchable.import.so ...
; loading /usr/local/lib/chicken/7/chicken.import.so ...
; loading /usr/local/lib/chicken/7/lolevel.import.so ...
; loading /usr/local/lib/chicken/7/matchable.so ...
#;2> (match '((1 2) (3 4)) [(a . b) b] [() 0])
((3 4))
#;3>

コンパイルされたバージョンは次のとおりです。

(declare (uses matchable))

(match '((1 2) (3 4))
       [(a . b) b]
       [() 0])

これは失敗します ( csc src/test.scm):

Syntax error: (src/test.scm:4) - malformed expression: (a . b)
inside expression `(match ...)'


Expansion history:

<syntax>          (##core#begin (match (quote ((1 2) (3 4))) ((a . b) b) (() 0)))
<syntax>          (match (quote ((1 2) (3 4))) ((a . b) b) (() 0))
<syntax>          (quote ((1 2) (3 4)))
<syntax>          (##core#quote ((1 2) (3 4)))
<syntax>          ((a . b) b)
<syntax>          (##core#let ((g0 (a . b))) (g0 b))
<syntax>          (a . b)       <--

私は何を取りこぼしたか?

4

1 に答える 1

3

コンパイル時にインポート ライブラリをロードする必要があります。このステートメントは、実行時declareに依存することを単に示しています。matchable

インタプリタで行ったのと同じことを行うだけです:(use matchable)の代わりに(declare (uses matchable)).

于 2016-05-25T11:35:47.967 に答える