将多个变量(image-> color-list)作为过程参数RACKET传递

时间:2013-05-22 23:00:23

标签: functional-programming scheme pseudocode racket

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

找到一个多次使用的变量: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)))

是否有可能做到这一点或是不可能的事情?

2 个答案:

答案 0 :(得分:2)

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

你甚至不需要进一步思考。此时,您知道您要编写的函数的形状必须符合以下形式:

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

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

答案 1 :(得分: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