2007-08-01から1ヶ月間の記事一覧
https://twitter.com/niha28 はじめました。どうでもいい。
ハンターハンターが連載再開するらしい。 本気を出す時が来たようだ。 でついでに宮野ともちか先生も連載再開して下さい…
さて任意の式 expr の遅延オブジェクトを返すような手続き lazy(expr) は書けるかというと、残念ながら書けません。引数を式のままとるような関数が OCaml では書けないためです。 幸いなことに OCaml には始めから lazy という式文法が存在し、それを使うこ…
関数型といえば遅延評価?そりゃハスなんとかのことかい?(Clean のこともたまには思い出してあげてください)とかまあそれは置いといて。 遅延評価(lazy evaluation)は、値が必要になるまで計算を行わず、実際に値が必要になった時に計算を行う手法です。 …
前々回に遅延評価の例として無限リストを出しましたが、今回は実際にフィボナッチ数列のリストを実装してみましょう。 まずは lazy を使わずに実装してみましょう。 始めに、無限リストを表すデータ構造を考えます。当然そのままリストを使うわけにはいきま…
現時点での昨日のリンク元。 * 8 http://d.hatena.ne.jp/keyworddiary/Haskell * 3 http://d.hatena.ne.jp/keyworddiary/OCaml OCamlの記録なんですが…ハスなんとかとは違うんですが… 今日は風邪ひいてしまったので一回休みです。
さて前回、アキュムレータジェネレータが書けないと書いた理由は、変数の破壊的代入が必要になるためです。ですよね? OCamlは関数型言語ですが、純粋な関数型言語ではありません。純粋な関数型言語としては最近ではHaskell等が有名です。 そもそも純粋って…
関数型といえば略。 カリー化とは…ほげほげ。 例えば plus というニ引数を取る関数にうっかり引数を一つしか渡さなかったとします。 # let plus x y = x + y;; val plus : int -> int -> int = <fun> # plus 3;; (* アッー *) - : int -> int = <fun> やっちゃった…と</fun></fun>…
演算子の一覧とか何処かに纏められて無いかなと思ったら余裕で見つからなかったので、分かる範囲でまとめておこうと思います。多分漏れが一杯ある。 int +(加算), -(減算), *(乗算), /(除算), mod(剰余算), land(bit and), lor(bit or), lxor(bit xor) float…
触れたくなくて今まで華麗にスルーしてきましたが、手続き型言語の多くとは違い、OCamlの演算子は非常に融通が利きません。 # let x = 1 * 2.2;; Characters 12-15: let x = 1 * 2.2;; ^^^ This expression has type float but is here used with type int …
リストやタプルの要素の弄り方がそこそこ分かったところで関数を。 int 型の引数に 1 を足した値を返すような関数は下のように書ける。 # fun x -> x + 1;; - : int -> int = <fun> まあ見たまんま。当然このままじゃ使えないので、変数に束縛しましょう。 # let </fun>…
関数型といえばパタ略。 まあ何かリストやタプルやバリアントなどを操作する時に便利なナニです。 先頭の要素が1だったらtrueを、そうでなかったら0を返す処理を書きたいときは大体こんな感じ。 # match [1; 2; 3] with 1 :: rest -> true | some -> false;;…
忘れてました。 unit 型の値はただ一つ「()」だけです。 何に使うかというと、関数の返り値が必要ない場合、C言語でいう返り値が void 型の関数を書きたいときに使います。 例えば print_endline 関数は unit を返します。 # ();; - : unit = () # print_end…
関数型といえば再帰略。まあ例としてはつまらないんですが階乗計算を。 # let f n = if n > 0 then n * f (n-1) else 1;; Characters 28-29: let f n = if n > 0 then n * f (n-1) else 1 ^ Unbound value f 叱られてしまいました。そのままではそれまでに定…
Ocamlは関数型言語らしいです。関数型言語といえばタプルです(違います)。ということでタプル。 # (1, "hoge", 'a');; - : int * string * char = (1, "hoge", 'a') # 1, "hoge", 'a';; - : int * string * char = (1, "hoge", 'a') ふむふむ。括弧省略で…
突然ですがOCamlまた始めます。またって何?という人はこちら。なんと半年以上空いてしまいました。あはは。 思えば色々ありました(以下略)。 まあ何か大分前にやるだけはやったんですが復習ついでに書きます。 追記:OCamlとか関数型言語とか全然知らない…
まあクラスも立派な型だし Objective とかいうくらいなので一応触っておきましょうみたいなどうでもいい感じで。 # class mylist init = object val list_ = init method length = List.length list_ end;; class mylist : 'a list -> object val list_ : 'a…
レコードは名前付きタプルというか、Structというか。そんな感じのものです。よくある例として二次元座標とか。 # type point = { x:int; y:int };; type point = { x : int; y : int; } # let pt = {x=3; y=5};; val pt : point = {x = 3; y = 5} # pt.x * …
http://d.hatena.ne.jp/shinichiro_h/20070817#1187287104のプレゼン資料より。 神秘的な理由により、Perlでは関数型言語でおなじみのmap関数を使って文字列中に出現した部分文字列の数を数えることができる 確かに神秘的だ。スカラー様様といったところ。 …
何か賢くなれるんじゃないかと思ってつけてみた。 特に変化はないみたいだ。
通った。 一人微妙な長さ。浮いてる。
23:04 (xxxxx) sedは簡単だいや難しい有益だいや害悪だ 23:04 (xxxxx) 良いテンプレートですね 23:06 (niha) 良いでしょう 23:06 (niha) あらゆる物に適用することができます 23:08 (xxxxx) Javaは害悪だいや害悪だいや害悪だいや害悪 23:09 (niha) それ害悪…
オブジェクト思考は簡単だいや難しい有益だいや害悪だとかいう議論はいつになったら終わるのかな♪ これがいつか関数型は簡単だいや難しい有益だいや害悪だとかいう議論にすりかわる日がくるんだろうか。 そんな日は来なくていいと思うし、多分来ないだろうと…
定期的に思うんですがほんとかよ、という感じですね「あわせて読みたい」。面白いなー。
数学系の問題全般弱いのはなんでだろう。ヒント:勉強不足頑張ろう…しかし (ぱっと思い出すとmistyさんnihaさんkonnさんkurimuraさんとかそのへん) 明らかに一人落ちこぼれてるな。うん、頑張ろう。
あらすじ:夜眠れない日々が続いた結果、夜更かしさんにクラスチェンジしたにはさんは、遂に宿敵のギラギラ輝くお天道様に戦いを挑んだ!
強いなーボクには通るのが書けない。
4時までになんばにつくようにするかー。 集合場所近くのゲーセンでえんやこらしてるCN:nihaさんがボクですとかそんな。
なんば駅からビッグカメラまで歩いて40分もするなんて聞いてない。 サイン会終わりましたお疲れ様です。 最初集合場所に着いたとき「お久しぶりです」といって入ったらid:ozyさんもid:kurimuraさんもいなくて全然お久しぶりになってなかった。にはさん涙目。…
すごいぞ0%だ!