(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.
任何有关错误的想法?
谢谢!
答案 0 :(得分:0)
那不是你的编译器抱怨语法错误,图像映射函数(或者更确切地说,它调用的函数)抱怨一个参数已被传递给它。
我不熟悉图像映射功能(它是标准库函数还是您编写的函数?)但我认为代码中存在结构错误。您使用两个参数调用 image-map - 一个是函数,另一个是 cond 语句的输出。我非常确定这不是您打算做的,或者当 cond 语句返回未定义的值时。我认为 image-map 在其第二个参数中没有任何用处,然后调用你的匿名函数没有值传递给它。然后你的匿名函数会抱怨。
所以理清你的代码结构。在图像映射的第二个参数中应该是什么?弄清楚如何把它放在那里。
答案 1 :(得分:0)
问题出现在(<= clr2 181)
的陈述中,因为颜色无法与数字进行比较。因此,<=
函数抱怨你没有传递两个数字,你传递了一个颜色和一个数字。