1
(define obamicon
  (lambda (clr2)
  (image-map (lambda (clr1) (image-ref clr1 (+ (color-ref clr1 'red)(color-ref clr1 'green)
                                          (color-ref clr1 'blue))))

(cond
      [(<= clr2 181) (color-set! clr2 [0 51 76])]
      [(and (>= clr2 182) (<= clr2 363)) (color-set! clr2 [217 26 33])]
      [(and (>= clr2 364) (<= clr2 545)) (color-set! clr2 [112 150 158])]
      [(and (>= clr2 546) (<= clr2 765)) (color-set! clr2 [252 227 166])]))))

オバマキャンペーンのポスターをエミュレートするように画像を変更するプログラムを作成しています。イメージマップは、各ピクセルを取得し、それらを加算して合計を取得することを想定しています。その合計は、condステートメントでチェックされ、どの色が置き換えられるかを確認します。今のところ、私は

Exception in <=: #[color 0 0 0] is not a real number or clr1 is not bound.

何が悪いのかについて何か考えはありますか?

ありがとう!

4

2 に答える 2

0

これは、コンパイラが構文エラーについて不平を言っているのではなく、渡されたパラメーターについて不平を言っているイメージマップ関数 (または、それが呼び出す関数) です。

image-map関数には詳しくありませんが(標準ライブラリ関数ですか、それともあなたが作成した関数ですか?)、コードに構造的なエラーがあると思います。2 つのパラメーターを指定してimage-mapを呼び出しています。1 つは関数、もう 1 つはcondステートメントの出力です。それはあなたが意図したことではない、またはそうである場合、condステートメントは未定義の値を返していると確信しています。image-mapは 2 番目のパラメーターで有用なものを何も受け取っておらず、値を渡さずに無名関数を呼び出していると思います。あなたの匿名関数は文句を言います。

したがって、コード構造を整理してください。image-map の 2 番目のパラメータには何が含まれているはずですか? 置き方を工夫してください。

于 2012-10-17T09:40:20.273 に答える
0

The issue is in the statements which look like (<= clr2 181), because colors cannot be compared to numbers. Thus, the <= function is complaining that you didn't pass it two numbers, you passed it a color and a number.

于 2012-10-17T10:36:56.430 に答える