Picat

Picatは、論理プログラミングをベースとするマルチパラダイムの汎用プログラミング言語である。制約論理プログラミング言語であるを発展させることによって開発された。
概要.
Picatは、周能法(Neng-Fa Zhou)およびJonathan Fruhmanによって設計された。2012年12月に仕様が公開され、2013年5月に処理系がリリースされた。
Picatという名称は、次の単語の頭文字に由来する。
Picatのプログラムは、述語または関数の定義から構成される。述語または関数は、1個以上のルールによって定義される。
ルールにはバックトラックが可能なものとそうでないものとがあり、バックトラックが可能なルールを書くことによって、非決定的な述語を定義することができる。非決定的な関数は、定義することができない。
Picatは制約プログラミングをサポートしている。「ソルバーモジュール」と呼ばれる、codice_1(Constraint Programming)、codice_2(Satisfiability)、codice_3(Mixed Integer Programming)という三つのモジュールのいずれかをインポートすることによって、制約充足問題を記述することができるようになる。
コード例.
Hello worldは、次のように書くことができる。
main => println('Hello, World!').
次の例は、引数が、空リストまたはすべての要素が0であるリストならば成功する、codice_4という述語を定義するプログラムである。
次の例は、最大公約数を求めるcodice_5という関数を定義するプログラムである。
次の例は、ソルバーモジュールとしてcodice_1を使用して、部分和問題の解をすべて出力するプログラムである。
このプログラムは、{2, 3, 5, 8, 13, 21, 34}という集合の部分集合のうちで、要素の和が50になるものを求めるという部分和問題の解をすべて出力する（解は3個存在する）。このプログラムが出力する解の一つであるcodice_7というリストは、{3, 13, 34}という部分集合を意味している。