2001-07-02
λ. 新・闘わないプログラマ No.185 | 指し示す
配列におけるポインタ生成規則って、その考え方自体はなかなか面白いと思うし、C言語のような位置付けの言語としては便利だと思うわけで、もしこの規則が無かったら(配列もANSI Cの構造体のような感じだったら)、「&」演算子を多用しないといけないし、結構ごちゃごちゃするかな、などと思ったりもするわけです。
とあるけど、それを実際にやってるのがPascalですな。でも、それほどゴチャゴチャすることは無いと思う。むしろ、これでゴチャゴチャするとしたら、そのプログラムの方が問題のような気がする。
var a: array[0..9] of integer; p: ^array[0..9] of integer; q: ^integer; begin p := @a; q := @(a[0]); a[0] := 100; p^[0] := 100; q^ := 100; end
λ. 似た言語であるCとPascalのこの姿勢の違いは面白いと思う。ちなみにPascalは、ポインタに関しても結構ストイックで、ポインタに対する加減算は出来ないし、大小の比較も出来なかったりする。(Delphiでは「Inc(p, i);」とか出来たりするけど。)
λ. 記号処理プログラミングのミニプロ
Rubyで、Lispの簡単な処理系を書いてみようと思う。一度、オブジェクト指向言語で簡単な処理系を書いてみたかったのだ。全然自信無いんだけどね。まあ、だめそうだったら、inferior-script-fuとかいって、1024個めくらいの車輪に逃げよう。
λ. コンパイラ構成論
ところで、コンパイラ構成論の講義が今年の秋学期には「事情により」開講されないそうだ。超ショック。でも、まあ、脱線ばかりしてないで総合政策の道へ戻れという天の采配なの…かも?
2002-07-02
λ. 読書
- 『茄子』2
- 黒田 硫黄 [著]
- COMIC BLADE 8月号
- -
λ. 買った本
- UNIX USER 2002年7月号
- djbツール特集が読みたかったので
- C Magazine 2002年7月号
- 奥村さんのデータ圧縮の記事が読みたかったので。 range encoder にも興味はあったし。
λ. 和風マフィン(?)
おいしかったです。ありがとー
λ. Haskell メイリングリスト
subscribe
λ. darjeeling-cookies
のバスタ小説を読んだ。
2003-07-02
λ. ドイツ語
その辺りにあった適当な袋にお弁当を入れて持ってきていたら、その袋に「とらのあな」という文字が印刷されている事を加賀野井君に指摘されて焦る。全然気がついてませんでしたよ。この袋をぶら下げながら、学校に来たと思うとかなり恥ずかしいぞ。ちなみに、誤解のないように言っとくと、私はとらのあななんて行ったことありませんですよ、ええ。
λ. 『ソムリエ (2)』 城 アラキ, 甲斐谷 忍 [著]
λ. 買った本
- 『Topology Via Logic』
- Steven Vickers [著]
- 『裸でゴメンね』
- THE SEIJI [著]
- 『ベルセルク 25』
- 三浦 建太郎 [著]
Amazonからの発送のお知らせメールが来ないなぁ……と思ったら、商品が到着してから発送のお知らせメールがきたのですが……
2005-07-02
λ. 『月光魔術団1 春の魔法使い』, 平井 和正
古本屋で見かけて、中学生のころ雑誌で紹介されていたのを思い出したので、読んでみた。犬神メイというキャラクタは多少面白いかもしれないが、文章のレベルが低すぎるな。
λ. 無記名投票での投票CO
人狼審問: (604)乾いた村の2日目に無記名投票での投票COの話が出ていた。メモ。
- 語り部 デボラ / (76)2005/06/23 13:07:05
- >>67
「無記名投票CO」について考えてみた。
・投票が複数あって、CO者の数が足りなかった場合、能力者が襲撃されたと考える事ができる。
しかし、後から「遅れて済まない、実はあと1人のCO者は俺だ」と出て来る事も十分考えられる(当然、その場合、彼は信用を勝ち取る努力をしなければならないが)。
また、複数投票があって(内訳が真によるもの1、人狼による1だったとする)後で真のみが名乗り出た場合、真は無用な疑いを被る事になる…。
λ. Backtracking, Interleaving, and Terminating Monad Transformers (Functional Pearl). Oleg Kiselyov, Chung-chieh Shan and Daniel P. Friedman and Amr Sabry
LtUより。
- 論文中のコード
- monad が strict だというのはどう定義されるのだろう?
- (2005-09-04 追記) 「runST (undefined >> return ())」 は Control.Monad.ST.Strict ではundefinedに、Control.Monad.ST.Lazy では()になるけど、これは関係ある?
- 「List as transformer can only be applied to commutative monads.」がちょっと良く分からない。
- (2005-09-07 追記) 単に「可換なモナドに適用した場合しかmsplitはちゃんと定義出来ない」ってことか。
- Prolog の cut は知ってるけど soft-cut なんてのもあったのか。
- (2005-11-01 追記) 「A *-> B ; C」か。そういえばそんなのもあったな。
(2005-09-30 追記) msplitは兎も角、interleaveやbindiはプリミティブとしてはイマイチ。例えば、「interleave a (interleave b c)」ではa,b,cは均等には実行されない。n個の計算を均等に実行するには結局msplitを使って別の関数を定義せざるを得ない。bindiもinterleaveの欠点を受け継いでいて、第一引数と第二引数の計算は均等には実行されない。……といって、どうすればいいかは良く分からんけど。
とりあえず、自分でもコンビネータをちょっと書いてみた。interleaveNはn個の計算を均等に実行するための関数、bindzは第一引数と第二引数の計算が均等(?)に実行されるbind。bindzは自然数の直積と自然数との全単射を作るときなんかに良くやるように、ジグザグに動く。
interleaveN :: LogicM m => [m a] -> m a interleaveN [] = mzero interleaveN ms = msplitL ms interleaveN bindz :: LogicM m => m a -> (a -> m b) -> m b bindz m f = loop m [] where loop m xs = do r <- msplit m case r of Nothing -> interleaveN xs Just (a,m') -> msplitL (f a : xs) (loop m') msplitL :: LogicM m => [m a] -> ([m a] -> m a) -> m a msplitL [] k = k [] msplitL (m:ms) k = do r <- msplit m case r of Nothing -> msplitL ms k Just (a, m') -> return a `mplus` msplitL ms (k . (m':))
2006-07-02
λ. Evans のvague object について 矢田部俊介 稲岡大志
というスライドを読んだ。 非外延的な集合論かぁ……
【2006-07-14追記】 ytbさんによる背景説明、非外延的集合論について。
λ. 『Fermat's Last Theorem』 Simon Singh
2007-07-02
λ. “A formulae-as-types interpretation of Subtractive Logic” by Tristan Crolard
昔読みかけて放置してた論文なのだけど、こないだのコルーチンの話で思い出して、読んでみた。色々と面白い。
複数の結論を持つシーケントを考えるので、判定(judgement)の書き方が、型理論の通常のそれと異なっているのが新鮮。例えばこんな感じ。
t : Γ ├ Δ; A ---------------------------------------------- make-coroutine t β : Γ ├ Δ, B^β; A - B
2008-07-02
λ. Erlang で HelloWorld
Erlangは少し前に流行していたけど、プログラミングErlang(Joe Armstrong/榊原一矢) を借りたので、ちょっと遊んでみる。 現在の最新版は Erlang/OTP R12B というバージョンのようなので、これをインストールしてまずはHelloWorld。
#!/usr/bin/env escript main(_) -> io:format("Hello, World!~n").
エスケープシーケンスはまんまPrologなのね。
それから、Erlangの等号は単一化ではなくただのパターン照合なので、以下のようなコードはエラーになるのか。
1> [1, X] = [Y, 2]. * 1: variable 'Y' is unbound