2007-01-01から1年間の記事一覧
なにが与えられても同じものが返らないと行けないって言う条件から、まずは与えられた引数が消えないと行けないよね。 消すには`kxに入れるしかない。で、消えた後のが元通りにならないと行けないから、 むずかしいね。
Iコンビネータは透明スライムで、食べたものの色に染まる。Vコンビネータは黒スライムでなにを食べても黒いまま。Kコンビネータは最初に食べたものを貯めていて、二つ目を食べると貯めていたのを吐き出して自分は死ぬ。Sコンビネータが難しい。子分を2人まで…
void: v(x) == v equivalent to ` ``s``s`kskk ``s``s`kskk今日はこれを理解したい。まずわかりやすい表記法を作る。 xを入れるとxが出てくる箱を[x -> x]と書くことにする。constant: ``kXY = Xこれは[x -> [y -> x]]。substitution: ```sXYZ = ``XZ`YZこれ…
らむだかわいいよらむだ inc = λ({x: "x+1"}) inc(1) //=> 2 実装: function λ(obj){ for(arg in obj){ var f = eval( "function(" + arg + "){return " + obj[arg] + "}" ) } return f; } ごめんなさいごめんなさいごめんなさい。。。
今日は体調のよくない日
となりの研究室のAちゃんがわたしのブログのことしゃべった!(><。 わかってくれてるとおもってたのに!!!(><。最近ようやくブログのおもしろさとか、ソースコードを書いて公開することのメリットとかわかってきたところなので、あんまりしりあいにブ…
フィボナッチ関数をContinuation Passing Styleで書いてみました。 これで任意の時点で計算を止めたり後で再開したり、続けた後で戻ってみたりできるようになったはずです。 実行の処理は結局最後のwhileループが一歩ずつ進めているわけです。なんかGUIに似…
Unlambda実装セットの中に入っていたのを読んでみる。600行程度の1ファイル。 // This is an implementation of the Unlambda programming language. // This one is in Java (the Master One is in Scheme). // $Id: unlambda.java,v 1.12 1999/11/03 21:05…
http://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3ACPSここではpredが真になるときに (cont (car data) (lambda () (match (cdr data) pred cont))) とcontをよんでいるけど、末尾呼び出しの最適化がない言語でこんなことをやったらスタックがあふれ…
継続 http://i.loveruby.net/ja/rhg/cd/continuation.html
SchemeのWikiの説明がとても参考になる。。とか思っててふと気づいたのだけど、もしかしてわたし自覚なしにSchemeを実装しようとしている??汗汗グリーンスパンの第10法則(><。
http://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3A%E5%A4%9A%E5%80%A4 Continuation-passingで考えると、関数呼び出しと関数からのリターンには区別が無くなる。どちらもcallerの用意した値をcallee側の仮引数にbindするだけだ。 うむむ、たとえば(+…
再帰呼び出しの直列化はできるようになったんだけど、返り値を使わない関数どまり。nを与えるとnをデクリメントしながら0になるまで表示するって言う関数。次は階乗を求める関数あたりだとおもうのだけど、返り値がどの関数の引数になるべきかとかどうやって…
継続を作るためには、まずgotoを作らないと行けない気がしてきました。 今はapplyがapplyをよんで。。。という形でフローが制御をされているのですけど、その呼び出しのスタックを取っておいたり勝手に破棄したりできない言語では再帰呼び出しの途中にジャン…
Unlambdaに限って言うと全ての関数が、関数を1個取って関数を1個返すことになっているので返り値がない場合とか考えずにつねに最後の返り値を次のに渡していけばいいんだね。だいぶわかった。もう眠いけど、こんど時間のあるときにJSでの実装に挑戦するよ〜…
おかたづけ。
最初の継続がどこからやってくるのかがわからない。あと「returnのかわりに継続をコールすればいい」というはなしは、末尾呼び出しの最適化がない言語で文字通りの実装にするとスタックオーバーフローを起こしてしまいそう(><。。 > (define call/cc call…
途中まで実装したよ。 個々の命令の一覧はどこにあるのかと思ったら解説ページの下の方にあったー。 http://www.madore.org/~david/programs/unlambda/#combiOCaml版のコードによくわからない「cont」がたくさん出てくるのがなぜなのか理解できてなかったけ…
なんでも継続 http://practical-scheme.net/docs/cont-j.html
http://ja.wikipedia.org/wiki/%E7%B6%99%E7%B6%9A何となくわかった。 問題は継続のない言語で継続を実装するにはどうしたらいいのかということかな。 - Continuation Passing Styleってものをつかうらしい。 http://www.is.s.u-tokyo.ac.jp/vu/jugyo/proces…
```d.a.b.cがbを出力するのは正しい挙動なのかな? unlambdaでコードを書く力がないと、作ったunlambdaの挙動が正しいかどうかがすぐにわからない。Schemeで書かれた処理系で試してみた。 > (main) `d.a (d1 (pr #\a)) > (main) ``d.a.b a(pr #\b) > (main) …
モナドの勉強をするならこれを読むのがいいって言われました。 http://www.ipsj.or.jp/07editj/promenade/4703.pdf
いきなりOCamlのコードを読みながらHaskellで書くのは大変なので一度JavaScriptで作ろうかと思っています。今日はもう眠たいのでこんどね。
ウィラード・ヴァン・オーマン・クワイン - Wikipedia http://ja.wikipedia.org/wiki/%E3%82%A6%E3%82%A3%E3%83%A9%E3%83%BC%E3%83%89%E3%83%BB%E3%83%B4%E3%82%A1%E3%83%B3%E3%83%BB%E3%82%AA%E3%83%BC%E3%83%9E%E3%83%B3%E3%83%BB%E3%82%AF%E3%83%AF%E3%82…
http://www.sato.kuis.kyoto-u.ac.jp/~igarashi/class/isle4/mltext/ocaml.html
Haskell : Java 型 : クラス data : class 型クラス : インターフェイス (Ord a) => a : class A implements Ord Ord : Comparable http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Comparable.html Comparableインターフェイスは言語的にはcompareToメ…
eval = function Funktion f -> fun cont -> cont f | Apply (rator, rand) -> fun cont -> eval rator (function D -> cont (D1 rand) | erator -> eval rand (fun erand -> apply erator erand cont)) なにが書いてあるのかさっぱり理解できない。。。第一…
Haskellの勉強も、なにか実用的なものを作りながらの方がいいと思ったのでUnlambdaの処理系を作ることにしました。OCamlの実装が104行のすごくわかりやすいコードだったのでこれを移植しようかな。とりあえずできたところまで(evalがまだ) {-# OPTIONS_GHC -…
http://d.hatena.ne.jp/cho45/20071106#1194290422 勉強する。モナドはJavaでいうところのデザインパターンの一種かな??
他の言語のノリで使うと間違えるreturn。 構文じゃなくて単なるモナドで包む関数なので、関数の途中でreturnしてもその時点で関数を抜けたりしないし、(return a)と(return b)を引数にして計算したり他の関数を呼び出したりもできる。もしかして と思ってx