1 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 16:41:29 ] haskell.org www.haskell.org/ 日本語サイト www.sampou.org/cgi-bin/haskell.cgi www.shido.info/hs/ 過去ログ 関数型プログラミング言語Haskell Part1 pc.2ch.net/tech/kako/996/996131288.html Part2 pc2.2ch.net/test/read.cgi/tech/1013846140/ Part3 pc8.2ch.net/test/read.cgi/tech/1076418993/ Part4 pc8.2ch.net/test/read.cgi/tech/1140717775/ Part5 pc8.2ch.net/test/read.cgi/tech/1149263630/ Part6 pc11.2ch.net/test/read.cgi/tech/1162902266/ Part7 pc11.2ch.net/test/read.cgi/tech/1174211797/ Part8 pc11.2ch.net/test/read.cgi/tech/1193743693/ ・2chの仕様により、行頭の半角スペースは表示されません。 コードをインデントしたいときは、代わりに または全角スペースを使うことができます。
231 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:00:44 ] (\y f -> f (y f)) (\y f -> f (y f)) (\y f -> f (y f)) (\y f -> f (y f)) ...
232 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:16:56 ] >>224 ... f ... where f n = if n == 1 then 1 else n * f (n-1) 局所的な関数定義で代わりになるんじゃないの、というのはダメかな
233 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 16:01:17 ] >>232 に同意
234 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 16:19:36 ] 名前が付いてるからダメ
235 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 16:37:58 ] ... (f where f n = if n == 1 then 1 else n * f (n-1)) ... こうかー
236 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 17:21:15 ] >>235 whereが作るのは式じゃなくて節だから使える場所が決まってる(定義の後とかcase選択肢の後とか) ... (let f n = if n == 1 then 1 else n * f (n-1)) in f) ... ならおk
237 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 17:22:54 ] 閉括弧が一個多かった ... (let f n = if n == 1 then 1 else n * f (n-1) in f) ...
238 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 21:46:25 ] The Haskell School of Expressionで勉強してます。 この本の解答集のようなもの、ネットには無いでしょうか。 www.elbeno.com/haskell_soe_blog/ ↑このページは参照してますけど、11章までなので、全部が まとまったのがあると嬉しいです。
239 名前:デフォルトの名無しさん [2008/06/16(月) 14:44:56 ] ポイントフリースタイルについて質問なんですが、 Haskellでは原理的にどんな関数でもポイントフリースタイルに 変形可能なのでしょうか。
240 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 15:00:34 ] うん
241 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 18:48:23 ] >>239 Sコンビネータとかもポイントフリーに出来るんだっけか?
242 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 18:52:01 ] どの範囲の関数まで使用を認めるかによるな >>241 Control.Monad.ap :: (Monad m) => m (a -> b) -> m a -> m b を(->) rモナドについて使えば、Sコンビネータそのもの
243 名前:デフォルトの名無しさん [2008/06/17(火) 22:58:00 ] ポイントフリーのポイントって何? 何が自由なの?
244 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 23:28:00 ] ポイント = initial objectからのarrow ポイントフリースタイル = ポイントを使わない関数定義
245 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 00:11:23 ] (Monad m) => m (a -> b) -> m a -> m b これって未だによくわからないけど 手計算できそうな実例ないですか?
246 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 00:28:46 ] あんまり意味ないけど↓こんなのとか? f :: Monad m => m (a -> b) -> m a -> m b f mg mx = do { g <- mg; x <- mx; return $ g x } test1 = f Nothing (Just 1) test2 = f (Just succ) (Just 2) test3 = f (Just id) Nothing test4 = f [] [] test5 = f [id] [5] test6 = f [id, succ, (* 2)] [6, 9]
247 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 09:12:38 ] GHC 6.8.3リリース
248 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 11:53:17 ] ナイス
249 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 14:40:13 ] >>244 initial object(始対象)じゃなくて terminal object(始対象)だお。 集合の圏で terminal object からの arrow というと一点集合に相当する。 集合の圏では任意の一点集合 x に対して f x = g x ならば f = g 「point(一点集合)を使わずに関数が等しいことを表現できる」=>「ポイントフリー」ということだと思う。
250 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 18:25:28 ] >>249 失礼、書き間違えた。 terminal object(終対象)だな。
251 名前:249 mailto:sage [2008/06/18(水) 18:26:24 ] × terminal object(始対象) ○ terminal object(終対象) だった。
252 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 11:33:25 ] 俺やべぇ 気がついたらポイントフリースタイルで5行も書いてたぜ これはもはや関数型スパゲッティだな
253 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 12:48:07 ] 任意のλ式はSKコンビネータで書き換えられるとか言うのを見て 実際に適当なλ式で変換してみたら出てきた式はとても読める 代物ではなかったのを思い出した
254 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 15:00:42 ] ありゃ一種の難読化だよな
255 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 18:06:18 ] >>253 SKコンビネータも、名前付きにできると若干読みやすそうだけど。 っていうか、それが出来たら、どんな高級言語とも変らんという話になって、逆に面白さがないか。
256 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 19:22:12 ] >>255 そこでunlambdaですよ!
257 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 00:27:42 ] >>255 つ super combinator
258 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 17:45:00 ] 以下の関数fをもっと簡単にする方法ありませんか? f [] = [] f (_:[]) = [] f (x:xs) = (x, head xs) : f xs
259 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 17:52:53 ] 簡単に、というより再帰を使わずにできませんか?
260 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 18:05:14 ] f xs = zip xs (tail xs)
261 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 18:15:27 ] f xs = zip xs (drop 1l xs)
262 名前:261 mailto:sage [2008/06/23(月) 19:03:55 ] すまん。tail の l を残してしまった。 f xs = zip xs (drop 1 xs)
263 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 19:21:38 ] zip [] ⊥ = [] らしいから>>260 と>>261 は等価かな こういうのを意識しないといけない場面だと非正格性が気持ち悪い
264 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 00:09:28 ] >>263 ⊥って勃起してるのw?
265 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 01:03:13 ] いやむしろ tail で書けて気持ちいいだろ。
266 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 06:18:25 ] >>265 でも zip (tail xs) xs と zip (drop 1 xs) xs は等価じゃない つまり、zipでは第一引数が先に評価されるということを覚えていないといけない分、ややこしい (厳密には評価順の問題じゃなくて「zipは第一引数について正格で第二引数について非正格」ということだけど)
267 名前:デフォルトの名無しさん [2008/06/24(火) 07:48:57 ] >>266 どういうこと? 例えば f (x1 : x2 : x3 : xs) -> x1 + x3 だったら、引数のリストの最初の要素と3番目の要素について正格ってこと?
268 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 08:32:09 ] >>267 そういうつもりで「正格」という言葉を使った
269 名前:初心者修業中 mailto:sage [2008/06/24(火) 09:53:02 ] 関数結合の(.)って優先順位が高いので、 どうしても括弧が増えて見ぐさい気が…。 こんなのがあったら便利だと思うんですけど、 ↓ infixr 1 $. ($.)=(.) こんな感じ ↓ sigma = tail $. scanl (+) 0 標準ではなさそうなんですが、 やっぱ、問題ありですかね?
270 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 09:55:22 ] 慣れの問題
271 名前:初心者修業中 mailto:sage [2008/06/24(火) 10:13:14 ] ああ、勘違いしてました。 関数の優先順位はどの演算子よりも上ですね。 これで問題ないのか ↓ sigma = tail . scanl (+) 0 >>270 レスありがとうございます。 早く慣れたいです。 まだ、頭で考えないとよくわからない。 (考えてもわからない時ありw)
272 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 11:35:10 ] >>266 「厳密には」も何も最初っからそう
273 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 12:56:24 ] >>266 > 覚えていないといけない 覚えてなくてもプログラム書くのにはなにも困らない。 等価性とか考えだすと全部正格のほうが楽かもしれんけど。
274 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 18:49:23 ] >>273 書くときは良くても読むとき困る 例えば>>260 のコードが空リストに対しても正しく動作するかどうか確かめるのに、 いちいちPreludeの仕様を読まないといけない zipみたいに明確な定義のある関数ならまだいいけど、 例えばhPutStrLn undefined ""の値が 1. ⊥ 2. 実行時にエラーになるアクション 3. ()を返すアクション のどれになるかは仕様では決まっていないはずで、ちょっと厄介
275 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 15:42:16 ] >>274 その辺は想像で読めば十分じゃない? zip xs (tail xs) とあって、 コードを書いたのが信頼できる人なら、 zip は第二引数について非正格なのだろうな、とか。 hPutStr undefined "" も、 hPutStr _ "" = return () と定義されては無いだろうし、 undefined が正しいハンドルじゃないからと hPutStr が独自にエラーを出すというのも、 先に undefined が評価されるから有り得ないだろう、とか。 hPutStr (error "1") (error "2") にしても error "1" だろう、とか。
276 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 15:49:33 ] ム板のやつらはなんでこんなに視野が狭いんだろうといつも思う。
277 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 17:38:53 ] 3の場合 main「ちょっと undefined に "" 出力してこい」 hPutStrLn「へい」 ...数十ns後 hPutStrLn「やってきやした」 main「おまwwww改行どうしたwwwwwwww」 >>276 正直くだらないネタ以外はここではなく他の所に書く。
278 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 18:27:02 ] 質問です HaskellでGPGPU関連の話題ってありませんか?
279 名前:274 mailto:sage [2008/06/25(水) 20:23:02 ] すまん、hPutStrLnじゃなくてhPutStrじゃないと話が合わないな >>275 >コードを書いたのが信頼できる人なら、 勉強のためにコードを読んでるならいいけど、 レビューとかデバッグとかしてるならそうはいかないだろ >hPutStr が独自にエラーを出すというのも、 誤解させたかもしれんが、HugsもGHCも2.の振る舞いをする 実行した時点でundefinedが評価されてエラー発生ね でも、例えば最適化のために hPutStr h s = seq h $ ... みたいな実装になってたら1.だし、 hPutStr h s = mapM_ (hPutChar h) s みたいな定義が考えられる以上3.もあり得なくはない 結局、非正格がデフォルトなせいで関数の仕様に書かなければいけない事項が多いのが問題 それを不用意にうやむやにすると関数の振る舞いが実装に依存してしまう それほど頻繁に問題になることではないけど、たまに面倒
280 名前:275 mailto:sage [2008/06/25(水) 21:28:51 ] >>279 > レビューとかデバッグとかしてるならそうはいかないだろ うん。 > hPutStr h s = mapM_ (hPutChar h) s > みたいな定義が考えられる以上3.もあり得なくはない なるほど。 > それほど頻繁に問題になることではないけど、たまに面倒 そういうこったね。
281 名前:275 mailto:sage [2008/06/25(水) 21:32:14 ] > 誤解させたかもしれんが、HugsもGHCも2.の振る舞いをする > 実行した時点でundefinedが評価されてエラー発生ね そういうつもりでしたか。 ちなみにそれだと1.はどういうつもりだったのですか?
282 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 21:49:44 ] >>281 hPutStr undefined "" `seq` 0 を評価してエラーが発生すれば1.だよな 実際試したらHugsでもGHCiでもエラーは発生しなかった
283 名前:275 mailto:sage [2008/06/25(水) 22:26:04 ] なるほど。というか>>279 をちゃんと読んでませんでしたごめんなさい。
284 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 21:37:05 ] 一通りよく取り上げられる教科書は読んだんですが、Arrowなどの 比較的新しい技法についてわかりやすく書かれた文書はどの辺 でしょうか。
285 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 23:11:25 ] 本家から辿って論文を読むのがいいと思うよ。
286 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 23:16:36 ] Arrow アーーー
287 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 23:28:26 ] arrowねぇ・・・イマイチだねぇ・・・ プログラミング的にはこれといってメリットないよ。
288 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 00:23:45 ] >>284 www.haskell.org/haskellwiki/Arrow
289 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 00:05:34 ] arrowで量子コンピュータのシミュレーションやってます めっちゃべんりですっっっっs
290 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 01:15:42 ] ユニタリ変換の理解が一つの山かも。
291 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 01:22:40 ] ユニタリ変換?高校生でも知ってるよ
292 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 10:42:43 ] 皆さん、エディタは何使って書いてますか?
293 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 10:48:09 ] emacsしか選択肢ないんじゃね? eclipseは糞だし。
294 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 11:10:10 ] vim
295 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 11:45:12 ] notepad.exe
296 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 12:32:37 ] vimやemacsだと使い勝手のいいプラグインあるんでしょうか。 自分もEclipseはちょっと嫌ですねぇ。
297 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 12:44:03 ] www.haskell.org/libraries/haskell.vim その他いろいろ $ hugs -Evim
298 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 16:06:10 ] Haskellの構文解析ってどういう風な作りになってるん? 結合性宣言があったりするので、 トークン読んだ時点では構文木を作れないような気がするんだけど。 何かの資料とか、HugsやGHCでの実現方法のソースとかあったら教えてくだしあ
299 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 16:38:24 ] >>298 GHCはとりあえず全部左結合として解析(parser/Parse.y)して、 後のrenameのパスで結合性宣言をもとに組み立て直してる(rename/RnExpr.lhs)
300 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 16:57:55 ] >>292 俺もvimだわ なんか文法と相性良さげだし
301 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 17:16:47 ] >>299 そういう手があったか。いや、全然関係ないパーサを先日作ってたんだが。 パス(1パスコンパイラとか2パスコンパイラとかのパス)にこだわっていては 非富豪的かねぇ。
302 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 18:10:34 ] 左結合にするってのは、 とりあえずリンクトリストにしといてから、 あとでパーズしなおすって事。
303 名前:デフォルトの名無しさん mailto:sa [2008/06/28(土) 18:39:00 ] >>292 俺はAgda使ってるよ。結構使いやすい。
304 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 20:10:12 ] project eulerに接続できねーぞ!!! どうなってんだ糞
305 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 20:19:06 ] 質問です グラフの研究で路線データ(や道路のデータなど)が使いたいのですが、 そういうデータを手に入れるにはどうすればいいですか?
306 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 21:47:48 ] >>305 質問です Haskellと関係ありますか?
307 名前:298 mailto:sage [2008/06/28(土) 22:27:19 ] >>299 ,302 thx、参考になった。 細かく追えてないけど、かなりがんばらないとparseできないってことか。
308 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 08:23:28 ] とりあえず左結合って要するにS式だよね。
309 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 18:44:49 ] Real World Haskell www.amazon.co.jp/Real-World-Haskell-Bryan-OSullivan/dp/0596514980/ > This easy-to-use, fast-moving tutorial introduces you to functional > programming with Haskell. Learn how to use Haskell in a variety of > practical ways, whether it's for short, script-like programs or large > and demanding applications.
310 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 02:44:41 ] 中身読めるよ book.realworldhaskell.org/beta/ 表紙が決まったんだね。ヘラクレスオオカブト?
311 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 03:40:51 ] 後の兜本である。
312 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 22:40:44 ] オライリーからHaskellの本が出るなんてありえない。 そう思っていた時期が僕にもありました
313 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 23:40:42 ] 2008/09 ちょおまw
314 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 04:55:50 ] >>310 全30章中残りは3章。 20. The foreign function interface 27. Profiling and tuning for performance 30. A concurrent RESTful web application 書きにくそうなのが残った感じw
315 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 08:14:01 ] 初心者用のスレで関数型の話をすると罵られる。なぜだろう。
316 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 12:30:55 ] 初心者には関数型が高尚すぎて理解できないからです。
317 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 22:36:35 ] しつもんです らむだけいさんってなんですか?
318 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 23:38:52 ] 世界遺産の一種です
319 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 23:44:40 ] ttp://wwwfun.kurims.kyoto-u.ac.jp/MtLambda.html
320 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 05:32:31 ] 全部ひらがなだとぱっと見、人名かなんかかと思った。羅武田圭さんとか。
321 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 16:58:13 ] 俺がムラタだ
322 名前:36 ◆K0BqlCB3.k mailto:sage [2008/07/11(金) 01:58:31 ] hackage.haskell.org/trac/ghc/wiki/DataParallel/WorkPlan とっとと仕事しろやボケ
323 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 09:38:42 ] まあ遅延評価だから
324 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 10:04:21 ] 等無駄計算
325 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 16:03:12 ] >>322 なにエラソーに言ってんだよ。しょーもない評論家なくせして。
326 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 00:59:56 ] 名村啓?
327 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 23:31:18 ] do記法で 'aとか''aとか出てきますが どのような意味なのでしょうか
328 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 01:16:27 ] >>327 具体的なコード書いてみて
329 名前:デフォルトの名無しさん [2008/07/21(月) 15:09:50 ] >>327 a'とかa''じゃなくて? ちなみにそれならただの変数名だよ。
330 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 15:13:03 ] >>329 見直したらそうでした 許してくださいw ごめんなさい
331 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 23:32:45 ] \_ -> k この\_ってC++のtemplate <t>みたいなもんですか?