2017-02-16 14 views
2

Cをコードするために学習しました。スキームで新しいものと違うものを試したかったのです。私は2つの引数を受け取り、そのうちの大きい方を返します。2つの引数を持つスキームプロシージャ

(define (larger x y) 
    (if (> x y) 
    x 
    (y))) 

(larger 1 2) 

又は、

(define larger 
    (lambda (x y) 
    (if (> x y) 
     x (y)))) 

(larger 1 2) 

Iは、これらの両方は、X> Yであれば、すなわち等価戻りXであると信じ。それ以外の場合は、を返します。

これらのいずれかを試してみると、エラーが発生します。 2は、機能エラーではありません。呼び出すことはできません:2

を(私はSICPとTSPL上で読んで数時間を費やしてきたが、何も飛び出していない、おそらく私は、「リスト」と参照を使用する必要があります2つの要素はcdr

です。私が誤って投稿している場合、同じ質問に対する以前の回答を逃した場合、または不適切な場合は、私の謝罪です。

答えて

1

なぜなら、SchemeとすべてのLisp言語では、Cや他の多くの言語とは異なり、括弧は構文の重要な部分です。

例えばそれらは、関数呼び出しのために使用される:(f)手段(引数なし)(呼び出し)関数fを適用しながら(f a b c)手段は、(呼び出し)引数abに機能f、及びcを適用します。

(y)2(現在の値はy)ですが、2は関数ではなく数字(エラーメッセージのように)です。

ブリリアント
(define (larger x y) 
    (if (> x y) 
     x 
     y)) 

(larger 1 2) 
+0

は単純にコードを変更します!ありがとうございました!私はこれがうまくいくことを確認した。私は2が関数のように扱われているのを見ることができましたが、なぜ/どのように理解できませんでした。 Cから来る明確なバイアス。ありがとう、もう一度。 :-) – h34thf

関連する問題