1

2 つのカラーリストを受け入れる手順を作成しようとしています。この手順は別の手順(ローカル)内にあるためです。引数を渡すときに、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)))

これを行う方法はありますか、それとも不可能ですか?

4

2 に答える 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

これが正しいかどうか見てみましょう。別のプロシージャ内にプロシージャがあり、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 に答える