我一直在研究方案中的向量乘法函數,並發現自己處於車轍之中。我不想使用任何循環,我不想使用除已包括的函數以外的函數中構建的任何方案。我創建了一個名爲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中的旋轉函數,所以我不必在參數中調用它 –