Οι πλειάδες στην Elm μπορούν να περιέχουν δύο ή τρεις τιμές, και κάθε τιμή μπορεί να έχει οποιονδήποτε τύπο. Στην Elm, οι πλειάδες χρησιμοποιούνται κυρίως για απλούς προσωρινούς τύπους. Γι' αυτόν τον λόγο οι πλειάδες έχουν το πολύ 3 τιμές, και ως ένα επιπλέον κίνητρο οι εύχρηστες συναρτήσεις παρέχονται μόνο για 2 τιμές. Για πιο σύνθετα δεδομένα, είναι καλύτερα να περάσεις σε records.
type alias IntStringTuple = (Int, String)
aTuple : IntStringTuple
aTuple = (123, "elements can be of differing types")
anotherTuple : (String, String)
anotherTuple = Tuple.pair "this time it's" "two strings"
--> ("this time it's", "two strings")
Tuple.first aTuple
--> 123
Tuple.second aTuple
--> "elements can be of differing types"
Οι πλειάδες μπορούν να αποδομηθούν σε δεσμεύσεις χρησιμοποιώντας αντιστοίχιση προτύπων πλειάδας.
Η αποδόμηση μπορεί να γίνει σε εκφράσεις let (έστω), σε δηλώσεις συναρτήσεων και σε εντολές case.
repeatString : (Int, String) -> Bool
repeatString aTuple =
let
(aNumber, aString) = aTuple
in
String.repeat aNumber aString
repeatStringAgain : (Int, String) -> Bool
repeatStringAgain (aNumber, aString) = String.repeat aNumber aString
has123 : (Int, String, Bool) -> Bool
has123 aTuple =
case aTuple of
(123, _, _) ->
True
(_, "123", _) ->
True
(_, _, True) ->
True
_ ->
False
Ο Aazra και ο Rui σχεδιάζουν ένα κυνήγι θησαυρού με θέμα τους πειρατές. Υπάρχει μια λίστα με θησαυρούς και τις τοποθεσίες τους στον χάρτη, και μια άλλη λίστα με ονόματα τοποθεσιών και τις τοποθεσίες τους στον χάρτη.
| Θησαυρός | Τοποθεσία |
|---|---|
| Amethyst Octopus | (1, F) |
| Angry Monkey Figurine | (5, B) |
| Antique Glass Fishnet Float | (3, D) |
| Brass Spyglass | (4, B) |
| Carved Wooden Elephant | (8, C) |
| Crystal Crab | (6, A) |
| Glass Starfish | (6, D) |
| Model Ship in Large Bottle | (8, A) |
| Pirate Flag | (7, F) |
| Robot Parrot | (1, C) |
| Scrimshaw Whale's Tooth | (1, F) |
| Silver Seahorse | (4, E) |
| Vintage Pirate Hat | (7, E) |
| Όνομα τοποθεσίας | Τοποθεσία | Τεταρτημόριο |
|---|---|---|
| Seaside Cottages | (C, 1) | Blue |
| Aqua Lagoon (Island of Mystery) | (F, 1) | Yellow |
| Deserted Docks | (A, 2) | Blue |
| Spiky Rocks | (D, 3) | Yellow |
| Abandoned Lighthouse | (B, 4) | Blue |
| Hidden Spring (Island of Mystery) | (E, 4) | Yellow |
| Stormy Breakwater | (B, 5) | Purple |
| Old Schooner | (A, 6) | Purple |
| Tangled Seaweed Patch | (D, 6) | Orange |
| Quiet Inlet (Island of Mystery) | (E, 7) | Orange |
| Windswept Hilltop (Island of Mystery) | (F, 7) | Orange |
| Harbor Managers Office | (A, 8) | Purple |
| Foggy Seacave | (C, 8) | Purple |
Οι παίκτες θα περιπλανηθούν στον χάρτη μαζεύοντας θησαυρούς στην πορεία. Οι τοποθεσίες των θησαυρών και των μέρων έχουν διαφορετική μορφή, για να προσθέσουν μια επιπλέον πρόκληση. Υπάρχουν επίσης κάποια ειδικά μέρη, όπου ορισμένοι θησαυροί μπορούν να ανταλλαχθούν με κάποιους άλλους, για να προσθέσουν μια επιπλέον ανατροπή στο παιχνίδι. Η δουλειά σου είναι να γράψεις συναρτήσεις που θα τους βοηθήσουν με το παιχνίδι τους.
Υλοποίησε τη συνάρτηση placeLocationToTreasureLocation που παίρνει μια τοποθεσία μέρους (όπως ('C', 1)) και τη μετατρέπει σε τοποθεσία θησαυρού (όπως (1, 'C')).
placeLocationToTreasureLocation ('C', 1)
--> (1,'C')
Υλοποίησε τη συνάρτηση treasureLocationMatchesPlaceLocation που παίρνει μια PlaceLocation (όπως ('C', 1)) και επιστρέφει την τιμή αληθής αν ταιριάζει με μια TreasureLocation (όπως (1, 'C')).
treasureLocationMatchesPlaceLocation ('C', 1) (1, 'C')
--> true
treasureLocationMatchesPlaceLocation ('C', 1) (2, 'C')
--> false
Υλοποίησε τη συνάρτηση countPlaceTreasures, που παίρνει ένα μέρος (όπως ("Aqua Lagoon (Island of Mystery)", ('F', 1))) και τη λίστα με τους θησαυρούς, και επιστρέφει τον αριθμό των θησαυρών που μπορούν να βρεθούν εκεί.
place = ("Aqua Lagoon (Island of Mystery)", ('F', 1))
countPlaceTreasures place treasures =
--> 2
Υλοποίησε τη συνάρτηση specialCaseSwapPossible, που παίρνει έναν θησαυρό (όπως ("Amethyst Octopus", (1, 'F'))) και ένα μέρος (όπως ("Seaside Cottages ", ('C', 1))), και επιστρέφει την τιμή αληθής για τους παρακάτω συνδυασμούς:
Προσπάθησε να υλοποιήσεις αυτή τη συνάρτηση ως εντολή case με μια ad hoc πλειάδα, αντί να χρησιμοποιήσεις εντολές if (αυτό είναι ένα κοινό ιδίωμα στην Elm).
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Elm με 28 έννοιες110 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.