トップ «前の日記(2006-09-17) 最新 次の日記(2006-09-19)» 編集

はじめてのにき

ここの位置付け

2004|11|
2005|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|

ToDo:


2006-09-18

_ 怒られチッタ

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)

_ Haskellのバックドアも

心動くような。

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)

_ DSL

let (>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]>++++++++[<++++>-]<.>+++++++++++[<+++++>-]<.>++++++++[<+++>-]<.+++.------.--------.[-]>++++++++[<++++>-]<+.[-]++++++++++.) = print_endline "Hello world!"

とか書こうとしたけどダメだった

(11:56)

_ やわらかHaskell塾

map (\x -> x*x) [1,2,3]

リスト内包表記になおして下さい!

[x*x | x <- [1,2,3]]

みたいなのを解いていく。

(12:05)

_ じゃんけん2.0

Ruby vs gawk と Rotate が同時に負けてるのは当然だよね… gawk は uniq かかってるんでしょ…

(13:30)

_ heap

実装したことないデータ構造があるのはよろしくないので実装しておいた。

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)

_ camlp4 には cpp の # があるのか無いのか

それが問題だと思う。

(18:00)

_ 特異メソッドは特異らしい

http://jp.rubyist.net/magazine/?0002-WCNewsPaper

(18:03)

_ cpp

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)

本日のツッコミ(全7件) [ツッコミを入れる]
_ 晩ごはん (2014-05-24 02:43)

cpp の # というのは(ファイル名と)行番号情報のことですか?

_ shinh (2014-05-24 02:43)

あわわ。えーと # じゃなくて ## のトークン連結が気になってたのでした。

_ 晩ごはん (2014-05-24 02:43)

抽象構文木上では識別子は文字列ですので、「^」で連結すると良いと思いますです。
>||
#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;;
||<
ダブルクオートが微妙にダサイですけど、字句解析変更するのはしんどいので。
今、気づいたのですが、もしかしたらコンパイルするとマングリングでコケかもしれないです。インタプリタ上では大丈夫みたいですが・・・

_ 晩ごはん (2014-05-24 02:43)

あー、しまった。上のコード、CVS版のOCaml(Camlp4)じゃないと動かないです。

_ shinh (2014-05-24 02:43)

うあーなんでもアリですねぇ。しかしどうもうちだと CVS 版 (3.10+dev8 (2006-06-26) と言われてます) 入れたつもりなのですがコンパイル通らないなぁといった有様で。教えてくださってありがとうございますです。サイトの方参考にさせてもらって Camlp4 を勉強してみようと思っています。

_ 晩ごはん (2014-05-24 02:43)

上のコード、コンパイルするには END;; の前後でファイル分割しないとです。すみません、すみません。ちゃんと書かかなくてホントすみません。単純にインタプリタ上ではどうしょうか?コマンドライン $ ocaml して、ペーストか、$ emacs a.ml でペーストして、C-M-x連打。日本語のコードの部分は、rlwrapやemacsの文字コードの設定がキチンとなっていないと、通らんです。

# ああぁ… ocamlのコードがC(cpp)に蹂躙されいく…

_ shinh (2014-05-24 02:43)

あー分割しなきゃいけなかったのですね。よく考えればあたり前でした…そのアドバイスのおかげでとりあえずコンパイル&実行はできました。文法拡張っぷりを実際に目にすると、なかなか感動ですねぇ。
あとインタプリタの方もなにやら動きましたです。なんかうちだと #load "toplevellib.cma";; をやってやらないとコンパイルできないなーと思って加えてたんですがインタプリタの方では逆にこれを削ってやれば動きました。そもそも OCaml のモジュールシステムとかの時点でよくわかってないので、キチンと勉強しますです…

お名前:
E-mail:
コメント:
人生、宇宙、すべての答え
本日のリンク元

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
1.shinh(2014-05-24 02:43) 2.k.inaba(2014-05-24 02:43) 3.YT(2014-05-24 02:43)
search / home / index

全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。

shinichiro.hamaji _at_ gmail.com / shinichiro.h