1

Chicken のスキーム コードの次のスニペットがあります。

(require-extension bind)

(bind* "double int_exp(double, int);")
(bind* "double square(double);")

(begin
    (print (int_exp 1.2 1))
    (print (square 2.0)))

int_expおよびsquareは、テスト用に作成した小さなテスト関数 (C で記述) にすぎません。このコードは問題なく動作します。ただし、アスタリスクを削除するとすぐに、コンパイルされたプログラムは偽の値を出力します (偽の値は、clang を使用して C コードをコンパイルしたか gcc を使用してコンパイルしたかによって異なります) 。だけでなく、 foreign-declare"および"[ includes] 与えられた文字列を逐語的に生成されたファイルのヘッダーに挿入する"を使用して、生成されたスキーム展開にコードを埋め込みforeign-declareます。私がチキン (そして実際にはスキーム) に慣れていないことを考えると、どちらも特に役に立ちません。 、bindととの違いは何bind*ですか? どちらを使用する必要がありますか?

4

1 に答える 1

3

私が知る限り、呼び出している関数が、以前にdbindしたヘッダー ファイルで既に宣言されている場合に使用します (すべての Chicken プログラムに含まれる によって自動的に含まれるものを含む)。呼び出している関数がまだ宣言されていない場合は、宣言も発行するために使用する必要があります。#includechicken.hbind*

したがって、これは機能します (math.hには既に含まれていますchicken.h):

(use bind extras)
(bind "double cbrt(double)")
(format #t "cbrt(~a) = ~a~%" 27 (cbrt 27))
于 2013-10-05T19:58:00.857 に答える