2010-04-01から1ヶ月間の記事一覧

各コンビネータに対応する関数

type Combinator Prelude Monad Applicative a -> a I x = x id ask a -> b -> a K x y = x const return pure (a -> b) -> (c -> a) -> c -> b B x y z = x (y z) (.) liftM (a -> b -> c) -> b -> a -> c C x y z = x z y flip (a -> a) -> a Y x = x (Y x…

同じパターン変数による同値判定

各言語で試した結果は以下のとおり Erlangの場合 できる > case [1,1,1] of [X,X,X] -> "same"; _ -> "different" end. "same" > case [1,1,2] of [X,X,X] -> "same"; _ -> "different" end. "different" Pureの場合 できる > case [1,1,1] of [x,x,x] = "sa…

再帰定義でないYコンビネータ

Haskellで出来なかったことをPureでリベンジその2 再帰を使わずにYコンビネータを定義する 404 Blog Not Found:Y combinator is forbidden in Haskell!? ところがぎっちょんぎっちょんちょん。これが出来ないのです。 ch_y = \ f -> (\ x -> f (x x)) (\ x -…

チャーチ数の引き算

Haskell風の文法だけど動的型なPureという言語を発見。 The Pure Programming Language Pure has a modern syntax featuring curried function applications, lexical closures and equational definitions with pattern matching, and thus is somewhat sim…

Prologとリスト内包表記の対応関係

昨日の麻雀の待ちの問題、Prologのコードがほぼ1対1でリスト内包表記に書き換えられるような気がしたのでやってみた。 例えば、Prologでの順子の処理部(1行目)は、Haskellでは2行目のように記述できるはず。 (Prolog) tenpai(Xs, [[X,Y,Z]|Ys]) :- selec…

あなたのスキルで飯は食えるか2

麻雀の手牌が入力として与えられたとき、「待ち」を出力するプログラムを書いてください。 1122335556799 : “99”をアタマの両面か“55”“99”のシャボであるので、(123)(123)(555)(99)[67]、(123)(123)(55)(567)[99]、(123)(123)(99)(567)[55]が正解です。 http…

あなたのスキルで飯は食えるか?

http://d.hatena.ne.jp/katona/20100422/p1 こっちに修正版を書きました 麻雀の手牌が入力として与えられたとき、「待ち」を出力するプログラムを書いてください。 1122335556799 : “99”をアタマの両面か“55”“99”のシャボであるので、(123)(123)(555)(99)[67…

演繹定理とコンビネータ

演繹定理(英: Deduction theorem)とは、数理論理学において、論理式 E から 論理式 F が演繹可能ならば、含意 E → F が証明可能である(すなわち、空集合から演繹可能)、というもの。 公理的命題論理では、公理図式として次のものを使うのが一般的である…