私は最近、lispプログラミングを学ぶためにSICPを読んでいます。
本には、以下のような高レベルの関数和を作成する例があります。
(define (sum term a next b)
...
(term a)
...
(next a)
...
この関数では、termとnextが関数です。
同じ関数をelispでこのように記述したいと思います。
(defun sum (term a next b)
....
(funcall term a)
...
(func next a)
....
次に、合計をテストするためにいくつかのテスト関数を定義します
(defun inc-test (x) (+ x 1))
sum inc-test 1 inc-test 10
しかし、次のようなエラーが表示されます:無効な関数:inc-test
私はelispを使い始めたばかりなので、修正方法を誰かに教えてもらえますか?とても感謝しています
こんにちは、呼び出し例を追加
—
Luis404 '14
Emacs Lispには、関数と変数の2つの名前空間があります。つまり
—
wvxvw 2015
inc-test
、最後の例では変数として使用されていますが、変数として定義されていません(関数です)。シンボルまたは関数参照をに渡す必要がありfuncall
ます。したがって、コードを修正する1つの方法は'inc-test
、inc-test
(引用符に注意して)の代わりにコードを渡すことです。
これはどういう意味ですか:sum 'inc-test 1' inc-test 10 ??? このエラーが発生しました:使用方法:合計:(TERM A NEXT B)
—
Luis404
2つの名前空間と1つの問題は、elispとcommon lispの大きな違いの1つであり、もう1つはスキームです。SICPを読んでlisp-2で練習する場合、混乱することになります(変数と関数に別々の名前空間を持つ種類が呼び出されるため)。おそらく、実際のスキーム実装を試してみる必要がありますか?
—
Harald Hanche-Olsen
sum
?