2

プロンプトは、3 つの数値のうち最大の 2 つの数値の 2 乗和を返すプロシージャを定義することです。

これは正確にはエレガントな解決策ではないことはわかっていますが、これは私が一緒にハッキングしたものです:

(define (largest-of-two-sum-of-squares x y z)
        (cond ((and (< x y) (< x z)) (sum-of-squares y z))
              ((and (< y z) (< y x)) (sum-of-squares x z))
              ((and (< z x) (< z y)) (sum-of-squares x y)))))

私が疑問に思っているのは、なぜエラーが発生するのかということです。

;The object 85 is not applicable

オブジェクトという単語に続く数字は、常に正しい答えです。私はスキームの初心者です。それは私の構文に何かあるに違いありませんか?

ありがとう

4

3 に答える 3

3

これは別の解決策です。これは、3 つの数値がすべて等しい場合、または 2 つの数値が等しく、他の数値よりも小さい場合でも機能します。

(define (sum-max a b c)
  (define (sum x y)
    (+ (* x x) (* y y)))
  (if (>= a b)
      (if (>= b c)
          (sum a b)
          (sum a c))
      (if (>= a c)
          (sum b a)
          (sum b c))))
于 2012-03-10T17:36:25.627 に答える
1

どうですか

(define (largest-of-two-sum-of-squares x y z)
    (+ (square x) (square y) (square z)
       (- (square (min x y z)))))

?

于 2012-03-11T22:17:06.937 に答える
1

sindikat が指摘したように、過剰な閉じ括弧です。申し訳ありません。

于 2012-03-10T17:18:55.083 に答える