Διαδρομές
/
Common Lisp
Common Lisp
/
Ασκήσεις
/
Ο αριθμητικός διαμερισμός του Logan
Ο αριθμητικός διαμερισμός του Logan

Ο αριθμητικός διαμερισμός του Logan

Άσκηση εκμάθησης

Εισαγωγή

Αναγωγή

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

Στην Common Lisp η διαδικασία γίνεται με τη συνάρτηση reduce. Στην απλούστερη μορφή της μοιάζει με:

(reduce #'function-to-apply sequence :initial-value value)

Παρατήρησε ότι παρέχεται μια αρχική τιμή, αυτή θα είναι η "τρέχουσα συσσωρευμένη τιμή" που περνά στη συνάρτηση όταν επεξεργάζεται το πρώτο στοιχείο.

Ακολουθεί ένα παράδειγμα που προσθέτει τους αριθμούς της λίστας ξεκινώντας με αρχική τιμή 10:

(reduce #'+ '(1 2 3 4) :initial-value 10) ; => 20

Σημείωσε ότι αν η ακολουθία είναι κενή, η συνάρτηση δεν καλείται ποτέ και η μορφή αξιολογείται στο initial-value.

Οδηγίες

Στον Λόγκαν, τον εξωγήινο της Lisp, αρέσουν οι αριθμοί και του αρέσει επίσης να οργανώνει.

Σου ζητάει να τον βοηθήσεις να γράψει μια συνάρτηση που θα παίρνει μια λίστα με αριθμούς και θα παράγει ένα ζεύγος από δύο λίστες: η πρώτη περιέχει όλους τους περιττούς αριθμούς, η δεύτερη όλους τους άρτιους.

1. Κατηγοριοποίηση ενός αριθμού

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

(categorize-number '((1) . (2)) 23) ; => ((23 1) . (2))
(categorize-number '((1) . (2)) 42) ; => ((1) . (42 2))

2. Κατηγοριοποίηση πολλών αριθμών

Τώρα, χρησιμοποιώντας τη συνάρτηση που μόλις δημιούργησες, μπορείς να γράψεις μια άλλη συνάρτηση που παίρνει μια λίστα με αριθμούς και τους κατηγοριοποιεί όπως έκανες παραπάνω:

(partition-numbers '(1 2 3 4))     ; => ((3 1) . (4 2))
(partition-numbers '(42 31 24 13)) ; => ((13 31) . (24 42))
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Common Lisp Exercism

Έτοιμος να ξεκινήσεις την άσκηση Ο αριθμητικός διαμερισμός του Logan;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Common Lisp με 27 έννοιες92 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.