1 名前:デフォルトの名無しさん [04/02/10 22:16] Haskellの公式HP www.haskell.org/ 日本語サイト www.sampou.org/cgi-bin/haskell.cgi www.teu.ac.jp/kougi/koshida/Prog6/index.html 過去ログ、関連スレは>>2-5
91 名前:デフォルトの名無しさん mailto:sage [04/03/31 02:56] >>90 @ Mac OS X 10.3 --- Hello.hs module Main where import Graphics.UI.WX main :: IO () main = start hello hello :: IO () hello = do f <- frame [text := "Hello world!"] quit <- button f [text := "Quit", on command := close f] set f [layout := widget quit] --- $ ghc -package wx -o hello Hello.hs で、helloのサイズが7M強。
92 名前:デフォルトの名無しさん mailto:sage [04/03/31 17:53] stripして3M弱だな。
93 名前:デフォルトの名無しさん mailto:sage [04/04/03 19:31] そりゃすげえな
94 名前:デフォルトの名無しさん [04/04/03 19:37] よくしんねぇけど、 ツールキット全部そんなかに入ってんじゃないの? だったら仕方ねぇと思うけど。 外出しには出来ねぇのかな?
95 名前:デフォルトの名無しさん mailto:sage [04/04/07 21:00] GHC を ports の導入されていない FreeBSD に導入したいんだが どうすればいいのだろう?
96 名前:デフォルトの名無しさん mailto:sage [04/04/07 21:11] make install
97 名前:デフォルトの名無しさん mailto:sage [04/04/07 21:13] a) portsを入れてmake install b) packageを持ってきてpkg_add
98 名前:デフォルトの名無しさん mailto:sage [04/04/07 21:47] みんなまずインタプリタで開発して、 安定してきてリリースする間際にコンパイラに移行するの? インタプリタで正常動作してるけど、コンパイラではうまく動かないってこと多い? Haskellってコンパイル撃遅い(というか長い)ッてきいたけどマジ?
99 名前:デフォルトの名無しさん mailto:sage [04/04/07 22:07] >>96 GHC のコンパイルには GHC バイナリが必要です >>97 ports や package は教育上入れてもらえない学生さんなんですよ
100 名前:デフォルトの名無しさん mailto:sage [04/04/08 14:25] >>99 FreeBSD の ftp サーバの ports/distfiles に ghc-<version>-i386-unknown-freebsd-boot.tar.bz2 があるからこれを展開して, ghc のコンパイル時にこの展開先にある ghc を指定してコンパイルすればok. ちなみに ports も同じことをしている(処理が自動化されてるだけ). >>98 コンパイルはたしかに激遅. プログラマが楽するためにコンピュータに頑張ってもらってる感があるね.
101 名前:デフォルトの名無しさん mailto:sage [04/04/08 15:40] マニュアル印刷したいんだけど、1枚のHTMLにしてくんないかな。印刷しづらい。 www.sampou.org/haskell/report-revised-j/
102 名前:デフォルトの名無しさん mailto:sage [04/04/08 15:53] >>101 そんなのちょこっとスクリプト走らせれば楽勝だろ?
103 名前:デフォルトの名無しさん mailto:sage [04/04/08 19:12] >>98 > みんなまずインタプリタで開発して、 おれはそうしてる。GHCiでときどきHugsでチェック。 > インタプリタで正常動作してるけど、コンパイラではうまく動かないってこと多い? そんな経験は無い。
104 名前:デフォルトの名無しさん mailto:sage [04/04/08 20:10] >>100 ありがとう 試してみてうまくいったらまた報告します
105 名前:デフォルトの名無しさん mailto:sage [04/04/08 22:55] NHCの方が良質のコードを生成するって聞いたことあるけど、 もう今は昔の話なのかな?
106 名前:デフォルトの名無しさん mailto:sage [04/04/08 23:14] このスレでも聞いてみる。 Scheme,OCaml,Haskell,Clean、覚えて「損しない」「一番得」 な言語はどれ。ぶっちゃけ周辺ライブラリーが充実してるのどれ。
107 名前:デフォルトの名無しさん mailto:sage [04/04/08 23:20] >>106 得するのは、全部覚えること。 得しないのは、ひとつしか覚えないこと。
108 名前:デフォルトの名無しさん mailto:sage [04/04/08 23:54] >>106 若いなら全部やれ
109 名前:デフォルトの名無しさん mailto:sage [04/04/09 00:27] >>105 コンパイルは速いけどね。 Hugs/GHC共通のHierachical moduleの多くが使えないのが痛すぎる。 今試しに main = interact id をnhc98(FreeBSD-CURRENT, from ports)でコンパイルしたらbus error....
110 名前:デフォルトの名無しさん mailto:sage [04/04/09 00:34] r抜けてたHierarchical
111 名前:デフォルトの名無しさん mailto:sage [04/04/12 16:54] >>106 統計やるならRが結構ナイスだ。
112 名前:デフォルトの名無しさん mailto:sage [04/04/12 22:37] >>110-111 Rスレはこっちに↓あ〜る = 統計解析フリーソフト R = science2.2ch.net/test/read.cgi/math/1062650510/
113 名前:デフォルトの名無しさん [04/04/14 12:02] 工科大の www.teu.ac.jp/kougi/koshida/Prog6/Text08/index.html の問題1 ですが、 > sigma :: (Int -> Int) -> (Int -> Int) > 上記の関数sigmaを,1) ラムダ記法を使って,2) 関数の部分適用を使って,定義せよ.ただし,sigma fは,自然数nに対して > f 0 + f 1 + ... + f n > を計算する関数とする. lambda 版 は以下のように作成しました。 sigmaLambda :: (Int -> Int) -> (Int -> Int) sigmaLambda f = \x -> sum [f i | i <- [0 .. x]] で、部分適用版ですが、 sigma :: (Int -> Int) -> Int -> Int sigma f 0 = f 0 sigma f n = sigma f (n-1) + f n で、いいんでしょうか。 題意のような関数を返すのですが、部分適用という感じがしません。 出題者がどのような回答を期待しているか知りたいのですが。 (あと、なんか lambda版を、内包表現とか使ってて、出題意図に沿ってないような気がするのです)
114 名前:デフォルトの名無しさん mailto:sage [04/04/14 13:37] >>113 > 題意のような関数を返すのですが、部分適用という感じがしません。 addNum'' n m = n + m に部分適用を使ったといっているのだからそれでいいだろう。 sigmaPartial f n = sum [f m | m <- [0..n]] > (あと、なんか lambda版を、内包表現とか使ってて、出題意図に沿ってないような気がするのです) それなら使わなければいいのでは? sigmaLambda = \f n -> if n == 0 then f 0 else sigmaLambda f (n - 1) + f n
115 名前:デフォルトの名無しさん [04/04/14 14:00] sigma,sigma' :: (Int -> Int) -> (Int -> Int) sigma f = \ n -> foldl (\ s i -> s + f i) 0 [0..n] sigma' f = let iter s x = if x < 0 then s else iter (s+f x) (x-1) in iter 0
116 名前:デフォルトの名無しさん mailto:sage -- "let" sucks! [04/04/14 14:37] import Control.Monad.Fix (fix) -- fix f = f (fix x) sigma = flip fix 0 $ \s t f n -> if n < 0 then t else s (t + f n) f (n - 1)
117 名前:デフォルトの名無しさん mailto:sage [04/04/14 14:38] fix f = f (fix f)ね。
118 名前:デフォルトの名無しさん mailto:sage [04/04/19 19:21] Haskell に例外処理の機構はあるの?
119 名前:デフォルトの名無しさん mailto:sage [04/04/19 19:37] ある。 Haskell98でもIOモナドからthrowできる例外(IOError)があるし、 最近のGHC、Hugsでは普通の関数からも例外(Exception)をthrowできる。 catchはIOモナドの中でおこなう。 参照: Control.Exception
120 名前:デフォルトの名無しさん mailto:sage [04/04/20 23:50] Haskell勉強中なんですけど、 「モナドは継続渡しを提供する」という大雑把な理解でいいでしょうか? ・・・違うかな?
121 名前:デフォルトの名無しさん mailto:sage [04/04/24 22:23] なんで Prelude で (!!) は Integer じゃなくて Int で定義されているの?
122 名前:デフォルトの名無しさん mailto:sage [04/04/25 02:07] >>121 実際問題それ以上使うことはないからだろう。 Haskell 98 Report によると maxBound::Int は少なくとも 2^29-1。 (!!)のインデックスは0-originだから、長さ2^29のリストまで扱える。 これ以上の長さのリストを使う場面は……。
123 名前:デフォルトの名無しさん mailto:sage [04/04/25 12:41] 円周率の世界記録に朝鮮したい人はどうすれば?
124 名前:デフォルトの名無しさん mailto:sage [04/04/25 18:11] >>123 自分で最低義すれ。
125 名前:デフォルトの名無しさん mailto:sage [04/04/26 14:54] >>123 円周率は全桁保持していなくても次を計算できたはず。 >>124 アドレスの制限があるから多くの計算機と既存の処理系では 再定義しても無駄。
126 名前:デフォルトの名無しさん mailto:sage [04/04/26 23:48] >>120 こんなん見つけた ttp://www.jaist.ac.jp/~kiyoshiy/writing/wadler_essenceoffunctionalprogramming.pdf ここの資料はjaistのゼミ資料? 他にはHaskellDBが自分的に興味深い. TorqueとかHibernateなんて目じゃない. Haskellだけど…
127 名前:デフォルトの名無しさん mailto:sage [04/04/27 14:27] >>121 haskell@でもちょうど議論されてるね。 上ででたものの他に、こういう意見があった。 Integer派: * Lazyにcreated/destroyedなデータならアドレスの制限を 受けずに大きいものを利用できるはずだ。 * Intは一般的なケースへの最適化であり、 "Premature optimization is the root of all evil." Integerには反対派: Integerにするのは、巨大なリストという特殊な状況への最適化である。 (Integral b) => がよろしい。
128 名前:デフォルトの名無しさん mailto:sage [04/04/27 18:46] Hanatani さんすげーな。 オレもああいう凄腕Haskellerになりたい。
129 名前:デフォルトの名無しさん mailto:sage [04/04/28 12:39] >>128 なんか凄いもの作ったの?
130 名前:デフォルトの名無しさん mailto:sage [04/05/05 01:32] しばらく見ないうちに「関数型言語」のスレがひどいことになってるな。
131 名前:デフォルトの名無しさん mailto:sage [04/05/05 02:34] >>130 Aranskさま〜〜早くこのスレにも御光臨してくださいませ〜〜 Aranskさま〜〜早くこのスレにも御光臨してくださいませ〜〜 Aranskさま〜〜早くこのスレにも御光臨してくださいませ〜〜 Aranskさま〜〜早くこのスレにも御光臨してくださいませ〜〜 Aranskさま〜〜早くこのスレにも御光臨してくださいませ〜〜
132 名前:デフォルトの名無しさん [04/06/27 22:34] たま〜にはあげてみる Haskell Support for the Eclipse IDE eclipsefp.sourceforge.net/ 0.3.0はEclipse最新var.(M9〜正式版)に対応しているぞ。
133 名前:デフォルトの名無しさん [04/06/30 18:10] おお. しかしスクリーンショットがほしい所かも. 後でインスコしてみるか… Fudgets www.cs.chalmers.se/Cs/Research/Functional/Fudgets/ 触ってる人いる? これから弄ってみようと思うのだけど. featureのページに, Declarative flavour. While it is possible to enable GUI programming in a functional language by providing an interface to an imperative GUI toolkit and, in effect, using an imperative sub-language within the functional language, Fudgets provide a declarative style of programming also for the construction of GUIs. とある. なんだか期待大.
134 名前:デフォルトの名無しさん mailto:sage [04/06/30 20:48] >>133 使えたら是非おしえてくれ。 Declarative GUI toolkitって数年前から どれもメンテが止まってるっぽいんだよな。 最近ではwxHaskellがスタンダードになりつつあるけど、 やっぱりHaskellならDeclarativeにやりたい。
135 名前:デフォルトの名無しさん [04/07/17 08:42] Haskell Marathon www.sampou.org/cgi-bin/cahier.cgi
136 名前:デフォルトの名無しさん mailto:sage [04/07/18 09:25] Haskell で Marathon を実装するのかとオモタ。
137 名前:デフォルトの名無しさん mailto:sage [04/07/26 01:14] マラソン参加してみようかな。入門ページ読んだくらいで準備はよいだろうか
138 名前:デフォルトの名無しさん mailto:sage [04/07/29 09:20] マラソン直前に台風直撃の悪寒
139 名前:デフォルトの名無しさん mailto:sage [04/08/09 23:33] LL WeekendでのHaskellに対する聴衆の感想は「Haskellのコードはよくわからない」というのが多かったみたいでつね
140 名前:デフォルトの名無しさん mailto:sage [04/08/10 01:19] 5分だか7分だかでわかれという方が無理があるという話がある。発表者陣はよ くやったと思うよ。 「わたしはもうループも書けなくなってしまって……」というのにワロタ。
141 名前:デフォルトの名無しさん mailto:sage [04/08/11 02:33] LL侍はHaskellを斬ったの?
142 名前:デフォルトの名無しさん mailto:sage [04/08/12 01:39] >>141 「Hello, worldもブラックボックス斬り」されてました。
143 名前:デフォルトの名無しさん mailto:sage [04/08/12 13:41] おれはhaskell haskell haskellだ 関数型の haskellだ 短くて 簡潔で 理解しやすいコードを書けるぜ って、言うじゃない だけど 難しくて monad が理解できませんから 残念! 「Hello worldさえブラックボックス」 斬り
144 名前:デフォルトの名無しさん [04/08/12 20:55] むしろHello, worldだから難しいような気がする
145 名前:デフォルトの名無しさん mailto:sage [04/08/12 21:58] main = do putStr "Hello, World!" で済むから、コード自体は特に難しくは見えない。 ただ、入門者が Hello, World に到達するまでの過程が難しいんだよね……。
146 名前:デフォルトの名無しさん mailto:sage [04/08/12 22:00] >>145 そのdoはいるの?
147 名前:145 mailto:sage [04/08/12 23:13] この場合はいらないけど、先々のことを考えたら入れた方がいいかな、とちょっ とだけ思ったのです。 main = do str <- getLine putStr str みたいに。
148 名前:デフォルトの名無しさん mailto:sage [04/08/13 07:57] いきなりIOから入るのがまずい。 fact→fib→qsortあたりから入れば 得体の知れないモナドをとりあえず回避できる。
149 名前:デフォルトの名無しさん mailto:sage [04/08/13 16:25] 再帰とリスト処理しかできないHaskellちゃん がんばってもせいぜい二分木
150 名前:デフォルトの名無しさん mailto:sage [04/08/13 17:34] 膣門です。 "Hindley-Milner" って、何て読むんでつか?
151 名前:デフォルトの名無しさん mailto:sage [04/08/14 01:49] 誰か「モナドだけで書く Haskell プログラミング」を書いてくれい
152 名前:デフォルトの名無しさん mailto:sage [04/08/15 13:29] >>151 Cでも使ってれば?
153 名前:デフォルトの名無しさん mailto:sage [04/08/15 21:34] そういやHaskellのコンパイルはC経由なんだよね
154 名前:デフォルトの名無しさん mailto:sage [04/08/15 22:04] 末尾再帰の保証とかC経由じゃ無理だろ
155 名前:デフォルトの名無しさん mailto:sage [04/08/15 22:21] GHCで最適化オプション付けるとCのコード吐くんじゃなかったっけ?
156 名前:デフォルトの名無しさん mailto:sage [04/08/16 02:59] >>150 メール出して聞いたら? ttp://www-maths.swan.ac.uk/staff/jrh/ J. Roger Hindley ttp://www.cl.cam.ac.uk/~rm135/ Robin Milner
157 名前:デフォルトの名無しさん mailto:sage [04/08/16 05:57] >>156 もちつけ
158 名前:デフォルトの名無しさん mailto:sage [04/08/16 06:12] >>154 そりゃ当然、Cにする前にプログラム変換するだろ それに大抵のCCには-foptimize-sibling-callsみたいなのがあるだろうし
159 名前:デフォルトの名無しさん mailto:sage [04/08/16 08:24] レベル低いな。っつってもHaskellのことは何も知らないのであれなんだが。。。 ユーザーレベルで言語をマスターするっつーのは、ある処理系を骨までしゃぶり 尽くすことだろ。リスパーのように自作こそ最強だが、複雑な言語ではそこまでは まあ、なかなか出来るもんでもないしな。 GHCのことについて詳しい奴がいないのを見ると、誰もHaskellでまともに プログラム書こうとしてないように見える。結局おまいらは、話のネタに 関数型言語を選んでるだけなんだよ。
160 名前:デフォルトの名無しさん mailto:sage [04/08/16 23:20] ↑Aransk?
161 名前:デフォルトの名無しさん mailto:sage [04/08/17 00:31] Simon Peyton Jones は C-- もやってるのに、自前でオプティマイズ出来ないってのは意外。
162 名前:デフォルトの名無しさん mailto:sage [04/08/17 00:50] >160 Aranskはいちゃもん言うだけでプログラムすら書かんだろ?
163 名前:デフォルトの名無しさん mailto:sage [04/08/18 12:47] wxhaskellについてですが、 サンプルプログラムのBouncingBalls.hsでセグメンテーションフォールトが 起きます。(wxhaskell.sourceforge.net/quickstart.html ) プログラムを起動し、'p'などのアルファベットを入力することで生じます。 そこで小さなプログラムを作って試してみたのですが、 やはり同様な現象が起ります。 $ cat test.hs import Graphics.UI.WX main :: IO () main = start test test :: IO () test = do f <- frame [] p <- panel f [] set f [layout := widget p] set p [on(charKey 'a') := print "test ok"] $ ghc -package wx test.hs -o test $ ./test (ここでキーボードの'a'を入力) セグメンテーション違反です 環境 wxhaskellのバージョンは0.7 wxGTKのバージョンは2.4.2 OSはlinux 他の環境でもこのバグが再現するでしょうか。
164 名前:デフォルトの名無しさん mailto:sage [04/08/19 17:20] >>163 特に問題発生せず 環境 wxHaskell 0.8 wxWidget 2.5.2 MacOS X 10.3 $ ghc -package wx test.hs -o test $ /usr/local/wxhaskell/bin/macos-app -v test できたtestをFinderからダブルクリックで起動 真っ白いパネルが出てくる 'a' 押すと「コンソール」に "test ok" とりあえずバージョンアップしてみれば
165 名前:デフォルトの名無しさん mailto:sage [04/08/22 09:05] wxHaskellを0.8にバージョンアップしたら問題は解決しました。 どうもありがとうございます。
166 名前:デフォルトの名無しさん mailto:sage [04/08/22 09:36] このような関数はどう書けばいいんでしょうか? f (+) [1 2 3] [4 5 6] => [5 7 9]
167 名前:デフォルトの名無しさん mailto:sage [04/08/22 11:30] f g (x:xs) (y:ys) = (g x y) : f g xs ys
168 名前:デフォルトの名無しさん mailto:sage [04/08/22 11:41] f g xs ys = [g x y | (x, y) <- zip xs ys]
169 名前:デフォルトの名無しさん [04/08/22 11:55] これを拡張したn引数(n階?)の関数とn個のリストをとる 関数はどう書くのがいいでしょう。 f n g [x11, x12, ...] [x21, x22, ...] ... [xn1, xn2, ...] => [(g x11 x21 ... xn1), (g x12 x22 ... xn2), ...] みたいな。lispのmapってこんな感じですよね。あちらは 関数のarityがわかるからnは不要ですけど。
170 名前:デフォルトの名無しさん mailto:sage [04/08/22 12:19] f g = map (hoge g) $ zip Haskellはよく知らんので、hogeをどうやって書くのか調べてもよく分からん。
171 名前:デフォルトの名無しさん mailto:sage [04/08/22 16:24] 引数の数が可変ってhaskellでは書けないような気が。 何か方法あったっけ?
172 名前:デフォルトの名無しさん mailto:sage [04/08/22 16:45] >>166 zipWith (+) [1, 2, 3] [4, 5, 6]
173 名前:デフォルトの名無しさん mailto:sage [04/08/22 17:19] >>171 別に可変個の引数は必要ない。 1引数の関数のリストと引数のリストを受け取って適用して返す演算子をつくればOK。 演算子をxとすると [f, f, f] x [x11, x12, x13] x [x21, x22, x23] とか。Haskellの細かい文法知らんのでこう書けるかどうかは知らないけど。
174 名前:デフォルトの名無しさん mailto:sage [04/08/22 17:48] どういう型になるんだ?
175 名前:デフォルトの名無しさん mailto:sage [04/08/22 17:53] map sum $ transpose [[1,2,3],[4,5,6],[7,8,9]] => [12,15,18] こんなもんでどうでしょうか。
176 名前:デフォルトの名無しさん [04/08/22 20:04] >>174 [a->b]->[a]->[b]かな?
177 名前:デフォルトの名無しさん mailto:sage [04/08/22 20:10] zipWith ($)
178 名前:デフォルトの名無しさん [04/08/22 20:54] Prelude> (zipWith ($)) (map (+) [1,2,3]) [4,5,6] [5,7,9] ナルホド。
179 名前:デフォルトの名無しさん [04/08/23 11:43] 只の関数適用(f x)と(f $ x)って何か違うところあるの? それとも( )じゃワケがわからないから($)と書けるように 目に見える演算子として用意されているだけ?
180 名前:デフォルトの名無しさん mailto:sage [04/08/23 12:19] $ は関数合成では?
181 名前:145 mailto:sage [04/08/23 12:35] 関数合成は . でしょ。 >>179 何も代わらない。関数適用のための演算子だから。 本来の利用法は >>178 みたいなものなのかな(個々の要素にそれぞれ適用する ためには、関数適用の演算子があると便利)。 f $ g x と書くと、演算子の優先度の関係上 f(g x) と同じことになるので便 利、ついでに結合性の関係で f $ g $ h x とか書ける、というのが個人的に は嬉しい。カッコの省略にも使える。 関数合成はあくまで関数の合成の演算子なので、 f . g . h x とは書けない。 (f . g . h) x なら書けるけど。
182 名前:デフォルトの名無しさん mailto:sage [04/08/23 16:17] 可変個数の zipWith については、 Functional Pearl "Do we need dependent types?" Daniel Fridlender and Mia Indrika, 2000 J. Functional Programming, vol. 10, July. ttp://www.cs.chalmers.se/~indrika/publication.html に載っているので興味があるひとは読んでみるべし。
183 名前:デフォルトの名無しさん mailto:sage [04/08/24 12:40] >>171-181 > 只の関数適用(f x)と(f $ x)って何か違うところあるの? ある。$はただの関数だから、引数の型がそこで固定される。 f :: a -> (forall b. b -> b) -> a f x g = g x とすると、f 0 id はOKだが、f 0 $ id はだめ。 ST Monadなんかをつかっていると結構引っかかる。
184 名前:デフォルトの名無しさん [04/08/24 14:37] -- zipWithN infixl 2 <$> infixl 1 <-> (<$>) = map (<->) = zipWith ($) -- 例 -- (\x y z -> x + y + z) <$> [3,4] <-> [5,6] <-> [7,8] ---------------------------- -- 可変引数 ncat :: NCat b => b ncat = ncat' id class NCat a where ncat' :: (String -> String) -> a instance NCat String where ncat' f = f "" instance NCat b => NCat (Char -> b) where ncat' f x = ncat' (f . (x:)) -- 例 -- ncat 'a' 'b' 'c' # >>183 の171は179の間違い。
185 名前:デフォルトの名無しさん mailto:sage [04/08/24 14:38] >>184 型指定が要った。 ncat 'a' 'b' 'c' :: String
186 名前:デフォルトの名無しさん mailto:sage [04/08/24 20:08] 携帯から読むと AA 判定されててワラタ >>183-185
187 名前:デフォルトの名無しさん mailto:sage [04/08/26 20:44] AA的プログラミング
188 名前:デフォルトの名無しさん mailto:sage [04/08/26 20:54] (--#) とか (*^-^*) とか?
189 名前:デフォルトの名無しさん mailto:sage [04/08/30 23:20] Categories for the Working Mathematician の訳書ってなんていうタイトルでつか?
190 名前:デフォルトの名無しさん mailto:sage [04/08/30 23:27] スマソ。 「そのうち出る」 = 「そのうち出版される」という意味か。 「テキストの候補に挙がる」ではなく。
191 名前:デフォルトの名無しさん mailto:sage [04/08/31 00:44] 誤爆にも程があります