Διαδρομές
/
F#
F#
/
Ασκήσεις
/
Tracks on Tracks on Tracks
Tracks on Tracks on Tracks

Tracks on Tracks on Tracks

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

Εισαγωγή

Λίστες

Μια list στη F# είναι μια αμετάβλητη συλλογή από μηδέν ή περισσότερες τιμές. Οι τιμές σε μια λίστα πρέπει όλες να έχουν τον ίδιο τύπο. Καθώς οι λίστες είναι αμετάβλητες, μόλις κατασκευαστεί μια λίστα, η τιμή της δεν μπορεί ποτέ να αλλάξει. Οποιεσδήποτε συναρτήσεις/τελεστές φαίνεται να τροποποιούν μια λίστα (όπως η προσθήκη ενός στοιχείου), στην πραγματικότητα επιστρέφουν μια νέα λίστα.

Οι λίστες μπορούν να οριστούν ως εξής:

let empty = []
let singleValue = [5]
let threeValues = ["a"; "b"; "c"]

Ο πιο συνηθισμένος τρόπος για να προσθέσεις ένα στοιχείο σε μια λίστα είναι μέσω του τελεστή :: (cons):

let twoToFour = [2; 3; 4]
let oneToFour = 1 :: twoToFour
// => [1; 2; 3; 4]

Μια λίστα F# έχει μια κεφαλή (το πρώτο στοιχείο) και μια ουρά (ό,τι ακολουθεί μετά το πρώτο στοιχείο). Η ουρά μιας λίστας είναι η ίδια μια λίστα.

Οι λίστες είτε χειρίζονται με συναρτήσεις και τελεστές που ορίζονται στο module List, είτε χειροκίνητα με αντιστοίχιση προτύπων χρησιμοποιώντας τα μοτίβα λίστας και cons:

let describe list =
    match list with
    | [] -> "Empty list"
    | head::tail -> sprintf "Non-empty list with head: %d" head

describe []        // => "Empty list"
describe [1]       // => "Non-empty with head: 1"
describe [5; 7; 9] // => "Non-empty with head: 5"

Μπορείς επίσης να αγνοήσεις μια τιμή κατά την αντιστοίχιση προτύπων. Όταν δεν σε νοιάζει μια τιμή σε μια συγκεκριμένη περίπτωση (δηλαδή δεν πρόκειται να χρησιμοποιήσεις μια τιμή), μπορείς να χρησιμοποιήσεις μια κάτω παύλα ('_') για να το δηλώσεις αυτό:

let describe list =
    match list with
    | [] -> "Empty list"
    | [x] -> "List with one item"
    | [_; y] -> "List with two items (first item ignored)"
    | _ -> "List with many items (all items ignored)"

describe []        // => "Empty list"
describe [1]       // => "List with one item"
describe [5; 7]     // => "List with two items (first item ignored)"
describe [5; 7; 9] // => "List with many items (all items ignored)"

Το μονό '_' πρέπει πάντα να έρχεται τελευταίο στην αντιστοίχιση προτύπων. Κάθε τιμή που δεν ταιριάζει με καμία από τις άλλες περιπτώσεις θα χειρίζεται από αυτή την περίπτωση.

Οδηγίες

Σε αυτή την άσκηση θα γράφεις κώδικα για να παρακολουθείς μια λίστα με γλώσσες προγραμματισμού που θέλεις να μάθεις στο Exercism.

Έχεις έξι εργασίες, οι οποίες όλες θα περιλαμβάνουν χειρισμό λιστών.

1. Δημιούργησε μια νέα λίστα

Για να παρακολουθείς τις γλώσσες που θέλεις να μάθεις, θα χρειαστεί να δημιουργήσεις μια νέα λίστα. Όρισε τη δέσμευση newList που περιέχει μια νέα, κενή λίστα.

newList
// => []

2. Όρισε μια υπάρχουσα λίστα

Αυτή τη στιγμή, έχεις ένα χαρτί που απαριθμεί τις γλώσσες που θέλεις να μάθεις: F#, Clojure και Haskell. Όρισε τη δέσμευση existingList για να αναπαραστήσεις αυτή τη λίστα.

existingList
// => ["F#"; "Clojure"; "Haskell"]

3. Πρόσθεσε μια νέα γλώσσα σε μια λίστα

Καθώς εξερευνάς το Exercism και βρίσκεις πιο ενδιαφέρουσες γλώσσες, θέλεις να τις προσθέσεις στη λίστα σου. Υλοποίησε τη συνάρτηση addLanguage για να προσθέτεις μια νέα γλώσσα στην αρχή της λίστας σου.

addLanguage "TypeScript" ["JavaScript"; "CoffeeScript"]
// => ["TypeScript"; "JavaScript"; "CoffeeScript"]

4. Μέτρησε τις γλώσσες στη λίστα

Η καταμέτρηση των γλωσσών μία προς μία είναι άβολη. Υλοποίησε τη συνάρτηση countLanguages για να μετράς τον αριθμό των γλωσσών στη λίστα σου.

countLanguages ["C#"; "Racket"; "Rust"; "Ruby"]
// => 4

5. Αντιστρέψε τη λίστα

Κάποια στιγμή, συνειδητοποιείς ότι η λίστα σου είναι στην πραγματικότητα σε αντίστροφη σειρά! Υλοποίησε τη συνάρτηση reverseList για να αντιστρέψεις τη λίστα σου.

reverseList ["Prolog"; "C"; "Idris"; "Assembly"]
// => ["Assembly"; "Idris"; "C"; "Prolog"]

6. Έλεγξε αν η λίστα είναι συναρπαστική

Ενώ αγαπάς όλες τις γλώσσες, η F# έχει μια ξεχωριστή θέση στην καρδιά σου. Γι' αυτό, ενθουσιάζεσαι πραγματικά με μια λίστα γλωσσών αν:

  • Το πρώτο στη λίστα είναι F#.
  • Το δεύτερο στοιχείο στη λίστα είναι F# και η λίστα περιέχει είτε δύο είτε τρεις γλώσσες.

Υλοποίησε τη συνάρτηση excitingList για να ελέγχεις αν μια λίστα γλωσσών είναι συναρπαστική:

excitingList ["Nim"; "F#"]
// => true
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
F# Exercism

Έτοιμος να ξεκινήσεις την άσκηση Tracks on Tracks on Tracks;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις F# με 18 έννοιες148 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.