1 名前:デフォルトの名無しさん [04/02/01 18:55] 純粋関数型言語Cleanに関するスレッドです。 関数型には珍しくIDEと、IO,Gameライブラリが標準でついてきます。 関連リンク 本家 www.cs.kun.nl/~clean/ 日本語ドキュメントなど sky.zero.ad.jp/~zaa54437/programming/clean/
48 名前:デフォルトの名無しさん mailto:sage [04/02/11 14:25] >>42 そう変わらん結果になると思うが、考えてはみよう。
49 名前:Aransk [04/02/12 16:45] CleanPjtを推進しているオランダの大学教授も 最近やる気を無くしているみたいね? やっぱり、商売にならないとキツイんだ。 そりゃぁ、EclipseやJakartaPjtを無償で使っている 連中に売り込むのは、いかにもツライものがあるよねぇ。 ttp://homepage3.nifty.com/Aransk/
50 名前:デフォルトの名無しさん mailto:sage [04/02/12 23:41] 誰か Aransk タン専用スレ立てキボンヌ。
51 名前:デフォルトの名無しさん mailto:sage [04/02/13 07:14] >>50 漏れがスレ立てられるようになるまで待ってろ。 関数型言語スレの住人は煽り耐性もdqn耐性も 弱いからな。
52 名前:Aransk [04/02/13 17:07] >50,51 でもCleanってさぁ。Haskellとは違って明らかに商用を 目指しているよねぇ?そのビジネスが成立するかどうかって Cleanスレでは重要じゃないの?でないと Clean言語自体が消えちゃうじゃんよぉ。 ttp://homepage3.nifty.com/Aransk/
53 名前:デフォルトの名無しさん mailto:sage [04/02/13 17:14] こんなのが流行る気がしないな。 このスレでも一向にコード書く奴出てこないし。 Aransk、おまえここに居座るつもりなら Cleanでなんかコード書いてみろよ。
54 名前:デフォルトの名無しさん mailto:sage [04/02/14 04:39] 元々はオランダの国家プロジェクトの副産物として登場したものなので、 商用を目指しているというのは正確ではない。 大学の研究用の材料にされているという方が正確だ。
55 名前:Aransk [04/02/14 17:52] >53 >This site is about functional programming >and purely functional language : Concurrent Clean. これCleanのプログラムじゃなかったっけ?(^^; >54 Cleanの最新版は金を払わんとダウンロード出来ん。 それを商用と言わずして何を商用と言うのか?(^^) IBMが5千万ドル開発費を注ぎ込んだ、Eclipseが 無償でダウンロードできる。これも大学の研究用の 材料であろうか?(^^; ttp://homepage3.nifty.com/Aransk/
56 名前:デフォルトの名無しさん mailto:sage [04/02/14 18:42] アホとは思っていたが。 これ程とは・・・
57 名前:デフォルトの名無しさん [04/02/14 19:29] 商用ってば、Eiffelのシャチョさん、一昨年の日本のOOカンファレンスに招聘されてたけど 相変わらず精力的だったな。やっぱコンサルとか講演とか、別の収入があるからかw
58 名前:デフォルトの名無しさん mailto:sage [04/02/14 19:47] どうする〜? Eiffel?
59 名前:デフォルトの名無しさん mailto:sage [04/02/14 21:21] Aransk 様の Clean 講座マダー
60 名前:デフォルトの名無しさん mailto:sage [04/02/14 21:30] Cleanで hello Dialog module hello import StdEnv, StdIO Start world = startIO NDI Void (snd o openDialog undef hello) [] world where hello= Dialog "" (TextControl "Hello world!" []) [WindowClose (noLS closeProcess)]
61 名前:デフォルトの名無しさん mailto:sage [04/02/15 03:57] >>55 >Cleanの最新版は金を払わんとダウンロード出来ん。 英語のサイト巡りも禄に出来ない人は来ないで下さい。
62 名前:37の配列版 mailto:sage [04/02/15 12:03] module csvref import StdEnv,ArgEnv Start world # (readok, file, world)= sfopen filename FReadText world | not readok= abort "open failure" # (console, world)= stdio world (closeok, world)= fclose (console <<< getCsv col file) world | not closeok= abort "close failure" = world where col= toInt argv.[1] filename= argv.[2] argv=getCommandLine
63 名前:37の配列版続き mailto:sage [04/02/15 12:03] getCsv :: Int File -> String getCsv num file | num<= 0 = abort "out of range" = selectCsv (num-1) (stringRead file) 0 where selectCsv :: Int String Int -> String selectCsv n s i | s.[i] == '\r' = "" | s.[i] == '\n' = "\n" +++ selectCsv (num-1) s (i+1) | s.[i] == ',' = selectCsv (n-1) s (i+1) | n == 0 = toString s.[i] +++ selectCsv n s (i+1) = selectCsv n s (i+1) stringRead :: File -> String stringRead f | sfend f = "\r" # (line,filerest) = sfreadline f = line +++ stringRead filerest
64 名前:Aransk [04/02/15 17:49] >61 1.3じゃなくて、2.1無償ダウンロード出来るの? ttp://homepage3.nifty.com/Aransk/
65 名前:デフォルトの名無しさん mailto:sage [04/02/15 18:07] Aransk 様が Clean に興味を持たれたようです。
66 名前:デフォルトの名無しさん mailto:sage [04/02/15 18:13] >>64 ここにいるのは元号が大学名の学校出身ばかりだから、 得意の英語でMLに質問したら? Cleanのメーリングリストのアーカイブ(Discussions ) www.cs.kun.nl/pipermail/clean-list/
67 名前:デフォルトの名無しさん mailto:sage [04/02/15 19:24] 明治のことかー!!
68 名前:デフォルトの名無しさん mailto:sage [04/02/15 19:35] 元禄大学
69 名前:デフォルトの名無しさん mailto:sage [04/02/15 21:00] >>66 Aranskタンには無理だとわかっていてあえてそーゆう提案してるだろ?
70 名前:デフォルトの名無しさん mailto:sage [04/02/15 22:17] Aranskタンは愛すべき糞コテになりました そろそろ萌え擬人化します
71 名前:Aransk [04/02/16 21:05] >70 >Aranskタンは愛すべき だよね?それがさぁ。 ttp://homepage3.nifty.com/Aransk/のMSGボードに いつかは、来られるのではと、「密かに」期待はして おりました。それが、な、なんと、本日7000通もの 大量、カキコがありました。大漁節!です。 お蔭様でMSG板はオシャカ!であります。(^^; mild_server_super_lights先生を存知より の方が、もし「2ちゃんねる」にも出入りされて おられたら、是非、先生にお伝え願いたいのです。 Aranskは、またのお越しをお待ち申し上げて おりますと。今度は、先生の弊HPに対する ご意見なり、ご批判なりをご自由にお書き下さい。 但し、「多くても」10通以内にね。(大笑い)
72 名前:デフォルトの名無しさん mailto:sage [04/02/16 22:08] ((;゚Д゚))ガクガクブルブル ほ、本物?
73 名前:デフォルトの名無しさん mailto:sage [04/02/16 22:11] Aranskたんの萌えエロ画像キボン
74 名前:デフォルトの名無しさん mailto:sage [04/02/17 02:59] >>66 意味分からん
75 名前:Aransk [04/02/17 18:21] >72 >((;゚Д゚))ガクガクブルブル ほ、本物? mild_server_super_lights先生って、2ちゃんねるでは 「そんなに」有名人なんでしょうか?(^^; ttp://homepage3.nifty.com/Aransk/
76 名前:デフォルトの名無しさん mailto:sage [04/02/17 21:24] いつの間にAranskだと認めたんだね.
77 名前:Aransk [04/02/18 18:23] >76 >いつの間にAranskだと認めたんだね. もう随分以前から「ヒーロー勇気」や「名無し」を 使用せず、本名で発言しております。(^^; でないと2ちゃんねるの雑誌に有名コテハンとして 掲載してくれないらしい?(大藁藁) ttp://homepage3.nifty.com/Aransk/
78 名前:デフォルトの名無しさん mailto:sage [04/02/19 18:44] Aranskは自分がなにか``特別''であると 思い込みたくてしょうがないらしい... 916 :デフォルトの名無しさん :03/12/31 09:02 >913 ム板だけではなく、上の中東情勢板でも結構暴れたらしい?(藁) ム板と中東板を往復するのは、管理人だけなのにって 西村クンが嘆いていたそうな。 ところでヤフーの年間人気サイトで2ちゃんが表彰されていた。 まずはご同慶の至りです。 でも西村くんってちょっとヤバそうな顔してるね。 あの手の顔はいったん切れると無茶苦茶、恐いか、メッタメタ オモロイ!かどちらかだな。(藁藁) >ム板と中東板を往復するのは、管理人だけなのに プッ,何言ってんの?
79 名前:デフォルトの名無しさん mailto:sage [04/02/19 18:52] >>76 ,>>78 そっとしといてやれよ。第一Cleanと関係ないぞ。
80 名前:Aransk [04/02/19 19:29] >76,78 そうだぁ!Cleanに関係ない質問をするな! (それに簡単に乗せられる奴も、問題ではある。(^^;) Javaやその他言語の無償提供環境の中で Cleanのような弱小言語がビジネスとして 成立するのか?また成立する「必要が」あるのか? それを問いたい。(^^; ttp://homepage3.nifty.com/Aransk/
81 名前:デフォルトの名無しさん mailto:sage [04/02/19 19:48] >Javaやその他言語の無償提供環境の中で >Cleanのような弱小言語がビジネスとして >成立するのか?また成立する「必要が」あるの 「○○言語に関する質問」と「○○言語のスレがビジネスとして 成立するかどうかの議論」は別々のスレでやった方がいいと思う.
82 名前:デフォルトの名無しさん mailto:sage [04/02/19 19:57] つか、それしかネタ無いんか?
83 名前:デフォルトの名無しさん mailto:sage [04/02/19 23:20] Aransk って普段どんなプログラムを作ってるの?
84 名前:デフォルトの名無しさん mailto:sage [04/02/20 04:39] >>80 最新版にこだわるけど 有料の最新版はダウンロード版とどこが違うの?
85 名前:デフォルトの名無しさん mailto:sage [04/02/20 13:11] 最新版 無料でダウンロード可能 登録も不要 ライセンスはLGPL ttp://www.cs.kun.nl/~clean/Download/main/main.htm
86 名前:Aransk [04/02/20 17:56] >82 >つか、それしかネタ無いんか? 悪い。Cleanで知ってることってこれだけなんです。(^^; >83 普段はプログラムに触っておりません。 ひたすら面白そうな新しい言語を探し、言語仕様を 読んで、DLして験すだけ。だから、公平な評価が可能なので あります。純粋の鑑定団! 現在SimkinとIoを調査中であります。 >85 えぇ!ホントですか?ビジネス・プラクティスの変更か? どうやって、開発部隊は食っていけるのだろう? ttp://homepage3.nifty.com/Aransk/
87 名前:デフォルトの名無しさん mailto:sage [04/02/21 02:54] 書き込みがあまり無いようなので ネタフリとして sky.zero.ad.jp/~zaa54437/programming/clean/CleanBook/part1/Chap1.html#sc33 の演習でも順番にといていきましょう。 1.CLEANシステムがあなたのコンピュータにインストールされていることを確かめなさい。そのシステムは、www.cs.kun.nl/~cleanからダウンロードできます。値42を印字するプログラムを書いて実行しなさい。 2.2つの引数、つまり、nとxを取る関数を書き、それらの累乗xnを計算しなさい。その引数を平方する関数を、それを使って構成しなさい。128の平方を計算するプログラムを書きなさい。 3.その引数の数字を加算する関数isum :: Int -> Intを定義しなさい。そうすると、 isum 1234 = 10 isum 0 = 0 isum 1001 = 2 isumは、非負の引数に適用されるものとする。
88 名前: mailto:sage [04/02/23 14:49] んじゃ、GUI版でも考えるかな。 今週末くらいを目途に。
89 名前:デフォルトの名無しさん mailto:sage [04/02/25 23:50] 関数型言語初心者なので素直にコンソール版で解いてみた。型指定は省略。 残りの問題も解いてみたけど、ネタ切れしそうなので投下は止めときます。 あ、5.以降の関数は全て1行で書けるね。 // 1. ///////////////////////////////// Start = 42 // 2. ///////////////////////////////// pow n 0 = 1 pow n x = n * pow n (x-1) square n = pow n 2 Start = (pow 2 10, square 128) // 3. ///////////////////////////////// isum 0 = 0 isum n = n-(n/10)*10 + isum (n/10) Start = (isum 123456789, isum(-123456789))
90 名前:42の表示GUI版 mailto:sage [04/02/27 18:38] module display42 import StdEnv, StdIO Start :: *World -> *World Start w = startIO NDI Void initial [] w where initial pst # (err,pst) = openDialog Void (Dialog "display 42" (TextControl "42" []) [WindowClose (noLS closeProcess)]) pst | err<>NoError = closeProcess pst = pst
91 名前:デフォルトの名無しさん mailto:sage [04/03/06 17:01] 他のGUI版も作ろうかと思ったが、まんまマニュアルにある。
92 名前:デフォルトの名無しさん mailto:sage [04/03/11 00:38] // 4. divable :: Int -> Bool divable n | n < 9 = False | n == 9 = True = divable (isum n) Start = (divable 6, divable 9, divable (-9)) // 定義域は正の値だけ // 5, 6 max a b = if (a > b) a b min a b = if (a < b) a b // 7, 8 MaxOfList :: [a] -> a | Ord a MaxOfList [x:xs] = foldl max x xs MinOfList :: [a] -> a | Ord a MinOfList [x:xs] = foldl min x xs // 9-12 Last :: [a] -> a Last [x:xs] = foldl (\_ b = b) x xs LastTwo :: [a] -> (a, a) LastTwo [x,y:zs] = foldl (\(_,b) c = (b,c)) (x, y) zs Reverse :: [a] -> [a] Reverse [x:xs] = foldl (\cs c = [c:cs]) [x] xs Palindrome :: [a] -> Bool | Eq a Palindrome xs = xs == Reverse xs
93 名前:デフォルトの名無しさん mailto:sage [04/03/17 00:23] sky.zero.ad.jp/~zaa54437/programming/clean/CleanBook/part1/Chap2.html#sc20 人もいないし、黙々と解いてみる。 module Chapter2 import StdEnv // 1 odd = isEven o ((+)1) // 2 next :: (Real, Real) -> (Real, Real) next (_, y) = (y, y/10.0) reachZero :: (Real, Real) -> Bool reachZero (_, y) = y == 0.0 Start = eps where (eps, _) = until reachZero next (1.0, 1.0) ワンライナーだとこんな感じか。さすがに汚い。 Start = fst (until (((==) 0.0) o snd) (\(_,y) = (y, y/10.0)) (1.0, 1.0))
94 名前:93 mailto:sage [04/03/17 00:27] // 3 (かなーり手抜き) countday :: (Int,Int,Int) (Int,Int,Int) -> Int countday now bth = absday bth - absday now absday :: (Int,Int,Int) -> Int absday (d,m,y) = (y-1)*365 + (y-1)/4 - (y-1)/100 + (y-1)/400 + sum (take (m-1) (months y)) + d months :: Int -> [Int] months y = [31, if (leap y) 29 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] leap :: Int -> Bool leap y = divisible y 4 && (not(divisible y 100) || divisible y 400) divisible :: Int Int -> Bool divisible t n = t rem n == 0 Start = countday (20,2,2004) (20,3,2004) // 4 mapfun :: [(a->b)] a -> [b] mapfun [] x = [] mapfun [f:fs] x = [f x : mapfun fs x] Start = mapfun [sum, avg, prod] [1..10]
95 名前:デフォルトの名無しさん mailto:sage [04/03/18 01:56] CleanIDEのエディタに日本語入力すると文字化けする(´・ω・`) それは別のエディタを使えば済む問題だけど、Cleanコンパイラのほうが ダメ文字(2バイト目に0x5C(「\」記号)がある文字)に対応してないのはちょっと悲しい。 しょうがないからCleanIDEに日本語を直接入力してわざと文字化けさせて、 「\」記号が出てきたら、手入力で「\」記号をもう一つ追加して問題を回避してる。 ダメ文字って、Cleanのパーザをいじらないと対応できないのかな…
96 名前:デフォルトの名無しさん mailto:sage [04/03/19 13:50] ASCII以外には全く対応してないのが現状。 UNICODE担当(?)の人は、なんか違うことやってるので期待できない。
97 名前:デフォルトの名無しさん mailto:sage [04/03/20 05:24] >>96 そうですか…日本語の扱いは少し面倒ですね。 sky.zero.ad.jp/~zaa54437/programming/clean/CleanBook/part1/Chap3.html#sc55 淡々と解いてみる。そろそろ難しくなってきたかも。この先にはAVL木の実装とか面倒臭い問題があるなぁ… // 1, 2, 4, 5 CountOccurences :: a [a] -> Int | == a CountOccurences c xs = length [x \\ x<-xs | x==c] MakeFrequenceTable :: [a] -> [(a, Int)] | Eq a MakeFrequenceTable xs = [(x, 100*CountOccurences x xs / length xs) \\ x<-removeDup xs] myflatten :: ([[a]] -> [a]) myflatten = foldr (++) [] Permutations :: [a] -> [[a]] Permutations []= [[]] Permutations [x:xs] = [zs \\ ys <- Permutations xs, zs <- interleave x ys] interleave :: a [a] -> [[a]] interleave x ys = [insertAt i x ys \\ i <- [0..length ys]] // 3. (==) :: (s,t) (s,t) -> bool | Eq s & Eq t (==) (a,b) (c,d) = a == c && b == d 右辺には2つの(==)があるが、1つめは型s、2つめは型tに対して定義された(==)である。左辺で定義した(==)は、型(s,t)に対して適用される。 この式にある3つの(==)は、すべて属する型が異なっているため別々の関数である。したがって再帰的ではない。 (==) :: [s] [s] -> bool | Eq s (==) [x:xs] [y:ys] = x==y && xs==ys // セクション3.1.2より抜粋 右辺には2つの(==)があり、1つめは型s、2つめは型[s]に対して定義された(==)である。左辺で定義した(==)は、型[s]に対して適用される。 左辺と右辺に同じ型に属する(==)がある。この2つの(==)は同じ関数である。したがって再帰的な定義である。
98 名前:デフォルトの名無しさん mailto:sage [04/04/09 16:53] Genericの世界は濃いね。
99 名前:デフォルトの名無しさん mailto:sage [04/04/10 23:45] Haskell、Clean辺りだとまだましなのかもしれないが、 関数型言語は思わぬパフォーマンス上の失策をやらかしてそうで怖い。 扱いきれない感がある。もっとクンフーを積まねば・・・。
100 名前:100 mailto:100 [04/04/16 22:32] 記念くぁwせdrftgyふじこ
101 名前:デフォルトの名無しさん mailto:sage [04/04/19 21:36] sky.zero.ad.jp/~zaa54437/programming/clean/LanguageReport20/Chap9.html これのセクション4以降が意味不明、理解不能。 気にしないほうがいいのか? ・・・にしても静かなスレだね。
102 名前:デフォルトの名無しさん mailto:sage [04/04/20 00:15] 一意型付けって同じものは同時に二回以上簡約されない って事であってる?
103 名前:デフォルトの名無しさん mailto:sage [04/04/20 16:34] 同時にという意味が分からん。
104 名前:デフォルトの名無しさん mailto:sage [04/04/20 19:30] 型一意性ってのはClean 独自の物なの?それとも最近の関数型言語の流行? Clean以外で型一意性の考え方のある言語があれば教えてください。
105 名前:デフォルトの名無しさん mailto:sage [04/04/20 21:01] ないといえばない
106 名前:デフォルトの名無しさん mailto:sage [04/04/20 21:28] 研究や論文はあったような
107 名前:デフォルトの名無しさん mailto:sage [04/05/01 14:19] まとまったのはない
108 名前:デフォルトの名無しさん mailto:sage [04/05/02 22:57] Cleanで書かれた正規表現やコード変換などの文字列処理ライブラリーはありまつか?
109 名前:デフォルトの名無しさん mailto:sage [04/05/04 17:14] 関数型言語スレでは余裕で無視されてますが、僕は気にしません。 コツコツ積み上げていきます。
110 名前:デフォルトの名無しさん mailto:sage [04/05/16 00:29] 型一意性について。 ふつうは参照透明性を確保するのに、データのコピーを作ってそいつを変更する必要があるけど、 もし変更後に変更前のデータを使わないことを保証できれば、元のデータはいらないから、わざわざコピーを作る必要もない。 つまり、データの破壊的更新を行っても参照透明性を維持できる。 ってことじゃないかと。
111 名前:デフォルトの名無しさん mailto:sage [04/05/27 12:46] 大体そだよ。
112 名前:デフォルトの名無しさん mailto:sage [04/05/27 13:06] つか、グラフを使用した説明はわかりやすいと思うけれども。
113 名前:デフォルトの名無しさん [04/07/11 04:25] せいうちん
114 名前:名無しさん@そうだ選挙に行こう mailto:sage [04/07/11 18:17] kinnikuman 2 sei?
115 名前:デフォルトの名無しさん mailto:sage [04/08/03 01:56] >>104 Mercuryという言語で使える。 www.cs.mu.oz.au/mercury #Clean好きで来てみたら寂しいスレだ(′・ω・`)。 #現在Cleanの一意性型の論文読んるけどわかったようなわからんような。
116 名前:デフォルトの名無しさん [04/08/29 15:23] Cleanで書かれたテトリスのソースはどこかにないでしょうか? 古いバージョンに付いていたそうですが、今のには無さそうなので・・
117 名前:デフォルトの名無しさん mailto:sage [04/09/15 17:55:52] if c (fwritec 'a' file) (fwritec 'b' file) は大丈夫なのに MyIf True t e = t MyIf False t e = e MyIf c (fwritec 'a' file) (fwritec 'b' file) はだめなのか。
118 名前:デフォルトの名無しさん mailto:sage [04/09/19 03:40:16] >>117 MyIfについては、一意型の*Fileオブジェクトへの参照数が2になるのがエラーの原因のはず。 このあたりに説明があったと思う:sky.zero.ad.jp/~zaa54437/programming/clean/LanguageReport21/Chap9.html ifは言語組み込みの機能だから、特別扱いだと思う。StdEnv探しても関数の定義がないし。 (_system.abcにifの定義らしき記述があるけど・・・読める人いたら解説きぼん) 言語組み込みのifに相当するMyIfは、通常の関数として書けないような気がするけど 実際のところはどうなんでしょうか>詳しい人
119 名前:デフォルトの名無しさん mailto:sage [04/09/24 18:13:14] >>117 MyIf b t e = | b = t | otherwise = e 処理系が手元にないんで試せないけど、これでもダメかね? tが評価される時はeがゴミなのでfileへの参照は1になると思うんだが。
120 名前:デフォルトの名無しさん mailto:sage [04/09/24 18:59:43] 要するにAlternativeに書けってことだな。
121 名前:デフォルトの名無しさん mailto:sage [04/09/24 23:51:36] >>119 ダメですた。 つーか、 MyIf b t e = if b t e でもダメ。
122 名前:デフォルトの名無しさん mailto:sage [04/09/25 01:17:12] MyIf b (fwritec 'a' file) (fwritec 'b' file)の時点で、fileへの参照数が2だと認識されている模様。 まあMyIfを使わず、素直にガードで分岐すれば動作するんだけどね。 ガードやcaseなら、ちゃんとAlternativeだと見なしてくれる。 WriteAorB b file | b = fwritec 'a' file = fwritec 'b' file
123 名前:デフォルトの名無しさん [04/09/26 19:08:00] なんかこの言語サンプル見ても意味不明なのがすごいです 構文が抽象化されすぎて余計わかりにくい感じがするのですが
124 名前:デフォルトの名無しさん mailto:sage [04/09/26 19:59:48] コンピュータに量はおまかせを……
125 名前:デフォルトの名無しさん mailto:sage [04/09/26 23:39:43] Haskellとあんま変わんないとおもうけど。 IOからまなきゃ
126 名前:デフォルトの名無しさん mailto:sage [04/09/28 13:06:25] >>122 分岐(if, case, ガード)が陽に見えているところでしか 一意性解析していないということか。 MyIfが使えるようにするには、自分で型に一意性注釈を 書かなければならないのだろうが、分岐のような 「いくつかの引数のうちどれか一つしか評価しない」というような ことを型レベルで表現するのは無理だから、やっぱできないのかな。
127 名前:デフォルトの名無しさん mailto:sage [04/09/29 22:43:40] んなもんLISPみたいにquoteがないと作れるわけない
128 名前:デフォルトの名無しさん mailto:sage [04/09/30 00:50:39] 一意性解析ってどうやるんだろ。ちょっと考えてみた感じだと 関数はパターンマッチングによる場合分けによって定義されるとする。 その場合の単純な一意性解析の戦略を考えてみると関数の定義が以下の形 f x = g1 a1 f x = g2 a2 ... (x, a1, a2, ... は引数の列) だった場合、最外簡略を仮定すると引数は2つのグループに分けられる(両方に属するものもあるか)。 つまりどの場合分けを採用するかを決める際に評価され得る引数と、その後に評価されうる引数である。 前者は引数で変数以外のパターンが使われているもの、後者は右辺で使われているものである。 前者の集合をP_fとし、後者の集合をS_f_1, S_f_2, ...とする。(fは自明なときは省略) 例えば MyIf True t e = t MyIf False t e = e の場合P_MyIf = {1番目の引数}, S_MyIf_1 = {2番目の引数}, S_MyIf_2 = {3番目の引数}となる。 このときある変数が一意である条件は それがPに高々1回だけ現れ、Sには現れない。 それが各S_iについて高々1回だけ現れ、Pには現れない。 のどちらかとなる。 これで単純な場合は大丈夫だけど MyIf c t e = if c t e とするとP = {}, S_1 = {c, t, e}となって上手く行かない。 そのためには f x = g (h1 a1) (h2 a2) ... という形を考えてgやh1などのP, Sも考慮に入れればOK? それで十分なのか、それができるのかはもうちょっと考えてみないとわからない。 おしえてエライ人。
129 名前:デフォルトの名無しさん mailto:sage [04/10/26 02:32:30] UNIX環境でつかってる人いる?
130 名前:デフォルトの名無しさん mailto:sage [04/10/26 21:40:24] バイナリ版を試してみようとしたけど、xviewがないと動かない……。 面倒なのでその先はまだやってないっす。 FreeBSD で動かしたくてソースコードもダウンロードしたけど、アセンブリばっ かしなのでかなり無理っぽい。っていうかどういう風にビルドすればいいのか ぜんぜんわからない。
131 名前:デフォルトの名無しさん mailto:sage [04/11/05 13:48:35] そんじゃ最初っから話にならないじゃん(w
132 名前:デフォルトの名無しさん mailto:sage [04/11/05 18:50:51] 開発環境込みの環境だからねえ。 GUI な開発環境なし版が欲しい。 ただ、普通の Linux とか Solaris なら動くんじゃないの?
133 名前:デフォルトの名無しさん mailto:sage [04/11/10 13:02:17] コンソールでやるにはどうしたら良いんだ?ってのがMLで話題になってたな、随分前
134 名前:デフォルトの名無しさん [04/11/22 20:48:55] さすがにこれを仕事で使う勇気のある奴はまだ日本にはいないだろうな
135 名前:デフォルトの名無しさん mailto:sage [04/11/23 01:26:28] 一応開発元は実用言語目指してるんだけどねぇ。 今開発って続いてるの?
136 名前:デフォルトの名無しさん mailto:sage [04/11/24 10:42:39] 開発というより研究は続いている
137 名前:デフォルトの名無しさん [04/12/15 20:43:51] 下のがエラーになる理由がわからん Length :: [a] -> Int Length = foldr (¥x -> (+) 1) 0
138 名前:デフォルトの名無しさん mailto:sage [04/12/15 23:30:00] 型が違うよー Lengthは引数を持たず(アリティ0)、リスト[a]をIntに変換する関数を返すので Length :: ([a] -> Int) でたぶん通る。
139 名前:デフォルトの名無しさん [04/12/22 21:13:21] >>138 おおサンクス 型が違ってたのか。Lengthの定義がおかしいのかと思ってたよ。 最近関数型言語の勉強はじめたんだが、楽しすぎるな。 「プログラミング言語は思考の増幅器である」って昔誰かが言ってたが まさにそんな感じ。脳汁出まくりですよ
140 名前:デフォルトの名無しさん mailto:sage [05/01/21 19:21:00 ] 新バージョンが出る予感
141 名前:デフォルトの名無しさん mailto:sage [05/03/15 21:08:05 ] www.cs.ru.nl/~clean/Recent_Latest_News/body_recent_latest_news.html によると、一昨年の10月31日の 2.1.0 から更新されてない様だが、新しいのあるの?
142 名前:デフォルトの名無しさん mailto:sage [2005/05/06(金) 16:08:55 ] Clean I/O と Haskel monadic I/Oの違いを教えてください。
143 名前:デフォルトの名無しさん [2005/05/14(土) 00:12:25 ] 唐揚げ
144 名前:デフォルトの名無しさん [2005/05/14(土) 00:12:59 ] 唐揚げ
145 名前:デフォルトの名無しさん mailto:sage [2005/07/16(土) 14:20:22 ] 新バージョン出てるよ
146 名前: [2005/07/18(月) 21:05:13 ] May 31, 2005 Clean 2.1.1 is released for Windows, MacOS X, Linux, and Solaris. This release contains bug fixes and new features, to wit: + Libraries for Windows: GAST, GECs, Hilde, Parser + Foreign exports + Improved redirected standard input/output + Let in comprehensions + Code generator optimisations
147 名前:デフォルトの名無しさん mailto:sage [2005/07/19(火) 08:33:13 ] ここもdylanスレぐらい寂れてんな Cleanが話題にならない理由として考えられるのは 基本概念が複雑なことだな 異質すぎて何が効率よいとかが判断できない
148 名前:デフォルトの名無しさん mailto:sage [2005/07/19(火) 12:46:18 ] 複雑じゃないよ、異質ではあるが