次のものを作成する必要があります: 「proc2」という名前の Scheme プロシージャ。4 つの数値を引数として取り、最大の引数から最小の引数を引いた値を返します。
だから私は書きたい (define proc2 lambda(abcd) ... )
(> ab), (> ac), (> ad) を同時に評価する方法はありますか? ネストされた if を書かなくても、最大 (および最小) の数値を取得したい。
次のものを作成する必要があります: 「proc2」という名前の Scheme プロシージャ。4 つの数値を引数として取り、最大の引数から最小の引数を引いた値を返します。
だから私は書きたい (define proc2 lambda(abcd) ... )
(> ab), (> ac), (> ad) を同時に評価する方法はありますか? ネストされた if を書かなくても、最大 (および最小) の数値を取得したい。
max
およびmin
プロシージャを使用できますか? 答えが「はい」の場合、それは非常に簡単です。
(- (max a b c d) (min a b c d))
<
そうでない場合、>
、<=
、は可変数の引数を受け入れるので、これは有効なコードであり、より小さいか、より小さいか、より小さい>=
かを教えてくれることを覚えておいてください (ただし、 、、~のより多くの組み合わせをテストする必要があります)。が最小値であることを確認してください)。a
b
b
c
c
d
b
c
d
a
(< a b c d)
また、2 つ以上の数値が等しい場合を考慮することも忘れないでください (そのため、<=
代わりにを使用することをお勧めします<
)。
とにかく、条件を使用する必要があります。入れ子になったif
s かもしれませんし、おそらくcond
物事を単純にするための a かもしれません。詳細は自分で解決できます。これは宿題だと思います。
リストの最小メンバーと最大メンバーを見つけたいが、標準のminおよびmaxライブラリ関数の使用が許可されていない場合、3 つの方法を考えることができます。
(apply - (find-min-and-max 3 2 8 7))
、find-min-and-maxが関数である場合、減算の結果が返されます。オプション 1 はオプション 2 よりも効率的ではありませんが、記述ははるかに簡単です。オプション 3 はどちらよりも複雑ですが、実際には要求したことを実行します (つまり、aをb、cおよびdと「同時に」比較します)。
たとえば、次の関数を定義したとします。
(define (compare test x l)
(map (lambda (y) (test x y)) l))
それから
(compare < 3 '(1 2 4))
戻るだろう(#f #f #t)
これはあなたにとってどのように役立ちますか?さて、(compare < x l)
すべて true を返す場合、xはlのすべての要素よりも小さいです。すべて false を返す場合、xはlのすべての要素よりも大きくなります。したがって、mapを使用して必要なコードを作成できますが、それは見苦しく、最も効率的な方法ではないと思います。ただし、具体的に要求したことは実行します (リスト要素の複数の同時比較)。