我一直在研究方案中的向量乘法函数,并发现自己处于车辙之中。我不想使用任何循环,我不想使用除已包括的函数以外的函数中构建的任何方案。我创建了一个名为rotate和dotproduct的帮助函数。如果我在球拍(vectormult '(1 2 -1) (rotate '((0 2 3) (1 2 0) (1 0 3))))
中这样做,我可以得到正确的值。 如何在每次递归调用之后旋转初始参数而无需重新旋转?注意:我不想引入其他参数。 如果我的逻辑/方法是错的,请帮助我走上正确的轨道。方案中的向量乘法函数,操纵初始递归参数
代码
(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)))))))
'vectormult'不会出现叫'rotate';这些额外旋转来自哪里? –
我想利用vectormult中的旋转函数,所以我不必在参数中调用它 –