1
パターンマッチングを試行していますが、コンパイラではなくChickenインタプリタでしか動作しません。ここでチキンコンパイラでパターンマッチングコンパイルエラーが発生しましたが、チキンインタプリタではありません
はインタプリタでの例です:これは(csc src/test.scm
を)失敗し
(declare (uses matchable))
(match '((1 2) (3 4))
[(a . b) b]
[() 0])
:ここ
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>
は、コンパイルされたバージョンである私がやった
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) <--
何ミス?
ありがとうございました!あなたはもう少し詳細に行くことができますか? 'declare'ステートメントは実際にどこで使われていますか?ファイルに '(declare()matchable)'と '(matchable use)'の両方を入れるはずですか? – eatonphil
'(マッチ可能なものを使用する)'は、 'matchable'ユニットに対してコンパイル時に依存することを示します。コンパイル単位は、静的リンク(別々のコンパイル)を実行するときに最も役立ちます。動的リンクが必要な場合は 'declare'を使用せず、'(use ...) 'のみを使用します。 Useは実行時に拡張をロードし、対応するモジュールの識別子もインポートします。 – sjamaan
これはCHICKEN 5でかなり単純化されます。それは初心者のための頻繁な不満の源です。これは主に歴史的な理由によるものです(モジュールは最近の追加であり、コンパイル単位は人々が使う最も一般的なものではありませんが、コンパイルを個別にサポートすることは、クロスコンパイルを可能にするため、CHICKENの重要な設計目標であるため、このマニュアルでは大きな注目を集めています。 – sjamaan