我想排序并打印出类似这样的列表:
Apple:1 香蕉:2 ...等(每一对都在一个新的行上,但stackoverflow就像这样显示)
我发现我可以完成它,但是我得到一个错误,它期望一对,而它被给出一个空列表。我理解错误是因为我到达了列表的末尾,并且我需要一个基本案例,但我不确定需要什么。如果我检查列表是否为空,然后将列表作为我的基本案例返回,它就不会输出任何内容。
收到以下错误:
汽车:合同违规预期:对?给出:()
感谢您查看我的问题。
(define lst '( ("Apple" 1) ("Orange" 4) ("Pear"3) ("Banana" 2)) )
(define name (lambda (m)
(car m)
))
(define priority (lambda (m)
(car (cdr m))
))
(define sortList
(lambda (lst)
(sort lst
(lambda (x y)
(<(priority x)(priority y))
)
)
)
)
(define printItem (lambda (m)
(display (name m))
(display " : ")
(display (priority m))
(display "\n")
)
)
(define printQueue
(lambda (lst)
(printItem (car(sortList lst)))
(printQueue (cdr (sortList lst)))
)
)
(printQueue lst)
答案 0 :(得分:2)
您必须确保列表不为空,以使该过程起作用,这是基本情况。还要避免在每次迭代时对列表进行两次排序!试试这个:
(define printQueue
(lambda (lst)
(unless (null? lst)
(printItem (car lst))
(printQueue (cdr lst)))))
(printQueue (sortList lst))
顺便说一句,在这种情况下使用for-each
会更加惯用:
(define (printQueue lst)
(for-each printItem lst))