这是家庭作业的一部分,我似乎无法弄清楚。我想知道是否有人能指出我正确的方向?
问题是:
(insert-list-of-pairs vw-pair-list heap)
计算插入产生的堆 从列表vw-pair-list
到堆heap
的所有值 - 权重对。
以前的功能是在作业中创建的,用于此问题:
(define (create-heap vw-pair left right)
(list vw-pair left right))
(define (h-min heap)
(car heap))
(define (left heap)
(cadr heap))
(define (right heap)
(caddr heap))
在上一个问题中,我能够使用以下代码成功地将一对添加到堆中:
(define (insert vw-pair heap)
(if (null? heap)
(create-heap vw-pair '() '())
(if (< (weight vw-pair) (weight (h-min heap)))
(create-heap vw-pair (right heap) (insert (h-min heap) (left heap)))
(create-heap (h-min heap) (right heap) (insert vw-pair (left heap))))))
我尝试使用以下代码实现类似的过程但没有成功:
(define (insert-list-of-pairs vw-pair-list heap)
(if (null? vw-pair-list)
heap
(if (< (car vw-pair-list) (h-min heap))
(create-heap (car vw-pair-list) (right heap)
(insert-list-of-pairs (cdr vw-pair-list) heap))
(create-heap (h-min heap) (right heap)
(insert-list-of-pairs vw-pair-list heap)))))
非常感谢任何和所有帮助!
答案 0 :(得分:2)
您之前的问题是定义insert
的原因很充分
您现在不仅知道如何实现insert
,而且还有一个可用于插入的功能,因此您永远不需要再次实现它。
因为什么是这样的对的列表?
如果它不是空的,则是一对,然后是对的列表 而且你已经有了一个将一对插入堆中的函数。
如果只有一个函数将一对列表插入堆中,您可以使用它将列表的其余部分插入堆中,然后将insert
列表的第一个元素插入到中< / em>堆,然后你会完成。
但是 - 尤里卡! - 您正在编写的“将一对列表插入堆中”功能 所以,你递言:
(define (insert-list-of-pairs vw-pair-list heap)
(if (null? vw-pair-list)
heap
(insert (car vw-pair-list)
(insert-list-of-pairs (cdr vw-pair-list) heap))))
然后你就完成了。