プログラミングシンポジウム日記(ただし手抜き)
乗務員の雑談を聞いたら、この電車は一発で軽井沢に行ける電車らしい。 お昼頃に軽井沢に着くから混み混みなんだそうな。
軽井沢って途中にあるんだなぁ。人が降りて座れるようになるかも。 あ、でもあと20分くらいか…。
自由席座れたよ!
= IPアドレス取れない…。
Packrat Parsing面白そう。
CやJavaで/*~*/を入れ子にできないのはなぜか。→そこにyaccがあるからだ。
Modula-2はコメントの入れ子が可能。Common Lispも可能。 CやJavaはできない。
Rubyで複数の代入。
(a, b) = [1, 2] (a,) = [1]と書かないといけないらしい。Pythonでは角括弧で書ける。
>>> [x, y] = [1, 2] >>> x 1
f = {|x| x + 1} # ダメ
f = lambda {|x| x + 1} # OK
ダメなのか…。「f = {」の時点でハッシュだと思われてしまうそうな。
Pythonで「1.__add__(2)」とやろうとすると
「1.」の時点で実数型リテラルだと思われてしまうのに似た感じかな。
バックトラックしないのがいけないらしい。 Packratは効率よくバックトラックするらしい。
Pythonで書かれたPacrat Parsingライブラリ、あるかなぁ。 なかったら作ろうかなぁ。
syntactic predicate。&E Eとマッチした !E Eとマッチしない。
ordered choise 順序があるのが重要。E? 1回または0回。
文脈依存文法までOK。
S <- &(A !"b") "a"+ B !"c"; A <- "a" A? "b" B <- "b" B? "c"
Pythonの実装があるらしい。 検索したいけどIPアドレス取れないなぁ。 PHSでつなごうか…。
Packratはメモリが線形なのが問題なのだけども、 どう書くorgの場合はコード片がさほど大きくないしな。
よく考えたらPygmentsにしてもVimcolorにしても、 Rubyの「手で書いた1900行のスキャナー」と同じことをするのは どう考えても困難なので、 そもそもRubyのコードを完璧にシンタックスハイライトするのは 不可能ということか。
Excelプログラミング。 面白い。 Excelでピラミッド書いたのであとでどう書くorgに投稿しよう。 =IF(AND(ROW(A2)-$A$1-2 < 0, 1+ABS(COLUMN(A2)-$A$1)-ROW(A2) < 0),"*", "")
通暁する。
sideway additionを調べる。
オーバーフローしていなくなっちゃう。
本を鵜呑みにしないで自分で早くなるようにこだわる。
= 25年前の言語。 25年前はプリンタに中かっこ文字がなかった!
= Okitac System 50/40
= XS = Lego Mindstorms上で動くLisp(インタラクティブ) by 湯淺先生
= ポインタって本質だろうか。 僕がポインタの本質をわかっているから、 Pythonでいいじゃないかと思うだけなんだろうか。 他の物をポイントする概念が本質的に必要とは言うけども、 PythonでもJavaでもポインタが裸になっていないだけで 何もかもポインタじゃないかと思う。(Javaのプリミティブ型を除く)
= やっとネットにつながったー!
= 大学の授業にBrainf*ck。 開発環境を携帯で。
= 手続き型: 計算結果につけたのが名前
データフロー同期
「3+5って答え存在しないよな」「いや、8という反例があるぞ」
配列なんてなくてもツリーでいい。 そんなに遅くならない。
連想リストによるDeep Binding。 変数束縛は先頭への追加。 パラレルワールド化もO(1)
Shallow Bindingはスタックを使う。 パラレルワールド化が簡単ではなくなる。
Bakerの方法。
データフロー同期で結果として逐次実行。
逐次実行で書いても勝手にout of order実行される。 最近のコンパイラは 静的単一代入 (Static single assignment form - Wikipedia)とかするので 逐次実行で書いているつもりでも実際の実行は宣言型でデータフロー同期。
具体的にわかりやすく書きたければ手続き型、抽象的にわかりやすく書きたければ宣言的。
「君の説明は具体的すぎてよくわからない。もっと抽象的にわかりやすく説明してくれ。」
手続き型の考え方が染みついてしまっている人がPrologを使うとassert/retractが多くなってしまう。 Lispでsetqを使いまくる人がいるのと同じかな。
ああ、確かにprognも隠して置いた方がいいのかも。
assertをググってみた「変数名とその値を記憶しておくには,assertを用います.」 うひゃー。
衆生が救われるような研究をしてこそ大乗
カットしてファイルを切り換えるとカットした部分が永遠に失われる…。
おおお、 フィジェット - AOI2 葵から使える!
構造体が書けない人はOOPも書けない。
Packrat Parsing: Simple, Powerful, Lazy, Linear Time
packratはpack+ratか。
Packrat Parsing and Parsing Expression Grammars
「ICPCに出てくるパターンは限られている。 3年間プログラムプロムナードを書いたらネタがなくなった。」
「ちゃんとしたプログラムは醸し出されてくるもの。 それに比べるとICPCは非常にくだらない。 若い人にこんなことに熱中させるのはもったいない。」
まぁ、でも、 選択肢はプログラミング以外にもたくさんあるので、 ゲームに熱中して時間を無駄にするくらいであれば、 ゲーム的なプログラミングに熱中するのもいいのではないかと思った。
「まさに弾圧としか言いようがない」
anarchy golfはXenだって。
何か一つくらいといてみるかと思ってライフゲームを見てみた。 anarchy golf - Life game。
これ、テストケースに書かれている3通りの出力をランダムに表示して、 1/27の確率でテストを通るというコードだなぁ。
サンプルデータの入力に、成長によって入力の枠の外にはみ出るケースがないので、 そういう場合の処理をどうすればいいのかがわからない。 適当でいいんだろうなぁ。
フロッピーROM。 リードオンリーなディスク。
表と裏にレジスタがある?!
「それはね、8ビットしか処理していないからですよ!」
論より「RUN」
USO
NetaTen
= ループは糊で貼り付ける。
= セッションハイジャック、ただし犯人は座長。
フィードバック