SICP の講義とテキストを使用して、Scheme について独学しています。「式 E の適用は (E E1,...En という形式の式です。これには、式 (E) に対応する n=0 の場合が含まれます。カリー化されたアプリケーション」という演習を見ています。 E のアプリケーションは、E のアプリケーションまたは E の Curried アプリケーションのアプリケーションです。」
(編集:上記の引用を修正しました...もともと定義を誤って引用していました。)
タスクは、3 に評価される手続きの Curried アプリケーションを定義することです。
(define foo1
(lambda (x)
(* x x)))
私はここでのアイデアを本当に理解していません. Curriying に関するウィキペディアのエントリを読んでも、あまり役に立ちませんでした.
ここで求められていることについて、より明確な説明を手伝ってくれる人はいますか?
この問題の後にさらに 5 つの解決すべき問題があるため、実際にこの問題の答えを教えていただけると助かります。... 基本的な考え方がわかりません。
追加: ブライアン・キャンベルの長い説明の後でさえ、私はまだ少し迷っています.
(foo1 (sqrt 3)))
foo のアプリケーションと見なされるため、foo のカリー化されたアプリケーションと見なされますか?
単純すぎるようですが、多分...
(((foo1 2 )) 2)
DrScheme に入力すると、次のエラーが表示されます (これは私が期待していたものです)。
procedure application: expected procedure, given: 4 (no arguments)
再読後カレーとは?foo1 を次のように再定義することもできることを理解しています。
(define (foo1 a)
(lambda (b)
(* a b)))
それで、私はタイプすることができます
((foo1 3 ) 4)
12
しかし、これは出力として 3 を生成することに実際には近づきません。これは、元の foo1 を実際にカリー化しているのではなく、再定義しているだけのようです。
くそー、C プログラミングの 20 年間は、これに対する準備ができていませんでした。:-) :-)