スキーム:なぜ、ここで指揮を使用する必要はありますか?
-
21-09-2019 - |
質問
私が書き込みしようとした(単純な、すなわちeqan?
せず)のようなそのようなone?
機能:
(define one?
(lambda (n)
((= 1 n))))
しかし、上記しないの仕事しかし、私は、このようなようにそれを呼び出したときに理由ます:
(one? 1)
私は、このエラーで迎えますます:
procedure application: expected procedure, given: #t (no arguments)
<時間>
これを書くために(のリトルスキーマーのからの)正しい方法はあります:
(define one?
(lambda (n)
(cond
(else (= 1 n)))))
なぜcond
句でelse
を使用する必要はなく、ただ返す(= 1 n)
で、あるのでしょうか?
解決
あなたがそれをしたいと思う理由は何らかの理由がありません。私は私が上で何が起こっているのか占うことができるかどうかを確認するために家に帰るとき、私はTLSの私のコピーをチェックしますが、cond
か何かについての基本的なものが欠落していない。
の上ご了承の応答:あなたは、ラムダの身体の括弧の余分なセットを持っているので、それは働いていません。それがあるべき
(lambda (n) (= 1 n))
代わりに、値#t
または#f
を返す、引数なしの関数として、その値を呼び出すようにしようとしていること。ご使用のバージョンの平均で余分な括弧
他のヒント
動作するはずかのように
のリトルスキーマーの便利な、あなたの例のルックスのコピーを持っていません。私はcond
は無関係のだと思います。 psudeo-Cに(COND有する)equivantである
int
one(int n)
{
switch (foo) {
default:
return 1 == n;
}
}
所属していません StackOverflow