Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Recursion 方案中的向量乘函数,操作初始递归参数_Recursion_Lambda_Scheme_Racket - Fatal编程技术网

Recursion 方案中的向量乘函数,操作初始递归参数

Recursion 方案中的向量乘函数,操作初始递归参数,recursion,lambda,scheme,racket,Recursion,Lambda,Scheme,Racket,我一直在研究scheme中的向量乘函数,发现自己陷入了困境。我不想使用任何循环,我不想使用任何方案内置的功能以外的那些我已经包括。我创建了一个名为rotate和dotproduct的助手函数。如果我在球拍(vectormult'(12-1)(rotate'((023)(120)(103)))中这样做,我可以得到正确的值如何在每次递归调用后旋转初始参数而不重新旋转?注意:我不想引入其他参数如果我的逻辑/方法完全错误,请帮助我走上正确的道路。 代码 如果我理解了这个问题,您可以将当前的vectorm

我一直在研究scheme中的向量乘函数,发现自己陷入了困境。我不想使用任何循环,我不想使用任何方案内置的功能以外的那些我已经包括。我创建了一个名为rotate和dotproduct的助手函数。如果我在球拍
(vectormult'(12-1)(rotate'((023)(120)(103)))中这样做,我可以得到正确的值如何在每次递归调用后旋转初始参数而不重新旋转?注意:我不想引入其他参数如果我的逻辑/方法完全错误,请帮助我走上正确的道路。

代码
如果我理解了这个问题,您可以将当前的
vectormult
重命名为,比如说,
rotatedvectormult
(并相应更改其递归调用),然后让
vectormult
在调用
rotatedvectormult
之前只需旋转参数即可。这样,
rotatedvectormult
就知道参数已经被旋转了,但是
vectormult
仍然可以使用未旋转的向量。

我最终放弃了旋转函数,转而添加了两个函数
getFirsts
removeFirsts

代码
vectormult
似乎不调用
rotate
;这些额外的旋转是从哪里来的?我想利用vectormult中的旋转函数,所以我不必在参数中调用它
(define dotproduct
  (lambda (l1 l2)
    (if (or (null? l1) (null? l2))
        0
        (+ (* (car l1) (car l2)) (dotproduct (cdr l1) (cdr l2))))))

(define getFirsts
  (lambda (l)
    (cond
      ((null? l) `())
      (else (cons (first* l) (getFirsts (cdr l)))))))

(define removeFirsts
  (lambda (l)
    (cond
      ((null? l) `())
      ((null? (car l)) `())
      (else (cons  (cdr (car l)) (removeFirsts (cdr l)))))))

(define rotate
  (lambda (l)
    (cond
      ((null? l) `())
      ((null? (first* l)) `())
      (else (cons (getFirsts l) (rotate (removeFirsts l)))))))

(define vectormult
  (lambda (l1 l2)
    (cond
      ((null? l2) `())
      (else (cons (dotproduct l1 (car l2)) (vectormult l1 (cdr l2)))))))
(define getFirsts
  (lambda (l)
    (cond
      ((null? l) `())
      (else (cons (first* l) (getFirsts (cdr l)))))))

(define removeFirsts
  (lambda (l)
    (cond
      ((null? l) `())
      ((null? (car l)) `())
      (else (cons  (cdr (car l)) (removeFirsts (cdr l)))))))

;(define rotate
;  (lambda (l)
;    (cond
;      ((null? l) `())
;      ((null? (first* l)) `())
;      (else (cons (getFirsts l) (rotate (removeFirsts l)))))))

(define vectormult
  (lambda (l1 l2)
    (cond
      ((null? (first* l2)) `())
      (else (cons (dotproduct l1 (getFirsts l2)) (vectormult l1 (removeFirsts l2)))))))