CS
SKK Openlab - SKK = I SKKという名前がコンビネータ論理から来てるとは知らんかった。作者が佐藤雅彦氏ということもだが。
手が小さいのでEscキーがホームポジションから遠いのがViを使ってるときの悩みだった。が,"Ctrl+["でも同じだということに今さっき気づいた。何年Vi使ってるんだっけ,オレ。。
C言語のmemsetやmemcpyは自前でforループなどをつかって同じことをやるよりも高速だと言われている。そのためか,会社でもこれらの関数が使われるプログラムを見る機会は多い。ただし,けっこう微妙な感じで。例えば,以下のような感じ。 #define LENGTH_INT…
『なぜコンピューターは2進法で、人間はそうでないのか - 小人さんの妄想』を読んで。なかなかおもしろいエントリーで,普段,整数というか自然数しか扱わない人間には微分をつかってe進法が効率が良いとか示すあたりは非常に興味深かったです。が,気にな…
会社を休んでやることが電話をかけるだけというのではさすがにアレなので,call/cc実装してみた。 かなり苦戦したが,なんとか下記のようなことはできるようになった。 >> (let ((x 100)) (set! x (call/cc (lambda (k) (k 200)))) (+ x x)) 400 怖いので今…
もうそんな時期なんですね(どんな時期だ?)。 まあ,勉強し始めたってことなんだけど。
>> (car (cdr (cons 1 (cons 2 3)))) 2 これくらいはできるようになった。スタックマシンもいろいろ変更してます。新しい命令加えたりとか。
おう,なんてこった。6.10.1の例外処理についての説明が『第25回 Haskell流の例外処理を学ぶ | 日経 xTECH(クロステック)』にあるじゃないか。というか知らぬ間に25回もいってたのか・・・。 で,これを読むとfromExceptionはcastという関数を使えばよいら…
Control.OldExceptionというモジュールにありました。 参考:http://www.haskell.org/ghc/docs/latest/html/libraries/base/Control-OldException.html
GHC 6.10.1では変更点多いらしくHackageDBにあるPackageのなかにもbuildできないものがけっこうありそうな気がします*1。 *1:ボクはぬるユーザなので対応してくれるまで待ちます…
GHC 6.10.1にアップデートしたらコンパイルできなくなった。 どうやらthrowDynがなくなったらしい。その代わり,6.10.1からはExceptionそのものをユーザが拡張できるようになったようだ。自分でExceptionをつくりたい場合はExceptionクラスのインスタンスを…
むむむ,GHCをアップデートしたらコンパイルできなくなったデスよ??
やっとletrecをコンパイルできた。まあ,バグある可能性大だけど。末尾再帰?ナニそれ? しかし,間違いが多すぎる。実装して気づく間違いだけでなく,実装する前に気づいてしかるべき間違いが。 そろそろ本読み期に入るべきかもしれない。知識のストックが…
ちょっと趣向を変えてコンパイラをつくってみることにした。とはいってもx86をターゲットにするなんてのは無理の無理無理なんで,Virtual Machineを作ってそれをターゲットにすることに。 で,VMを実装してみた。いろいろ考えた結果,Stack Machineです。 mo…
GCを実装してみた。単純なMark and Sweep。 今までGCについてまともに考えたことなんてなかったが,いざやってみると奥が深くてなかなかおもしろい。 もうすこしGCについて調べてみるのもいいかもしれない。
Schemeでは次のような式はエラーになることを初めて知った。 (let ((x (+ x 1))) x)(+ x 1) の x が未定義になるため。 R5RSによると,letrecの意味は library syntax: (letrec ) Syntax: should have the form (( ) ...), and should be a sequence of one …
末尾呼出しというよりはHaskellでの実装の話。 関数呼出しが末尾呼出しかどうかを知るために継続を比較する必要があるのだが,わたしの実装では継続は関数であり,そしてHaskellでは関数そのものの比較はできない(はず。たぶん)。 type Cont = [Val] -> En…
まえの日記で関数呼出しが末尾呼出しか評価時にチェックすると書いたが,実際はチェックの結果で処理は変えていない。というのも,関数f内の関数呼出し(g x)が末尾呼出しであったなら,(g x)の継続は関数fの呼出しの継続となるように実装していたから。 ただ…
日記に書くのは半年ぶりですが,じつは地味にHaskellでScheme風言語のインタプリタ実装を続けていたりします。まあ,途中何度も中断してたりしますが。。。 R?RS準拠のものを作る気(というか能力)なんてないのだが,やはり末尾再帰くらいはちゃんとやりた…
http://haskell.org/ghc/docs/latest/html/libraries/base/Data-Bits.htm bitwise andとbitwise orがちょとかわいい。 (.&.) :: a -> a -> a (.|.) :: a -> a -> a
プログラミングGauche作者: Kahuaプロジェクト,川合史朗出版社/メーカー: オライリージャパン発売日: 2008/03/14メディア: 大型本購入: 22人 クリック: 713回この商品を含むブログ (244件) を見る時間をみつけてはよんでます。「19章 継続」は勉強になります…
Schemeのdefineってlet式の本体にいれる場合は先頭にいれなければいけないのか*1。しらなかった。しかし,これなら実装しやすい。トップレベル以外のdefineは実質letrecとみなせるのだから,トップレベルで定義された変数のみを特殊なあつかいにできる。たぶ…
d:id:cadr:20080302の複数行REPLは続きの行を1行入力するたびに字句解析と構文解析をいちからやり直すというアレな実装であった。さすがのオレもこれは気に食わないので,ちょっと改良してみた。 目標は,入力された行に対して字句解析,構文解析は一度しか…
d:id:cadr:20080229で実装したREPLは式を1行で書かないときちんと評価してくれなかった。つまり, (let ((x 1) (y 2)) (+ x y)) は,次のように書く必要があった。 (let ((x 1) (y 2)) (+ x y)) まあ,この程度なら問題ないが,もっと複雑な式を書く場合に…
注目のコンピュータサイエンス本: ホットコーナーで『Compiling With Continuations』が紹介されていた。絶版じゃなかったのかしらとリンク先を見てみると,ペーパーバックで復刊してました。発売日を見てみると2007年2月12日,最近じゃんと思ったが今年は20…
read-eval-print loopを書いてみた。というか,http://halogen.note.amherst.edu/~jdtang/scheme_in_48/tutorial/overview.htmlの“7. Building a REPL”をほぼそのままコピーだが。とはいっても,モナドよくわからんので読むのに苦労しました。 というか,Has…
HaskellでScheme風な言語のインタープリタを書いている。書き始めたのは2週間以上前から。Schemeは構文が単純だし,R5RSも読んだことあるから他の言語に比べて書きやすいだろうと思ったが,実際に書いてみると色々と壁にぶつかりまくり。とりえあず, 入出…
1年半前に輪講で読んだときよりよく理解できたと思う。得た知識をしっかりと身につけるために簡単な言語のインタープリタでも書いてみよう。
『プログラミング言語』(武市正人)のなかに, data Val = V_Int Int | V_Bool Bool expval (Bexpr o e e') r = V_Int (binopr o v v') where V_Int v = expval e r V_Int v' = expval e' rというようなコードが出てくる。 学部4年のときに読んだときは,w…
最近,仕事でRubyを使ってます。って使ってるのはオレだけだけど。Rubyを使ってデータまとめのためのスクリプトを作成してます。たまに,スクリプトを作るよりもコピペでやったほうが早いのでは?と感じるときもあるが,同じようなデータをまとめるときに楽…