Ich versuche, eine Art Einkaufsliste/Warteschlange Art der Funktion zu implementieren. Die Funktion, mit der ich einige Probleme habe, ist removeByPriority. Ich möchte eine Nummer und eine Liste eines zu entfernenden Artikels eingeben. Wenn sie nicht in der Liste enthalten ist, geben Sie die Liste einfach zurück, aber wenn sie in der Liste enthalten ist, entfernen Sie sie und geben Sie eine Liste mit den aktualisierten Prioritäten zurück.Schema: Entfernen von etwas aus einer Liste und Aktualisieren von Prioritäten
Zum Beispiel (removePriority 2 Shopping-Liste) zurückkehren würde:
=> (("Apple" 3) ("Milk" 2) ("Eggs" 1))
Ich habe einige Hilfsfunktionen erstellt, die Arbeit zu tun, und kann erfolgreich überprüfen, ob eine bestimmte Priorität ist oder nicht in der Liste aber ich stecke da fest.
#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)
In Ihrem Beispiel , '" Eggs "sollte eine Priorität von" 0 "haben, weil alle Prioritäten dekrementiert werden sollten, oder? –
In diesem Fall reduziere ich nur die Prioritäten, wenn sie größer sind als die entfernte. – user2411290