Purple でフィボナッチ数

Rubyistが始めるElixir - フィボナッチ編 に掲載されているコードを Purple で書くと以下のようになります。

(defm fib
  (0) 0
  (1) 1
  ((and (int n) |> _ 0|)) (+ (fib (- n 1))
                             (fib (- n 2))))


上記は下記と同じ意味です。

(def fib (n)
  (match n
    0 0
    1 1
    (and (int n) |> _ 0|) (+ (fib (- n 1))
                             (fib (- n 2)))))


def は Python と同じく関数定義を意味し、match はパターンマッチを行う式です。
match式の中の and は and パターン、int は 整数にマッチする int パターンです。
|...| は (fn ...) で表される fn パターンのショートハンドです。
fn パターンは、それが表す無名関数をmatch対象に適用した結果が真であるならばマッチが成立するパターンです。

Purple の古いバージョンでは無名関数を表す fn 式のショートハンドは、Arc に倣い [...] でしたが、今は |...| となっています。[...] はタプルを表します(ex. [1 2 3]、[x y 3])。