Cláusulas de función en Elixir
Una cuenta regresiva escrita en cláusulas: patrones y una guarda eligen la línea; la recursión lleva el bucle.
defmodule Countdown do
# One function, several clauses; the first head that matches wins.
def call(0), do: "liftoff!"
def call(3), do: "ignition sequence start"
def call(n) when rem(n, 2) == 0, do: "#{n}, holding steady"
def call(n), do: "#{n}"
# Recursion instead of a loop: each call peels one number off.
def run(0), do: IO.puts(call(0))
def run(n) do
IO.puts(call(n))
run(n - 1)
end
end
Countdown.run(5)
Cómo funciona
- Cuatro cláusulas de
callse prueban de arriba abajo:0y3por valor, los pares por la guardarem. run(0)es el caso base que imprime el despegue y se detiene.run(n)imprime su línea y llama arun(n - 1)— recursión en el lugar de un bucle.
Palabras clave y builtins usados aquí
defdefmoduledoend
El intento, en números
- Líneas
- 17
- Caracteres a escribir
- 410
- Tokens
- 109
- Ritmo de tres estrellas
- 75 tpm
Al ritmo de tres estrellas de 75 tokens por minuto, este intento toma unos 87 segundos.
Paso 2 de 3 en Coincidencia de patrones; paso 5 de 27 en Fundamentos del lenguaje.