Python製関数型プログラミング言語Coconut

結構前に日課のHacker Newsチェックしてたら、Python製関数型プログラミング言語 Coconut というのが上位に来ていた。 simple, elegant, Pythonic functional programming language 、らしい。

特徴をまとめると、

  • Python言語のスーパーセット
    • PythonソースコードはCoconutのソースコードとして読み込める
    • そのせいで「純粋関数型プログラミング言語ではないよ」とのこと。
  • pipeline-style programming
    • F# の前方パイプライン演算子(|>)
  • もっといい感じ?のラムダ式
    • (x) -> x ** 2
    • Pythonの lambda x: x **2 よりはわかりやすい、かな?
  • 関数の部分適用
    • 関数の後ろに$をつける必要がある
  • パターンマッチ
    • 関数定義も @addpattern デコレータを使用すればパターンマッチできる
  • 分割代入
  • 中置記法
  • 代数的データ型
    • data キーワードで定義する
  • オペレータ関数
    • オペレータを () で囲うと関数として扱える
  • 関数合成
    • .. 演算子を使う
  • 遅延リスト
    • [] ではなく (||) でlistを作ると、遅延リストになる
  • 並列プログラミング
    • 今のところ、map の各要素に対する関数適用を並列に処理できるparallel_mapだけかな・・・?
  • 末尾再帰最適化
    • @recursive デコレータを使う

ちょっと触ってみた感じだと、実用性重視っぽい。 pip でインストールできるしコンパイル結果はPythonコードとして出力されるので、PyPIに公開できるライブラリをCoconutを使って書くことができる。 関数の部分適応に$ が必要なのは関数型プログラミング言語を普段使っている人からしたら眉唾かもしれないけれど、 動的型付けプログラミング言語であることとパースのしやすさを考えると、意味あるテイクかな、と。

Pythonを置き換えるというより、関数型プログラミングが得意な領域にピンポイントでCoconutを使う、というのが目指しているところなのだろう。

Pythonは大学教育でよく用いられる言語なので、そこからCoconutを通じて、関数型プログラミングが広く認知されるようになってくれたら嬉しい。

Tags:

Published: