結構前に日課のHacker
Newsチェックしてたら、Python製関数型プログラミング言語 Coconut というのが上位に来ていた。
simple, elegant, Pythonic functional programming language
、らしい。
特徴をまとめると、
- Python言語のスーパーセット
- PythonソースコードはCoconutのソースコードとして読み込める
- そのせいで「純粋関数型プログラミング言語ではないよ」とのこと。
pipeline-style programming
- F# の前方パイプライン演算子(
|>
)
- F# の前方パイプライン演算子(
- もっといい感じ?のラムダ式
(x) -> x ** 2
- Pythonの
lambda x: x **2
よりはわかりやすい、かな?
- 関数の部分適用
- 関数の後ろに
$
をつける必要がある
- 関数の後ろに
- パターンマッチ
- 関数定義も
@addpattern
デコレータを使用すればパターンマッチできる
- 関数定義も
- 分割代入
- 中置記法
- 代数的データ型
data
キーワードで定義する
- オペレータ関数
- オペレータを
()
で囲うと関数として扱える
- オペレータを
- 関数合成
..
演算子を使う
- 遅延リスト
[]
ではなく(|
と|)
でlistを作ると、遅延リストになる
- 並列プログラミング
- 今のところ、
map
の各要素に対する関数適用を並列に処理できるparallel_map
だけかな・・・?
- 今のところ、
- 末尾再帰最適化
@recursive
デコレータを使う
ちょっと触ってみた感じだと、実用性重視っぽい。 pip
でインストールできるしコンパイル結果はPythonコードとして出力されるので、PyPIに公開できるライブラリをCoconutを使って書くことができる。
関数の部分適応に$
が必要なのは関数型プログラミング言語を普段使っている人からしたら眉唾かもしれないけれど、
動的型付けプログラミング言語であることとパースのしやすさを考えると、意味あるテイクかな、と。
Pythonを置き換えるというより、関数型プログラミングが得意な領域にピンポイントでCoconutを使う、というのが目指しているところなのだろう。
Pythonは大学教育でよく用いられる言語なので、そこからCoconutを通じて、関数型プログラミングが広く認知されるようになってくれたら嬉しい。