ToDo:
i@u ~/test/ruby> cat fun_cl.rb def hoge class C end end i@u ~/test/ruby> ruby fun_cl.rb fun_cl.rb:2: class definition in method body
(00:04)
心動くような。
k.inabaさんの説明 http://www.kmonos.net/wlog/65.html#_1549060908 で突然 unsafePerformIO が素晴らしいものに思えたとか。
Haskell はもう <- が。まぁ僕は
23:47 >i< いやHaskellはパズルゲームじゃないの
とか言ってるわけだが。
結構面白いゲームな気はしますけどね。 無限リストゲームとかポイントフリーゲームとか。
あ、
23:50 >i< Haskellはパーサを書く場合のみ実用品ですね
とも。
IOモナド一個も出てこなくて ghciで実行結果確認するようなコードが一番こう Haskellいいなぁと思うとかなんか。
(04:02)
let (>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]>++++++++[<++++>-]<.>+++++++++++[<+++++>-]<.>++++++++[<+++>-]<.+++.------.--------.[-]>++++++++[<++++>-]<+.[-]++++++++++.) = print_endline "Hello world!"
とか書こうとしたけどダメだった
(11:56)
実装したことないデータ構造があるのはよろしくないので実装しておいた。
h[10000]; s,t,n; main(i){ for(i=100;--i;) for(h[n=s++]=rand()%100+1;h[n]>h[n/2];n/=2) t=h[n/2],h[n/2]=h[n],h[n]=t; puts("before"); for(i=0;i<s;i++) printf("%d\n",h[i]); puts("after"); for(;s--;printf("%d\n",h[0])) for(h[n=0]=h[s]; i=n*2+(h[n*2]<h[n*2+1]),i<=s&&h[n]<h[i];n=i) t=h[i],h[i]=h[n],h[n]=t; }
ヒープソートってこんな感じだよね。
(15:01)
http://alohakun.blog7.fc2.com/blog-entry-459.html
普通にこういう話じゃないのかしら。
i@u ~/test/ocaml> cat maj.def DEFTSUHAI(0, ton, "東") DEFTSUHAI(1, nan, "南") DEFTSUHAI(2, sya, "西") DEFTSUHAI(3, pe, "北") DEFTSUHAI(4, haku, "白") DEFTSUHAI(5, hatsu, "撥") DEFTSUHAI(6, chun, "中") i@u ~/test/ocaml> cat cpp.ml #define DEFTSUHAI(n, e, s) let e = n;; #include "maj.def" #undef DEFTSUHAI #define DEFTSUHAI(n, e, s) s; let id2str = [| #include "maj.def" |];; #undef DEFTSUHAI let _ = print_endline id2str.(ton); print_endline id2str.(haku); i@u ~/test/ocaml> gcamlopt -pp "cpp -P" cpp.ml i@u ~/test/ocaml> ./a.out 東 白
(20:31)
前 | 2006年 9月 |
次 | ||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。
cpp の # というのは(ファイル名と)行番号情報のことですか?
あわわ。えーと # じゃなくて ## のトークン連結が気になってたのでした。
抽象構文木上では識別子は文字列ですので、「^」で連結すると良いと思いますです。
>||
#load "camlp4of.cma";;
open Camlp4.PreCast;;
open Syntax;;
EXTEND Gram
expr: LEVEL "simple"
[ [ l1 = LIDENT; "#"; "#"; l2 = LIDENT -> <:expr< $lid:l1 ^ l2$ >> ] ];
END;;
let hello = 10;;
he##llo;;
||<
bf 演算子ですが、それp4(略
>||
EXTEND Gram
expr: LEVEL "simple" [ [ "'"; s = STRING -> <:expr< $lid:s$ >> ] ];
patt: LEVEL "simple" [ [ "'"; s = STRING -> <:patt< $lid:s$ >> ] ];
END;;
let '"+<[+]>>+" = 1;;
'"+<[+]>>+" + 2;;
let '"日本語もおっけー" = 1;;
'"日本語もおっけー" + 2;;
||<
ダブルクオートが微妙にダサイですけど、字句解析変更するのはしんどいので。
今、気づいたのですが、もしかしたらコンパイルするとマングリングでコケかもしれないです。インタプリタ上では大丈夫みたいですが・・・
あー、しまった。上のコード、CVS版のOCaml(Camlp4)じゃないと動かないです。
うあーなんでもアリですねぇ。しかしどうもうちだと CVS 版 (3.10+dev8 (2006-06-26) と言われてます) 入れたつもりなのですがコンパイル通らないなぁといった有様で。教えてくださってありがとうございますです。サイトの方参考にさせてもらって Camlp4 を勉強してみようと思っています。
上のコード、コンパイルするには END;; の前後でファイル分割しないとです。すみません、すみません。ちゃんと書かかなくてホントすみません。単純にインタプリタ上ではどうしょうか?コマンドライン $ ocaml して、ペーストか、$ emacs a.ml でペーストして、C-M-x連打。日本語のコードの部分は、rlwrapやemacsの文字コードの設定がキチンとなっていないと、通らんです。
# ああぁ… ocamlのコードがC(cpp)に蹂躙されいく…
あー分割しなきゃいけなかったのですね。よく考えればあたり前でした…そのアドバイスのおかげでとりあえずコンパイル&実行はできました。文法拡張っぷりを実際に目にすると、なかなか感動ですねぇ。
あとインタプリタの方もなにやら動きましたです。なんかうちだと #load "toplevellib.cma";; をやってやらないとコンパイルできないなーと思って加えてたんですがインタプリタの方では逆にこれを削ってやれば動きました。そもそも OCaml のモジュールシステムとかの時点でよくわかってないので、キチンと勉強しますです…