[[Overlay GHC]] #contents * 素材突っ込み [#qd157ccc] #article **計算機 [#r15c899b] >[[doi]] (2007-05-12 (土) 14:58:08)~ ~ http://www2.media-art-online.org/~ks91/rg-p2p-workshop2007s/calc.ghc~ ~ :-main.~ main :- calc(Xs), io:instream(Xs).~ ~ calc(Xs) :- true~ | Xs = [write('式を入れてちょ: '), read(X), write(X), nl|Xs1], calc0(X, Xs1). ~ calc0(X, Xs) :- Y := X | Xs = [write('= '), write(Y), nl|Xs1], calc(Xs1).~ calc0(quit, Xs) :- true | Xs = [write('やめるっちゃ。'), nl].~ calc0(X, Xs) :- otherwise | Xs = [write('ちゃうちゃう、')|Xs1], calc(Xs1).~ :-main. main :- calc(Xs), io:instream(Xs). calc(Xs) :- true | Xs = [write('式を入れてちょ: '), read(X), write(X), nl|Xs1], calc0(X, Xs1). calc0(X, Xs) :- Y := X | Xs = [write('= '), write(Y), nl|Xs1], calc(Xs1). calc0(quit, Xs) :- true | Xs = [write('やめるっちゃ。'), nl]. calc0(X, Xs) :- otherwise | Xs = [write('ちゃうちゃう、')|Xs1], calc(Xs1). // #comment **例題(リスト: 以下のFIXMEを補完して、奇数のみを選択する) [#n58996c2] >[[doi]] (2007-05-12 (土) 14:53:53)~ main(I) :- only_odd(I, O), output(O, Os)@this_node, io:outstream(Os). output([X|Xs], Os) :- true | Os = [write(X), nl|Os1], output(Xs, Os1). output([], Os) :- true | Os = []. only_odd(FIXME, Os) :- N mod 2 =:= 0 | only_odd(Ns, Os). only_odd(FIXME, Os) :- N mod 2 =\= 0 | Os = FIXME, only_odd(Ns, Os1). only_odd(FIXME, Os) :- true | Os = []. // #comment **GHC参考資料! [#c2d11930] >[[doi]] (2007-05-12 (土) 14:37:06)~ ~ - 上田先生自身による入門: http://www.ueda.info.waseda.ac.jp/~ueda/readings/GHC-intro.pdf~ - KLIC講習会テキスト: http://www.klic.org/software/klic/lang/lang.html~ // #comment **[wija FAQ]: javaで日本語文字が化ける [#a1c60148] >[[doi]] (2007-05-12 (土) 14:11:09)~ ~ $JAVA_HOME/jre/lib/fonts/fallback というディレクトリを作って、そこにTrueTypeフォントをコピーするといいかも。~ // #comment **[wija FAQ]: iTunesが立ち上がるのですが [#b7c98c02] >[[doi]] (2007-05-12 (土) 14:05:53)~ ~ 仕様です。もし気になる場合は、tunesプラグインの連携を切ってください。~ // #comment **素数生成プログラム [#y9d7da64] >[[doi]] (2007-05-12 (土) 14:03:01)~ ~ http://www2.media-art-online.org/%7Eks91/primes.ghc より~ :-main(100). main(Max) :- primes(Max, Ps), output(Ps, Os), io:outstream(Os). output([P|Ps], Os) :- true | Os = [write(P), nl|Os1], output(Ps, Os1). output([] , Os) :- true | Os = []. primes(Max,Ps) :- true | gen(2,Max,Ns), sift(Ns,Ps). gen(N,Max,Ns) :- N=<Max | Ns=[N|Ns1], N1:=N+1, gen(N1,Max,Ns1). gen(N,Max,Ns) :- N> Max | Ns=[]. sift([P|Xs],Zs) :- true | Zs=[P|Zs1], filter(P,Xs,Ys), sift(Ys,Zs1). sift([], Zs) :- true | Zs=[]. filter(P,[X|Xs],Ys) :- X mod P=:=0 | filter(P,Xs,Ys). filter(P,[X|Xs],Ys) :- X mod P=\=0 | Ys=[X|Ys1], filter(P,Xs,Ys1). filter(P,[], Ys) :- true | Ys=[]. // #comment **関係するlink [#u4d4ba98] >[[doi]] (2007-05-12 (土) 13:57:31)~ ~ - http://java.sun.com/~ - http://www2.media-art-online.org/nightly/~ // #comment **lib-ioの中身を大公開! (as source code example?) [#qbd7de52] >[[doi]] (2007-05-12 (土) 13:43:05)~ ~ % $Id: //depot/scm/main/java/org/media_art_online/ghc/lib/lib-io.ghc#3 $~ % $DateTime: 2007/04/19 05:15:52 $~ ~ :- module io.~ ~ outstream([write(X)|Os]) :- write(X) | outstream(Os).~ outstream([print(X)|Os]) :- write(X) | outstream(Os).~ outstream([nl|Os]) :- nl | outstream(Os).~ outstream([]) :- true.~ ~ instream([write(X)|Is]) :- write(X) | instream(Is).~ instream([print(X)|Is]) :- write(X) | instream(Is).~ instream([nl|Is]) :- nl | instream(Is).~ instream([read(X)|Is]) :- read(X1) | X = X1, instream(Is).~ instream([]) :- true.~ // #comment ** サンプルプログラム [#ybba649f] - &ref("ave.ghc"); 一つのストリームでの加重平均を出す - &ref("compact.ghc"); 一つのストリームから重複する数字を削除する - &ref("fibo.ghc"); フィボナッチ数を求める - &ref("merge.ghc"); 二つのストリームを一つのストリームにまとめる - &ref("prime.ghc"); 素数を求める