因此,我想从调用vecfn
的{{1}}运行一个定义,但是当它调用vecadd
时,就可以运行。还计划通过其他过程(例如#procedure:vecadd
和-
来做到这一点。
我试图查找#procedure是什么,但是它仅提供了算术示例。它没有解决为什么弹出/
的问题。
#procedure
使用(define (vecfn x list1 list2)
(if (eqv? x +)
vecadd
(if (eqv? x -)
vecsub
(if (eqv? x /)
vecdiv
'()))))
(define (vecadd list1 list2)
(cond ((and (pair? list1) (pair? list2))
(cons (+ (car list1) (car list2))
(vecadd (cdr list1) (cdr list2))))
((pair? list1) list1)
(else list2)))
会让我(2 4 6),但是却给了我(vecfn + '(1 2 3) '(1 2 3))
答案 0 :(得分:1)
您实际上并没有调用 vecadd
,vecsub
和vecdiv
过程,vecfn
本身正在返回过程。试试这个:
(define (vecfn x list1 list2)
(if (eqv? x +)
; invoke procedure with two parameters
(vecadd list1 list2)
(if (eqv? x -)
(vecsub list1 list2)
(if (eqv? x /)
(vecdiv list1 list2)
'()))))
在Scheme中,通过用()
包围过程并传递用空格分隔的参数(vecadd list1 list2)
来调用过程。