2016-07-07 8 views
2

私は引数として関数を定義し、その関数に数値を渡そうとしています。これは私がこれまで持っているものです...私はちょうど3に等しいに機能-3の定義を考えていたが、それは動作しませんようにそれはそう引数として関数を定義し、ラケットで数値を渡す

> (function-3 sqrt) 

1.7320508075688772 

(define function-3 
    (λ (x) 
    (3))) 
それは次のようになります。

私は正しい道を考えているのかどうかわかりませんが、誰かが私を正しい方向に向けることができれば素晴らしいと思います。おかげで

答えて

3

あなたはとても近いです!あなたがクローズあなたはこのように、数3function-3の引数を適用したいしている

(define function-3 
    (lambda (x) 
    (x 3))) 
8

:速記関数の構文を使用して、より多くの慣用的

(define function-3 
    (λ (x) 
    (x 3))) 

、それはおそらく書き込まれます値が関数であるとき

(define (function-3 f) 
    (f 3)) 

(名前fは、多くの場合、代わりにxのに使用されます。このような)


なぜですか?

ラケットの機能(親言語のSchemeなど)は単なる通常の値です。すべての括弧の後ろに、関数アプリケーションの構文は実際は非常に簡単です。以下に、スキーム表現の例を示します。

    (f a b c) 
       ^^^^^^ 
        | | 
function expression argument expressions 

これらの2つの役割のそれぞれは表現です。あなたはこのようなことを行うことができますので、明らかに、引数は、表現だけでなく、変数を指定できます

> (+ 1 (* 2 3)) 
7 

注目すべきは、しかし、関数自体も、表現することができます。あなたは機能を生成し、フォーム、およびその式が関数呼び出しで使用することができていることができます:あなたは(function-3 sqrt)を呼び出すとき

> ((λ (x) (* x 2)) 3) 
6 

だから、sqrt機能自体は、関数に渡されたとの最初の引数にバインドされます関数の実装したがって、あなたがする必要があるのは、その引数を関数式の位置に置くことだけです。他の関数と同じように呼び出されます。

+0

ありがとうございます!私はそれを理解しようとしていた、私はそこに着いていたように感じた!明確化のおかげで – tadashi

関連する問題