typestar

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

  1. Cuatro cláusulas de call se prueban de arriba abajo: 0 y 3 por valor, los pares por la guarda rem.
  2. run(0) es el caso base que imprime el despegue y se detiene.
  3. run(n) imprime su línea y llama a run(n - 1) — recursión en el lugar de un bucle.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 2 de 3 en Coincidencia de patrones; paso 5 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →