Las tuplas en Elm pueden contener dos o tres valores, y cada valor puede tener cualquier tipo. En Elm, las tuplas se usan principalmente para tipos transitorios simples. Por esta razón, las tuplas tienen un máximo de 3 valores y, como incentivo adicional, solo se proporcionan funciones de conveniencia para 2 valores. Para datos más complejos, es mejor pasar a los registros.
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"
Las tuplas se pueden desestructurar en enlaces usando la coincidencia de patrones de tuplas. La desestructuración se puede hacer en expresiones let, declaraciones de funciones y sentencias 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 y Rui están diseñando una búsqueda del tesoro con temática pirata. Una es una lista de tesoros con sus ubicaciones en el mapa; la otra, una lista de nombres de lugares con sus ubicaciones en el mapa.
| Tesoro | Ubicación |
|---|---|
| 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) |
| Nombre del lugar | Ubicación | Cuadrante |
|---|---|---|
| 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 |
Los jugadores recorrerán el mapa y recogerán tesoros a medida que avanzan. Las ubicaciones de los tesoros y de los lugares tienen formatos distintos, para añadir un desafío adicional. También hay algunos lugares especiales, donde ciertos tesoros se pueden intercambiar por otros, para darle un giro adicional al juego. Tu tarea es escribir funciones que les ayuden con su juego.
Implementa la función placeLocationToTreasureLocation, que recibe una ubicación de lugar (como ('C', 1)) y la convierte en una ubicación de tesoro (como (1, 'C')).
placeLocationToTreasureLocation ('C', 1)
--> (1,'C')
Implementa la función treasureLocationMatchesPlaceLocation, que recibe una PlaceLocation (como ('C', 1)) y devuelve true si coincide con una TreasureLocation (como (1, 'C')).
treasureLocationMatchesPlaceLocation ('C', 1) (1, 'C')
--> true
treasureLocationMatchesPlaceLocation ('C', 1) (2, 'C')
--> false
Implementa la función countPlaceTreasures, que recibe un lugar (como ("Aqua Lagoon (Island of Mystery)", ('F', 1))) y la lista de tesoros, y devuelve la cantidad de tesoros que se pueden encontrar allí.
place = ("Aqua Lagoon (Island of Mystery)", ('F', 1))
countPlaceTreasures place treasures =
--> 2
Implementa la función specialCaseSwapPossible, que recibe un tesoro (como ("Amethyst Octopus", (1, 'F'))) y un lugar (como ("Seaside Cottages ", ('C', 1))), y devuelve true para las siguientes combinaciones:
Intenta implementar esta función como una sentencia case con una tupla ad hoc, en lugar de usar condicionales if (este es un modismo común en Elm).
Regístrate en Exercism para aprender y dominar Elm con 28 conceptos110 ejercicios y mentoría humana real, todo gratis.