3

eqan?私は次のような(単純な、つまりなしの)one?関数を書こうとしました:

(define one?
  (lambda (n)
    ((= 1 n))))

しかし、私がそれをそのように呼ぶとき、上記はうまくいきません:

(one? 1)

私はこのエラーで迎えられます:

procedure application: expected procedure, given: #t (no arguments)

( The Little Schemerから)それを書く正しい方法は次のとおりです。

(define one?
  (lambda (n)
    (cond
      (else (= 1 n)))))

単に返すのではなく、 condwith句を使用する必要があるのはなぜですか?else(= 1 n)

4

2 に答える 2

6

あなたがそれをしたいと思う理由は何もありません。家に帰ったらTLSのコピーをチェックして、何が起こっているのかを理解できるかどうかを確認しますが、基本的なことcondや何かを見逃しているわけではありません。

上記のメモへの応答:ラムダの本体に余分な括弧のセットがあるため、機能していません。そのはず

(lambda (n) (= 1 n))

#tバージョンの余分な括弧は、値orを返す代わりに、#f引数のない関数としてその値を呼び出そうとしていることを意味します。

于 2009-12-28T21:39:13.277 に答える
0

The Little Schemerのコピーが手元にないので、あなたの例はうまくいくはずです。condは無関係だと思います。psudeo-Cでは、同等のもの(condを含む)は次のとおりです。

int
one(int n)
{     
    switch (foo) {
        default:
           return  1 == n;
    }
}
于 2009-12-28T21:43:30.667 に答える