Hy (または Hylang) は Python で動作する Lisp 方言のひとつです。2013 年の PyCon (Python Conference) で Paul Tagliamonte 氏が発表したオープンソース・ソフトウェア (MIT ライセンス) です。2024 年 9 月にバージョン 1.0.0 がリリースされました。
プログラムを S 式 (リスト) で記述するところは Lisp (Clojure とよく似ている) なのですが、データ構造は Python のものを使うことを前提としているようで、Lisp の cons, car, cdr に相当する関数がないところがユニークです。そのかわり、Python の機能 (ライブラリ) は簡単に利用することができますし、逆に Python から Hy のプログラムを呼び出すこともできるようです。もちろん、Common Lisp や Clojure のような「マクロ」も用意されています。
Hy は pip で簡単にインストールすることができます。
python3 -m pip install hy
Hy を実行するときはシェルで hy と入力してください。
$ hy Hy 1.0.0 (Afternoon Review) using CPython(main) 3.10.12 on Linux => (print "hello, Hylang!") hello, Hylang!
メッセージとプロンプト '=>' が表示され、対話モード (REPL, Read-Eval-Print-Loop) で Hy が起動されます。終了するときは (quit) または CTRL-D を入力してください。
Hy の関数呼び出しは Lisp (Clojure) と同じです。
(関数 引数 ...)
カッコの先頭が関数で、残りの要素が引数になります。引数は左から順番に評価され、その結果が関数に渡されます。Python の関数も同じ形式で呼び出すことができます。print は引数を画面に表示する Python の関数です。
ソースファイルを実行するときもコマンド hy を使います。
$ hy source_file.hy
Hy の場合、ソースファイルの拡張子は .hy になります。
リスト : hello.hy (print "hello, Hylang!")
$ hy hello.py hello, Hylang! $
Hy はプログラムを Python のバイトコードにコンパイルし、それを Python の仮想マシンで実行します。Hy のプログラムをバイトコードにコンパイルするコマンド hyc や、Hy のプログラムを Python のプログラムに変換するコマンド hy2py も用意されています。
$ hyc hello.hy Compiling 'hello.hy' --> '__pycache__/hello.cpython-310.pyc' $ python3 __pycache__/hello.cpython-310.pyc hello, world $ hy2py hello.hy import hy print('hello, world\n')
Hy ver 1.0.0 がリリースされたことで、今後は言語仕様も安定するものと思われます。本ページは Hy ver 1.0.0 を使って簡単なプログラムを作りながら、Hy の基本を勉強していこうと思っています。本ページは M.Hiroi の覚え書にすぎませんが、興味のある方はお付き合いくださいませ。
本ページ (Hylang Programming) の著作権は筆者「広井誠 (Makoto Hiroi)」が保持します。無断使用や無断転載は禁止いたします。本ページで作成したプログラムはフリーソフトウェアとします。ご自由にお使いください。プログラムの改造や配布もご自由にどうぞ。その際は、出典を明記してくださるようお願いいたします。
なお、これらのドキュメントやプログラムは無保証であり、使用したことにより生じた損害について、作者「広井誠 (Makoto Hiroi)」は一切の責任を負いません。また、これらのプログラムを販売することで利益を得るといった商行為は禁止いたします。