Λί

Λίστες σε Common Lisp

15 ασκήσεις

Σχετικά με την έννοια Λίστες

Οι λίστες είναι ένας από τους πιο συνηθισμένους τύπους δεδομένων στη Common Lisp. Αποτελούνται από μια ακολουθία από κύτταρα cons. Κάθε car είναι ένα στοιχείο της λίστας και κάθε cdr είναι είτε το επόμενο κύτταρο cons είτε ένα άτομο που τερματίζει τη λίστα.

Μια λίστα που τερματίζεται με την κενή λίστα ονομάζεται "κανονική λίστα".

Μια λίστα που τερματίζεται με ένα άτομο που δεν είναι η κενή λίστα ονομάζεται "λίστα με τελεία" (με βάση τον τρόπο με τον οποίο εκτυπώνεται: (cons 'a 'b) ;=> (a . b)).

Μια λίστα μπορεί επίσης να είναι κυκλική αν κάποιο κύτταρο cons της λίστας είναι το cdr ενός επόμενου κυττάρου cons. Για παράδειγμα: (let ((x (list 1))) (setf (cdr x) x) (write x :stream t :circle t) :done). Να προσέχεις όταν δουλεύεις με κυκλικές λίστες, γιατί αν τις αφήσεις να εκτυπωθούν χωρίς να δεσμεύσεις το *print-circle* σε t, θα προκληθεί ατέρμονος βρόχος και το REPL θα κολλήσει (σε αυτό το παράδειγμα, δίνοντας :circle t στο write, το *print-circle θα δεσμευτεί στο t).

Συνδυασμός λιστών

Μπορείς να καλέσεις την append με οποιονδήποτε αριθμό λιστών, ακόμη και με 1 ή 0:

(append '(a b c) '(1 2 3)) ; => (A B C 1 2 3)
(append '(a b c) '()))     ; => (A B C)
(append '(a b c))          ; => (A B C)
(append)                   ; => ()

Ως εναλλακτική της append υπάρχει η nconc, η οποία δίνει το ίδιο αποτέλεσμα αλλά έχει την παρενέργεια να τροποποιεί τις λίστες. Πρέπει να προσέχεις όταν χρησιμοποιείς τη nconc, καθώς μπορεί να έχει απρόσμενες επιπτώσεις.

Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα

Μάθε την έννοια Λίστες

Η εξάσκηση είναι κλειδωμένη

Ξεκλείδωσε 5 ακόμη ασκήσεις για να εξασκηθείς στην έννοια Λίστες