Lisp

Mochiの開発経緯

たしか1年半1年くらい前に、何がきっかけかは忘れましたが、ふと、所謂オレオレ言語を作りたいと思いました。 非常に簡単な Scheme 処理系を作ったことがあったので、 Lisp 方言を作ろうと考えました。 Lisp 方言を作る過程で、新しいプログラミング言語を習…

「プログラムでシダを描画する」を Purple で描画する

「プログラムでシダを描画する」をPythonで描画する の写経です。 上記ページに記載の再帰呼び出し版を、そのまま Purple で書いてみました。 コード (import random) (from-import PIL Image) (val N 20) (val xm 0) (val ym 0.5) (val h 0.6) (val width 5…

Purple で FizzBuzz

Purple で FizzBuzz を書くとこんな感じです。 (def fizzbuzz (n) (match [(% n 3) (% n 5)] (0 0) "fizzbuzz" (0 _) "fizz" (_ 0) "buzz" _ n)) (->> (range 1 31) (map fizzbuzz) tuple print) ->> は Clojure のスレッディングマクロ(のひとつ)と同じで…

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 (…

Python で実装された Lisp 処理系

Purple をある程度実装したところで、同じようなものはきっと沢山あるよねと思い、 Python で実装された Lisp 処理系をぐぐってみたところやはり沢山ありました。 以下、そのリストです。 Python のバイトコードやASTに変換するタイプのもの(初リリース時期…

Python と Purple で条件に当てはまる最初の要素をリストから取得

Python: find first element in a sequence that matches a predicate に Python でリスト(イテラブル)から条件に当てはまる最初の要素を取得する方法が、幾つか記載されています。 その中のベストアンサー的な方法のコード例が下記サイトに掲載されていま…

Python で Lisp 方言

Python で Purple という Lisp 方言を作りました。 Python の仮想マシン上で関数型プログラミングっぽいことをするための言語です。 Purple 実はつい先ほどまでSpicaという名前でしたが、 同名のLispマシン/処理系があったので、急遽名前を変更しました。 動…