Οι λίστες είναι ενσωματωμένες στη γλώσσα Elixir. Θεωρούνται βασικός τύπος και συμβολίζονται με αγκύλες. Οι λίστες μπορεί να είναι κενές ή να περιέχουν οποιονδήποτε αριθμό στοιχείων οποιουδήποτε τύπου. Για παράδειγμα:
empty_list = []
one_item_list = [1]
two_item_list = [1, 2]
multiple_type_list = [1, :pi, 3.14, "four"]
Η Elixir υλοποιεί τις λίστες ως συνδεδεμένη λίστα, όπου κάθε κόμβος αποθηκεύει δύο τιμές: το πρώτο στοιχείο και μια άλλη λίστα με όλα τα υπόλοιπα στοιχεία. Το πρώτο στοιχείο της λίστας ονομάζεται κεφαλή και η λίστα με τα υπόλοιπα στοιχεία ονομάζεται ουρά. Μπορούμε να χρησιμοποιήσουμε αυτόν τον συμβολισμό στον κώδικα:
# [1] represented in [head | tail] notation
[1 | []]
# [1, 2, 3] represented in [head | tail] notation
[1 | [2 | [3 | []]]]
Μπορούμε να χρησιμοποιήσουμε τον συμβολισμό [head | tail] για να προσθέσουμε στοιχεία στην αρχή μιας λίστας:
# Suppose
list = [2, 1]
[3, 2, 1] == [3 | list]
# => true
Υπάρχουν αρκετές συναρτήσεις στο module Kernel για να δουλέψεις με λίστες, καθώς και ολόκληρο το module List.
# Check if 1 is a member of the list
1 in [1, 2, 3, 4]
# => true
Σε αυτή την άσκηση πρέπει να υλοποιήσεις μερικές συναρτήσεις για να χειρίζεσαι μια λίστα με γλώσσες προγραμματισμού.
Όρισε τη συνάρτηση new/0 που δεν παίρνει ορίσματα και επιστρέφει μια κενή λίστα.
LanguageList.new()
# => []
Όρισε τη συνάρτηση add/2 που παίρνει 2 ορίσματα (μια λίστα γλωσσών και μια συμβολοσειρά που αντιπροσωπεύει μια γλώσσα). Θα πρέπει να επιστρέφει τη λίστα που προκύπτει, με τη νέα γλώσσα να προστίθεται στην αρχή της δεδομένης λίστας.
language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Clojure")
# => ["Clojure"]
language_list = LanguageList.add(language_list, "Haskell")
# => ["Haskell", "Clojure"]
Όρισε τη συνάρτηση remove/1 που παίρνει 1 όρισμα (μια λίστα γλωσσών). Θα πρέπει να επιστρέφει τη λίστα χωρίς το πρώτο στοιχείο. Υπόθεσε ότι η λίστα θα έχει πάντα τουλάχιστον ένα στοιχείο.
language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Clojure")
# => ["Clojure"]
language_list = LanguageList.add(language_list, "Haskell")
# => ["Haskell", "Clojure"]
language_list = LanguageList.remove(language_list)
# => ["Clojure"]
Όρισε τη συνάρτηση first/1 που παίρνει 1 όρισμα (μια λίστα γλωσσών). Θα πρέπει να επιστρέφει την πρώτη γλώσσα στη λίστα. Υπόθεσε ότι η λίστα θα έχει πάντα τουλάχιστον ένα στοιχείο.
language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Elm")
# => ["Elm"]
language_list = LanguageList.add(language_list, "Prolog")
# => ["Prolog", "Elm"]
LanguageList.first(language_list)
# => "Prolog"
Όρισε τη συνάρτηση count/1 που παίρνει 1 όρισμα (μια λίστα γλωσσών). Θα πρέπει να επιστρέφει τον αριθμό των γλωσσών στη λίστα.
language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Elm")
# => ["Elm"]
language_list = LanguageList.add(language_list, "Prolog")
# => ["Prolog", "Elm"]
LanguageList.count(language_list)
# => 2
Όρισε τη συνάρτηση functional_list?/1 που παίρνει 1 όρισμα (μια λίστα γλωσσών). Θα πρέπει να επιστρέφει μια τιμή Boolean. Θα πρέπει να επιστρέφει την τιμή αληθής αν η "Elixir" είναι μία από τις γλώσσες στη λίστα.
language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Elixir")
# => ["Elixir"]
LanguageList.functional_list?(language_list)
# => true
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Elixir με 58 έννοιες168 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.