复合对象不适用
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 错误,该错误与您几个月前在某个问题中描述的错误相同。我无法通过其他方式与您联系,而且由于您从那时起显然已经编码,我认为您已经解决了问题。
你做了什么来解决它?
谢谢
我正在为 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 错误,该错误与您几个月前在某个问题中描述的错误相同。我无法通过其他方式与您联系,而且由于您从那时起显然已经编码,我认为您已经解决了问题。
你做了什么来解决它?
谢谢