我正在为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))))))
返回The 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))))
答案 0 :(得分:2)
错误是因为在参数列表之外获取函数的表达式返回包含函数的列表,而不是函数本身。
你应该改变:
(func (cddr (cadddr args))))
使用:
(func (caddr (cadddr args))))
答案 1 :(得分:0)
约旦,
我正在尝试解决Windows 10上的LNK1168错误,该错误与您几个月前在问题中描述的错误相同。我没有其他方式与您联系,因为从那时起您已明确编码,我认为您已经解决了这个问题。
你做了什么来解决它?
由于