Λίστες
- Στη Lisp μπορούμε να ορίσουμε μια λίστα (list)
από τιμές με τη σύνταξη '(τιμή1 τιμή2 τιμή3 ...)
- Η ειδική τιμή nil παριστάνει την κενή λίστα.
- Μπορούμε να αναφερθούμε σε σύμβολα με τη σύνταξη 'όνομα.
Παράδειγμα:
'(1 2 3 4 42)
'word
'('Maria 'John 'Aliki)
Βασικές συναρτήσεις επεξεργασίας λιστών είναι οι παρακάτω:
- (null list)
επιστρέφει αληθές αν η λίστα είναι κενή
- (cons val list)
επιστρέφει τη λίστα list με πρώτο το στοιχείο val,
- (car list)
επιστρέφει το πρώτο στοιχείο μιας λίστας,
- (cdr list)
επιστρέφει τα υπόλοιπα (όλα εκτός από το πρώτο)
στοιχεία μιας λίστας ή nil αν αυτά δεν υπάρχουν.
Με βάση τις συναρτήσεις αυτές μπορούμε να ορίσουμε πιο σύνθετες συναρτήσεις.
Length
Επιστρέφει το μήκος μιας λίστας.
(defun mylength (a)
(if (null a)
0
(+ (mylength (cdr a)) 1)))
Append
Ενώνει δύο λίστες.
(defun myappend (a b)
(if (null a)
b
(cons (car a) (myappend (cdr a) b))))
Reverse
Αντιστρέφει μια λίστα.
(defun myreverse (a)
(if (null a)
nil
(myappend (myreverse (cdr a)) (cons (car a) nil))))