有没有办法让vecfn调用vecadd获得#<procedure:vecadd>

时间:2019-02-14 00:44:56

标签: scheme racket

因此,我想从调用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))

1 个答案:

答案 0 :(得分:1)

您实际上并没有调用 vecaddvecsubvecdiv过程,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)来调用过程。