我試圖執行某種購物清單/隊列類型的功能。我有一些問題的功能是removeByPriority。我想通過一個數字和一個項目列表刪除。如果它不在列表中,那麼只需返回列表,但是如果它在列表中,則將其刪除,然後返回一個列表,其優先級已更新。Scheme:從列表中刪除某些內容並更新優先級
例如,(removePriority 2購物列表)將返回:
=> (("Apple" 3) ("Milk" 2) ("Eggs" 1))
我已經創造了一些輔助函數做的工作,並能成功地檢查某個優先級是否是或不是在列表中,但我卡在那裏。
#lang scheme
(define shopping-list '(("Apple" 4) ("Orange" 2) ("Milk" 3) ("Eggs" 1)))
(define name (lambda (m)
(car m)
))
(define priority (lambda (m)
(car (cdr m))
))
(define containsPriority
(lambda (k lst)
(cond
((null? lst)#f)
((equal? k (priority (car lst)))#t)
(else (containsPriority k (cdr lst)))
)
)
)
(removeByPriority k lst)
(define removeByPriority
(lambda (k lst)
(if((not(containsPriority k lst))lst)
(equal? k (priority(car lst)))
(else(removeByPriority k (cdr lst))(cons (car lst)))
)
)
)
(removeByPriority 2 shopping-list)
在你的榜樣,''Eggs''應該優先級爲'0',因爲所有的優先級都應該遞減,對嗎? –
在這種情況下,如果它們大於刪除的優先級,我只是減少優先級。 – user2411290