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

问题在于看起来像 的语句(<= clr2 181),因为颜色无法与数字进行比较。因此,该<=函数抱怨您没有传递两个数字,而是传递了一个颜色和一个数字。

于 2012-10-17T10:36:56.430 回答
0

那不是您的编译器抱怨语法错误,而是图像映射函数(或者,更确切地说,它调用的函数)抱怨已传递给它的参数。

我不熟悉image-map函数(它是标准库函数还是您编写的函数?)但我认为您的代码中存在结构错误。您正在使用两个参数调用image-map - 一个是函数,另一个是cond语句的输出。我很确定这不是您想要做的,或者如果是这样,那么cond语句将返回一个未定义的值。我认为image-map在其第二个参数中没有收到任何有用的信息,然后调用您的匿名函数而没有传递给它的值。然后您的匿名函数会抱怨。

所以整理一下你的代码结构。image-map 的第二个参数应该是什么?弄清楚如何把它放在那里。

于 2012-10-17T09:40:20.273 回答