Mercury 勉強メモ

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

2013-01-01から1年間の記事一覧

Mercury簡易SDLバインディング (Version 2)

Mercury簡易SDLバインディング の改良版です.

P-99: 1.18 Extract a slice from a list

P-99: Ninety-Nine Prolog Problemsの問題にMercuryで解答していきます. ["c", "d", "e", "f", "g"]

ウインドウ内をボールが跳ねまわるプログラム

Mercury でウインドウ内をボールが跳ねまわるプログラムを作ってみました.

テトロミノ (暫定版)

Mercury でテトロミノを解くプログラムを作ってみました. いろいろと改善したいので暫定版です. $ ./tetromino +---+---+---+---+---+---+---+---+ | | | | | + + + + + +---+ +---+ | | | | | | +---+---+---+---+---+ +---+ + | | | | | +---+---+---+--…

P-99: 1.17 Split a list into two parts; the length of the first part is given.

P-99: Ninety-Nine Prolog Problemsの問題にMercuryで解答していきます. ["a", "b", "c"] ["d", "e", "f", "g", "h", "i", "k"]

シェルピンスキーのギャスケット

簡易SDLバインディング を使って,シェルピンスキーのギャスケットを描くプログラムをMercuryで作りました.

Mercury簡易SDLバインディング

Mercuryで簡単にGUIプログラムを作りたかったので, Mercuryの簡易SDLバインディングを作りました. 自分の使いたい機能しか実装していないので, 使う場合は必要に応じて改造してください. ライセンスはパブリックドメインとします. 使い方 ソースファイ…

P-99: 1.16 Drop every N'th element from a list

P-99: Ninety-Nine Prolog Problemsの問題にMercuryで解答していきます. ["a", "b", "d", "e", "g", "h", "k"]

P-99: 1.15 Duplicate the elements of a list a given number of times

P-99: Ninety-Nine Prolog Problemsの問題にMercuryで解答していきます. ["a", "a", "a", "b", "b", "b", "c", "c", "c"]

P-99: 1.14 Duplicate the elements of a list

P-99: Ninety-Nine Prolog Problemsの問題にMercuryで解答していきます. ["a", "a", "b", "b", "c", "c", "c", "c", "d", "d"]

P-99: 1.13 Run-length encoding of a list (direct solution)

P-99: Ninety-Nine Prolog Problemsの問題にMercuryで解答していきます. Mercury では表現できないので省略.

P-99: 1.12 Decode a run-length encoded list

P-99: Ninety-Nine Prolog Problemsの問題にMercuryで解答していきます. Mercury 向けに問題を少し変更しています. ["a", "a", "a", "a", "b", "c", "c", "d", "e", "e", "e", "e"]

P-99: 1.11 Modified run-length encoding

P-99: Ninety-Nine Prolog Problemsの問題にMercuryで解答していきます. Mercury では表現できないので省略.

P-99: 1.10 Run-length encoding of a list

P-99: Ninety-Nine Prolog Problemsの問題にMercuryで解答していきます. [{4, "a"}, {1, "b"}, {2, "c"}, {1, "d"}, {4, "e"}]

ラムダ計算インタプリタ

Mercury でラムダ計算+整数のパーサと評価器を作りました. syntax.m parser.m eval.m lambda.m コンパイル $ mmc --make lambda Making Mercury/int3s/lambda.int3 Making Mercury/int3s/eval.int3 Making Mercury/int3s/syntax.int3 Making Mercury/int3s…

Mercury サンプル: 加減乗除のインタプリタ

加減乗除のある数式のパーサとインタプリタ. 抽象構文木を中間言語として作る. Syntax Tree: eadd(eadd(eint(1), emul(eint(2), eint(3))), eint(4)) Result: 11

よく使う述語: 数値演算編

Mercury の標準ライブラリから,数値演算に関するよく使いそうな述語をピックアップしました. float モジュール (浮動小数点数) 基本演算 :- func + (float::in) = (float::uo) is det. :- func - (float::in) = (float::uo) is det. 前置演算子 :- func (f…

よく使う述語: エラー・真偽値・文字・整数編

Mercury の標準ライブラリから, よく使いそうな述語をピックアップしました. require モジュール error :- pred error(string::in) is erroneous. エラーメッセージを表示してプログラムを停止する. bool モジュール bool 型 :- type bool ---> no ; yes.…

よく使う述語: リスト編

Mercury の標準ライブラリから, リスとに関連するよく使いそうな述語をピックアップしました. 基本操作 list.length :- func list.length(list(T)) = int. :- pred list.length(list(_T), int). :- mode list.length(in, out) is det. リストの長さ. list…

よく使う述語: 文字列編

Mercury の標準ライブラリから, 文字列に関連するよく使いそうな述語をピックアップしました. 基本操作 string.length :- func string.length(string::in) = (int::uo) is det. :- pred string.length(string::in, int::uo) is det. 文字列の長さを返す. …

Mercury サンプル: Hello, World. コンパイラ

プログラムでC言語のソースコードを出力して,コンパイル・実行するプログラムです. hello, world.

Mercury サンプル: 簡易headコマンド

UNIXのheadコマンドの簡易版です. ファイルの最初の10行を表示します. $ ./head head.m % head.m :- module head. :- interface. :- import_module io. :- pred main(io::di, io::uo) is det. :- implementation. :- import_module int, list, string.

Mercury サンプル: 入力を大文字に変換する

ユーザの入力を受け取って,受け取った文字列の英字を大文字にする. > hello HELLO > mercury MERCURY > あいうabcえお あいうABCえお > (Ctrl-D)

Mercury サンプル: 階乗の表

画面に階乗の表を表示するプログラム. 実行結果 fact(1) = 1 fact(2) = 2 fact(3) = 6 fact(4) = 24 fact(5) = 120 fact(6) = 720 fact(7) = 5040 fact(8) = 40320 fact(9) = 362880

Mercury サンプル: Hello, World.

画面に Hello, World. と表示するプログラム. 実行結果 $ mmc hello.m $ ./hello hello, world.

よく使う述語: 入出力編

Mercury の標準ライブラリから, 入出力に関連するよく使いそうな述語をピックアップしました. よく使う述語 io.print :- pred io.print(T::in, io::di, io::uo) is det. :- pred io.print(io.output_stream::in, T::in, io::di, io::uo) is det. 任意の値…

P-99: 1.09 Eliminate consecutive duplicates of list elements

P-99: Ninety-Nine Prolog Problemsの問題にMercuryで解答していきます. ["a", "a", "a", "a", "b", "c", "c", "d", "e", "e", "e", "e"] [["a", "a", "a", "a"], ["b"], ["c", "c"], ["d"], ["e", "e", "e"]]

ポーカーの役判定

きゐるさんのニコ生で煽られて書いた Mercury によるポーカーの役判定プログラムです. こんなもんじゃないですかね.十分デバックしてないんですが.

P-99: 1.08 Eliminate consecutive duplicates of list elements

P-99: Ninety-Nine Prolog Problemsの問題にMercuryで解答していきます. ["a", "a", "a", "a", "b", "c", "c", "d", "e", "e", "e", "e"] ["a", "b", "c", "d", "e"]

P-99: 1.07 Flatten a nested list structure

P-99: Ninety-Nine Prolog Problemsの問題にMercuryで解答していきます. 今回はMercury向けに問題を少し変更しています. ["a", "b", "c", "d", "e"]