我正在實作一個程序'map2',它接收兩個串列并回傳每個元素的總和。如果串列是不均勻的,則只回傳最短串列的總和。我的代碼是:
(define (map2 proc items1 items2)
(if (null? items1)
'()
(cons (proc (car items1) (car items2)
(map2 proc (cdr items1) (cdr items2 )))))
使用的例子應該是:
(maps2 '(1 2 3 4) ' (3 4 5)) --> (4 6 8)
我的問題是如何實作處理不均勻串列的部分?
uj5u.com熱心網友回復:
你的解決方案幾乎是正確的--你只需要檢查兩個串列,并在其中一個是空的時候停止。
(define (map2 proc items1 items2)
(if (or (null? items1) (null? items2)
'()
(cons (proc (car items1) (car items2)
(map2 proc (cdr items1) (cdr items2 )))))
例子:
> (map2 '(1 2 3 4) '(3 4 5)
'(4 6 8)
> (map2 * '(1 2) ' (3 4 5)
'(3 8)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/325740.html
標籤:
