Mercury 勉強メモ

関数論理型言語 Mercury を勉強するブログです.

Mercury 入門

Mercury 入門 (8) DCG (確定節文法)

DCG DCG(確定節文法)は状態を受け渡す述語を簡単に書くための構文です. Haskell の do記法のようなもので,主な用途に構文解析の記述があります. まずは,これまでの知識を使って,"12,34"のようにコンマで区切られた 文字列を構文解析するプログラムを示…

Mercury 入門 (7) 高階関数,高階述語

高階述語 入門 (6) で出てきたは,引数で述語を受け取る述語でした. このように述語を引数で受け取る述語のことを高階述語とよびます. solutions/2の宣言は以下のようになっています. :- pred solutions(pred(T), list(T)). :- mode solutions(pred(out) …

Mercury 入門 (6) 準決定的な述語と非決定的な述語

準決定的 (semidet) これまで定義した述語は,決定性にdetを指定しており, 必ず1つだけ結果を返し,失敗することのない述語でした. ここでは,成功すれば1つ値を返すが,失敗する可能性もあるということを表す semidetを決定性に持った述語を使ってみます…

Mercury 入門 (5) 独自の関数の定義

独自の関数の定義 これまでは述語を定義してきましたが,述語では自然に式と組み合わせることができず,不便な場合があります. Mercury では,以下のようにユーザが関数を定義することができます. :- func double(int) = int. func(N) = N * 2. 特に指定を…

Mercury 入門 (4) タプル,代数的データ型

タプル 複数の値をまとめてひとつの値として扱いたい場合は,タプル(組)が利用できます. 例えば,string型の"x"と,int型の12のタプルは, {"x", 12} のように表し,その型は, {string, int} のように書き表します. タプルの例は後の入門記事で出てきます…

Mercury 入門 (3) リスト

同じ型の複数の値を順番に並べたものをリストとよびます. Mercury では例えば整数1, 2, 3の3つの値からなるリストは, [1, 2, 3] のように表し,その型は, list(int) のように表します.リストに要素を追加するには, [1 | [2, 3] ] のように書きます.上…

Mercury 入門 (2) 式の計算と独自の述語の定義

今回は Mercury で数式計算をする方法を学びます. 以下は,12 + 13を計算して画面に25と表示するMercuryのプログラムです. 実行結果 $ mmc arith.m $ ./arith 12 + 13 = 25 数値演算を行うためには,最初にintモジュールが必要なので, 実装部の最初でイン…

Mercury 入門 (1) Hello, World!

Mercuryは, 関数論理型言語(functional logic programming language)の一種で, 論理型言語のPrologに関数型言語の機能を追加して拡張したプログラム言語です. 関数型言語と論理型言語の機能を両方同時に扱えるなんて,なんてお得なんだ!!と 思って興味…