Διαδρομές
/
Common Lisp
Common Lisp
/
Ύλη
/
Αντιστοίχιση
Αν

Αντιστοίχιση σε Common Lisp

12 ασκήσεις

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

Η απεικόνιση αναφέρεται στην εφαρμογή μιας συνάρτησης σε κάθε στοιχείο μιας ακολουθίας, με σκοπό την παραγωγή μιας νέας ακολουθίας.

Η mapcar μπορεί να χρησιμοποιηθεί για να απεικονίσεις μια συνάρτηση πάνω σε μια λίστα αντικειμένων

(mapcar #'double '(1 2 3 4)) ; => (2 4 6 8)

Πρόσεξε ότι το πρώτο όρισμα είναι μια συνάρτηση που θα κληθεί. Το #' είναι ειδική σύνταξη παράθεσης για να προσδιορίσεις μια συνάρτηση. (Μπορείς να χρησιμοποιήσεις το 'double εδώ, αλλά η χρήση του #' είναι ιδιωματική και, κατά πολλούς, "πιο σωστή".)

Περισσότερες από μία λίστες

Η απεικόνιση δεν περιορίζεται στην εφαρμογή μιας συνάρτησης σε μία μόνο ακολουθία, αλλά μπορεί να γίνει και με πολλαπλές ακολουθίες. Αν δοθούν N ακολουθίες, τότε η συνάρτηση πρέπει να δέχεται N ορίσματα.

(mapcar #'list '(1 2) '(a b) '("foo" "bar")) ; => ((1 a "foo") (2 b "bar"))

Άλλες συναρτήσεις απεικόνισης

Εκτός από τη mapcar, υπάρχουν και άλλες συναρτήσεις για απεικόνιση πάνω σε λίστες. Η mapcar είναι σίγουρα η πιο συνηθισμένη, αλλά καλό είναι να ξέρεις και τις άλλες.

Η maplist λειτουργεί παρόμοια με τη mapcar, αλλά εφαρμόζεται σε διαδοχικές υπολίστες αντί για μεμονωμένα στοιχεία. Πρώτα σε ολόκληρη τη λίστα, μετά στο cdr, μετά στο cdr αυτού κ.ο.κ.:

(maplist #'identity '(a b c)) ; => ((A B C) (B C) (C))

Οι mapc και mapl μοιάζουν με τις mapcar και maplist αντίστοιχα, αλλά δεν συλλέγουν τα αποτελέσματα και επιστρέφουν την πρώτη λίστα. Χρησιμοποιούνται για πράξεις με παρενέργειες.

Οι mapcan και mapcon μοιάζουν με τις mapcar και maplist, αλλά το αποτέλεσμα ισοπεδώνεται με χρήση της nconc, η οποία μοιάζει με την append αλλά είναι καταστρεπτική για όλα τα ορίσματά της εκτός από το τελευταίο.

Απεικόνιση σε άλλες ακολουθίες

Η απεικόνιση δεν περιορίζεται στις λίστες. Πάνω σε οποιαδήποτε ακολουθία (την οποία καλύπτει άλλη έννοια) μπορεί να γίνει απεικόνιση. Στην περίπτωση ακολουθιών που δεν είναι λίστες, χρησιμοποιείται η συνάρτηση map.

Η map δέχεται 3 ή περισσότερα ορίσματα:

  • το πρώτο είναι ο τύπος της ακολουθίας που θα προκύψει
  • το δεύτερο είναι η συνάρτηση που θα εφαρμοστεί
  • το τρίτο και τα υπόλοιπα είναι οι ακολουθίες στις οποίες θα γίνει η επεξεργασία.
(map 'list #'double '(1 2 3))        ; => (2 4 6)
(map 'string #'char-upcase "foobar") ; => "FOOBAR"

Ως ειδική περίπτωση, αν δοθεί το nil ως τύπος της ακολουθίας που θα προκύψει, τότε επιστρέφεται το nil. Αυτό (όπως και οι mapc και mapl παραπάνω) χρησιμοποιείται για παρενέργειες.

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

Μάθε την έννοια Αντιστοίχιση

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

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