1

我正在尝试创建一个接受两个颜色列表的程序。因为这个过程在另一个过程中(本地)。我需要在传递参数时转换图像->颜色列表。我尝试了不同的方法来声明它们,但编译器错误说:

发现一个多次使用的变量:image->color-list

或者

期望一个变量,但找到了一部分

 (define (colourLists image->color-list bg image->color-list fg))
 (define (colourLists (image->color-list bg) (image->color-list fg)))
 (define (colourLists (image->color-list bg image->color-list fg)))

有没有办法做到这一点,或者这是不可能的?

4

2 回答 2

2

“我正在尝试创建一个接受两个颜色列表的程序。”

你甚至不需要想太多。此时,您知道要编写的函数的形状必须符合以下形式:

;; some-procedure: (listof color) (listof color) -> ???
(define (some-procedure colour-list-1 colour-list-2)
   <fill-me-in>)

也就是说,在image->color其他地方处理列表内容。该函数应该只关心它获取颜色列表。它的定义根本不应该关心它输入的颜色列表是否来自image->color.

于 2013-05-23T00:34:45.477 回答
2

让我们看看我是否做对了。您在另一个过程中有一个过程,该过程必须接收两个列表,但您必须在传递它们之前对其进行转换。大概是这样的吧?

(define (outerProcedure)
  (define (colourLists color-lst1 color-lst2)
    <inner body>)
  <outer body>
  ; colourLists is called at some point in the outer body
  (colourLists (image->color-list bg) ; bg and fg were defined somewhere else
               (image->color-list fg)))

关键是:您必须先转换列表,然后再将它们传递给内部过程。或者,您可以在内部过程中执行转换:

(define (outerProcedure)
  (define (colourLists bg fg)
    (let ((color-lst1 (image->color-list bg))
          (color-lst2 (image->color-list fg)))
    <inner body>))
  <outer body>
  ; colourLists is called at some point in the outer body
  (colourLists bg fg)) ; bg and fg were defined somewhere else
于 2013-05-23T01:05:31.517 回答