复合对象不适用

The compound object is not applicable

我正在为 MIT-Scheme 编写一个小型绘图实用程序。 来源: [plotlib].

顶层是 (make-plot output mode args) 函数,它接收输出设备对象、绘图模式和包含模式中指定的绘图类型参数的列表。 我将使用函数 (range start stop increment) 为每个增量生成从包含开始到排他停止的列表。 (range -1 1 .1) 创建列表 (-1 -.9 -.8 ... .9).

make-plot 适用于它的其他模式,但在使用 'vector-field-plot

调用时不起作用
(define window (make-graphics-device 'win32))

(define (vector-field-plot device color xrange yrange func) 
  (let* ((cords (append-all (map (lambda (i) 
                                   (map (lambda (j) 
                                          (cond ((eq? j '()) '()) 
                                                (else (cons i j)))) 
                                        xrange)) 
                                  yrange))) 
         (input (map (lambda (point) 
                       (list (car point) (cdr point) 
                             (car (func (car point) (cdr point))) 
                             (cdr (func (car point) (cdr point))))) 
                     cords))) 
    (draw-vector-list device color input)))

;This is the part of make-plot that is called for 
;(make-plot window 'vector-field-plot '(args))

((eq? mode 'vector-field-plot)
       ;does not work yet
        (let* ((bg-color (car args))
               (grid-color (cadr args))
               (line-color (caddr args))
               (xrange (car (cadddr args)))
               (yrange (cadr (cadddr args)))
               (func   (cddr (cadddr args))))
         (clear output bg-color);sets background to white
         (coord-grid-cart output grid-color);prints Cartesian coordinate grid
         (vector-field-plot output line-color xrange yrange func)))))
         ;calls vector-field-plot with parameters given to make-plot
;I have left out some function definitions here, they are in the source file
;but you can assume all of those work correctly for this section

make-plot 的一种模式打印矢量场,它调用函数 (vector-field-plot output line-color xrange yrange func) xrange 和 yrange 是数字列表,如 '(-1 -.9 ... 1) 和形式的函数 (lambda (x y) (cons x y)).如果我使用:

(make-plot window 'vector-field-plot (list "white" "black" "red"
                                           (list (range -1 1 .1) (range -1 1 .1) 
                                           (lambda (x y) (cons (* -.1 y) (* -.1 x))))))

它returnsThe object (#[compound procedure ]) is not applicable.

但是如果我使用:

(vector-field-plot window "red" (range -1 1 .1) (range -1 1 .1) 
                                (lambda (x y) (cons (* -.1 y) (*  .1 x))))

它在图形中显示正确的绘图(圆形矢量场)window。

错误是因为获取函数的表达式在参数列表之外 returns 一个包含函数的列表,而不是函数本身。

你应该改变:

(func   (cddr (cadddr args))))

与:

(func   (caddr (cadddr args))))

约旦,

我正在尝试解决 Windows 10 上的 LNK1168 错误,该错误与您几个月前在某个问题中描述的错误相同。我无法通过其他方式与您联系,而且由于您从那时起显然已经编码,我认为您已经解决了问题。

你做了什么来解决它?

谢谢