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

タイピング測定

タイピング速度を測定するプログラムをつくってみた。 http://jsdo.it/katona/typing上段のtextareaの課題文を下段のtextareaに入力する。 1文字目の打ち始めから計測を開始するやや有利(?)な仕様。 <html> <head> <title>Typing</title> <script> function key(f){ while(f.src.value.indexO</head></html>…

高階関数クイズ

# let twice f x = f (f x)これは f という関数と値 x をもらって、f を二回 x に適用する関数です。 さて、では、 # twice twice twice twice add1 0 は何が帰って来ると思いますか? http://d.hatena.ne.jp/camlspotter/20100710/1278752186 ・twiceはチャ…

コンビネータ版チャーチ数の加減乗除

たった1つの関数から出発して昨日やったチャーチ数の加減乗除 - MEMO:はてな支店を再現する。 最初に生成している各種コンビネータはコメントをつけているが、m=のところからは基本的に昨日と同じなので省略。 最初の関数x(Fokker版の一点基底コンビネータ)…

チャーチ数の加減乗除

型推論を無効にする方法を発見。 型推論をごまかす Y コンビネータ L の定義は、本当は L x y = x (y y) です。(y y)の部分が自己言及になって、GHC ではこの部分の型をうまく処理できません。そこで、unsafeCoerce で型推論をごまかしています。 http://d.h…

PostScript版色相環

sethsbcolorというそのものずばりのオペレータがあったので確認用にPostScript版も書いてみた。 やっぱり黄色や紫のところにはうっすらと線が見える気がする。 %!PS-Adobe-3.0 1 1 256 { /r exch def 0 1 360 { /th exch def th 360 div r 256 div 1 sethsbc…

canvasで色相環

canvasを使って色相環を描いてみた http://kar.s206.xrea.com/js/colors.html 色の変化のさせかたを自分で考えるのが目的だったのでグラデーションの技は使わず1ピクセルずつ処理してる。 なのでかなり重い処理になってるので注意。 RGB各色が0〜255の256階…

ポイントフリー

一つの値を名前に束縛せずに複数箇所で使うってどうやるんだ。Sコンビネータ的なものが用意されてる? cube = (((*).((*)<*>id))<*>id) -- \x -> x * x * x fib = (flip(if'.(< 2))1)<*>((+).fib.(-1 +)<*>fib.(-2 +)) http://d.hatena.ne.jp/nishiohirokazu…

コンビネータ一覧表

この間Gaucheで作ったラムダ式からの変換プログラム(とその後の調査)からわかったことを表にまとめてみた。 name in out memo I x x S K _ , W K , C K _ , R _ K M x x x O I , W I , W T Y x x (Y x) M2 L , U U , M2 (B M2 B) i x x S K V S K , S (O (K …

ラムダ式からの変換

Schemeのラムダ式に対応するコンビネータ表記を求めるプログラムを作った。 使い方 lambdaをlambdaccにして、通常のlambdaと同じように引数と本体を与える。 gosh> (lambdacc (x y z) (x (y z))) B gosh> (lambdacc (x y) (x (y y))) (C B M) ソースコード (…

ポリモルフィズムのレベル

ポリモルフィズムなし →普通の関数 例:C言語等 1つの引数(self)の型に応じてポリモルフィズム →普通のオブジェクト指向のメソッド 例:Smalltalk等 全ての引数の型に応じてポリモルフィズム →ジェネリックファンクション 例:CLOS等 さらに戻り値の型にも…

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

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 が証明可能である(すなわち、空集合から演繹可能)、というもの。 公理的命題論理では、公理図式として次のものを使うのが一般的である…