トップページtech
1001コメント390KB

関数型プログラミング言語Haskell Part13

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2010/10/10(日) 19:34:34
haskell.org
ttp://www.haskell.org/

日本語サイト
ttp://www.sampou.org/cgi-bin/haskell.cgi
ttp://www.shido.info/hs/

過去ログ
関数型プログラミング言語Haskell
Part1 ttp://pc.2ch.net/tech/kako/996/996131288.html
Part2 ttp://pc2.2ch.net/test/read.cgi/tech/1013846140/
Part3 ttp://pc8.2ch.net/test/read.cgi/tech/1076418993/
Part4 ttp://pc8.2ch.net/test/read.cgi/tech/1140717775/
Part5 ttp://pc8.2ch.net/test/read.cgi/tech/1149263630/
Part6 ttp://pc11.2ch.net/test/read.cgi/tech/1162902266/
Part7 ttp://pc11.2ch.net/test/read.cgi/tech/1174211797/
Part8 ttp://pc11.2ch.net/test/read.cgi/tech/1193743693/
Part9 ttp://pc11.2ch.net/test/read.cgi/tech/1211010089/
Part10 ttp://pc12.2ch.net/test/read.cgi/tech/1231861873/
Part11 ttp://pc12.2ch.net/test/read.cgi/tech/1252382593/
Part12 ttp://hibari.2ch.net/test/read.cgi/tech/1272536128/

2chの仕様により、行頭の半角スペースは表示されません。
コードをインデントしたいときは、代わりに?または全角スペースを使うことができます。
0159デフォルトの名無しさん2010/11/09(火) 21:51:05
>>158
やっぱり、GHCとドキュメントをインストールして使いながら読まないとダメか…
0160デフォルトの名無しさん2010/11/09(火) 22:02:54
>>159
使わないで 360 ページまで理解できたのなら凄いですね
0161デフォルトの名無しさん2010/11/10(水) 05:17:49
つ Hoogle ttp://www.haskell.org/hoogle/
0162Perl忍者 ◆V8M/4amdko 2010/11/10(水) 17:13:35
ここみてると毎日無駄な事やっててかわいそうに思えてくる

なーむーん
0163デフォルトの名無しさん2010/11/10(水) 18:07:49
そのレスよりは有意義だと思うぞ
0164デフォルトの名無しさん2010/11/10(水) 22:27:28
Perl忍者こそ無能の固まり
0165Perl忍者 ◆M5ZWRnXOj6 2010/11/10(水) 22:35:18
ここのスレのやつらはある意味親切だから毎日チェックしてんだよ
0166デフォルトの名無しさん2010/11/10(水) 22:44:09
どう考えても無駄なことに没頭する
これこそが贅沢
これこそがステータス

役に立つことしかやる余裕がない人はPerlでメモ帳でも作ってろ
0167デフォルトの名無しさん2010/11/11(木) 11:57:45
Perl忍者こそ無能の極み
0168デフォルトの名無しさん2010/11/11(木) 12:16:02
まぁ、少なくとも就職活動には役に立たないね。
何しろ人事担当も経営者も関数型言語の将来性なんて一つも理解していないのだからw
0169デフォルトの名無しさん2010/11/11(木) 13:29:17
どこの底辺企業だよ
0170デフォルトの名無しさん2010/11/11(木) 13:56:56
>>169
むしろ底辺の一部のベンチャーほど理解してると思うなぁ。
0171デフォルトの名無しさん2010/11/11(木) 14:23:37
研究開発部門ならともかく、ついこないだまで日本語の入出力すらまともにできなかった言語を欲する企業があるとは思えん。
0172デフォルトの名無しさん2010/11/11(木) 14:43:16
>>171
言語が使えるとか使えないという初級レベルの話はしていないと思うなぁw
0173デフォルトの名無しさん2010/11/11(木) 15:34:54
「幾何学なんかやって儲かるのか」だって?
この金やるからどっかに消えろ
                           by ソクラテス
0174デフォルトの名無しさん2010/11/11(木) 15:36:06
まさかの文字コード
さすが馬鹿は発想が貧弱だな
0175Perl忍者 ◆M5ZWRnXOj6 2010/11/11(木) 16:54:19
こいつらはラテン系の数式とか書いちゃってw
方程式とかなw

難しくみせて 実は簡単なことやってる低レベルなやつらねw

バカだから知的にみらたいでしょ?w

そろそろ死んだ方がいいよw
0176デフォルトの名無しさん2010/11/11(木) 17:17:34
涙ふけよ
0177デフォルトの名無しさん2010/11/11(木) 18:16:35
くだらないこと書いて、紙を無駄にするなよ?
あと、忍者熱烈支持!!!
0178デフォルトの名無しさん2010/11/11(木) 18:18:11
>>175
お前自分のレスを読み返してみてどんなことを思う?
0179デフォルトの名無しさん2010/11/11(木) 18:24:13
Perl忍者さんはどのようなお仕事をされているんですか?
0180デフォルトの名無しさん2010/11/11(木) 18:42:50
そこで、”仕事”が出てくる理由がわからない。
銀行員とか書けば良いんだろうか?或は、議員だとか。
何かこう…
0181デフォルトの名無しさん2010/11/11(木) 18:45:01
保安官です.
0182デフォルトの名無しさん2010/11/11(木) 19:16:13
忍者がどのような仕事か知らない人がいるみたいだね
0183デフォルトの名無しさん2010/11/11(木) 19:21:51
大名に仕えて諜報活動するんだろ?
0184デフォルトの名無しさん2010/11/11(木) 19:32:29
忍者の仕事はオナニー
0185デフォルトの名無しさん2010/11/11(木) 19:37:44
http://www.youtube.com/watch?v=H8hPvxjBGJ0
ninja-って言ってる
0186デフォルトの名無しさん2010/11/11(木) 19:40:46
>>185=Perl忍者
0187Perl忍者 ◆M5ZWRnXOj6 2010/11/11(木) 19:54:12
企業内撮影してアップロードしたら犯罪になる?
0188Perl忍者 ◆M5ZWRnXOj6 2010/11/11(木) 20:01:18
>>176
お前がふけ

>>177
忍者熱烈支持!!! って韓国人みたい

>>178
ほんとに低レベルだと思う

>>179
知り合いが店つくったときのIT化
事務術

>>180
しねw

>>181
死ねw

>>182
大名殺しとかPerl業界の破壊工作
S級犯罪者 ビンゴブックにも載ってるけどな

>>185
外人がわめいてる
0189Perl忍者 ◆M5ZWRnXOj6 2010/11/11(木) 20:08:03
残念ながら俺には5名
影武者がいる
全て共有してるからな 俺を潰したければ本物を見つけてみろ
0190デフォルトの名無しさん2010/11/11(木) 20:21:31
全て共有してるなら、どれも本物だよな
0191デフォルトの名無しさん2010/11/11(木) 20:47:19
>>169
じゃあ九割五分までが底辺だな。w
0192デフォルトの名無しさん2010/11/11(木) 21:02:08
↑亀
0193デフォルトの名無しさん2010/11/11(木) 21:03:01
反知性主義者は進化論が禁止になってる国に帰れや
0194デフォルトの名無しさん2010/11/11(木) 21:03:13
Perl忍者と雑談したい人はPerl忍者スレに書いてください。
話題によるスレの使い分けにご協力願います。

Perl忍者です Perlプログラマになりたいです
http://hibari.2ch.net/test/read.cgi/tech/1284704280/
0195デフォルトの名無しさん2010/11/11(木) 21:05:44
>>194
知恵遅れのPerl忍者。w
0196デフォルトの名無しさん2010/11/11(木) 21:47:44
知性ってなんだよ?
0197デフォルトの名無しさん2010/11/11(木) 22:06:30
http://hibari.2ch.net/test/read.cgi/tech/1284704280/180
驚愕の事実だな
0198デフォルトの名無しさん2010/11/12(金) 05:03:08
君達、良い加減にし給え。
0199Perl忍者 ◆M5ZWRnXOj6 2010/11/12(金) 17:14:08
開発経験はなんですか?

「動画プレイヤーの開発です」

好きな言語はなんですか

「PHPとASです」

なにできる?

「Flash使って動画プレイヤー」

俺「プッ(笑)

「Twitterアプリもつくりましたよ」

みせてください

俺「へー(苦笑
0200デフォルトの名無しさん2010/11/12(金) 18:00:45
Perl忍者って、Perl以外に何ができるの?
0201デフォルトの名無しさん2010/11/12(金) 18:01:40
>>200
>>197
0202デフォルトの名無しさん2010/11/12(金) 20:20:57
関数の中置記法でカリー化を使うことって、
GHC の拡張なんかでできますか?

たとえば次のような感じです。

let f a b c = a * (b + c)
in 2 `f 10` 3

予め g = f 10 としておけば 2 `g` 3 でできますが、
上記のように記述できるかなと。

べつに目的はないです。
これが分かりやすいかどうかも考えてません。
単に Haskell で遊んでて、ふと思ったもので。
0203デフォルトの名無しさん2010/11/13(土) 01:38:19
できません。
0204デフォルトの名無しさん2010/11/13(土) 13:31:57
>>203
素っ気ないな

でも、ありがと
0205デフォルトの名無しさん2010/11/13(土) 15:15:56
諸君、新しい話題は?
0206デフォルトの名無しさん2010/11/13(土) 19:48:27
ありません。
0207デフォルトの名無しさん2010/11/13(土) 21:37:53
ないない。
0208デフォルトの名無しさん2010/11/14(日) 00:07:27
RWHの練習問題の解答例ってどこかにあるのでしょうか?
それとも解答例なんか見るまでもなく簡単にできるものなんでしょうか?
0209デフォルトの名無しさん2010/11/14(日) 00:17:07
"Real World Haskell" answer
なんかでググればいろいろ出てくるでしょ

ネットで読める原書 http://book.realworldhaskell.org/read/
にある各 Exercises のコメ欄にも、回答例のコメントが付いてるのが所々ある
0210デフォルトの名無しさん2010/11/14(日) 12:18:13
URLリストからファイルをダウンロードするスクリプトを書きましたけど、これ、もっと綺麗になりませんでしょうか?

-- ここから
import GHC.IOBase
import System.Cmd

wgetCmd :: String
wgetCmd = "./wget/wget" -- wget.exe というコマンドがwgetというフォルダの下にある

wgetParam :: String -> [String]
wgetParam url = ["-r", "-l1", "--no-parent", "-A.jpg", "--header=REFERER:"++url, "-U", "\"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)\"", url, "-e", "robots=off"]

testMain = do
iStr <- readFile "dList2.txt" -- 行頭にタブ  dList2.txt に画像のURLが1行にひとつずつある
let ls = lines iStr -- 行頭にタブ
wgetMain ls -- 行頭にタブ

wgetMain :: [String] -> IO GHC.IOBase.ExitCode
wgetMain [] = return GHC.IOBase.ExitSuccess
wgetMain (u:us) = do
rawSystem wgetCmd $ wgetParam u -- 行頭にタブ
wgetMain us -- 行頭にタブ

-- ここまで

WindowsXPで、ghciの中
で :m System.Cmdの後にtestMainでとりあえずちゃんと動きました
他に、wgetみたいな関数があったら教えてください
0211デフォルトの名無しさん2010/11/14(日) 14:19:06
>>210
ぱっと見たところ、wgetMain 関数の中は forM_ 関数を使えば
空リストとの場合分けを書かなくて済む。


> 他に、wgetみたいな関数があったら教えてください
haskell の packageDB に http-wget というライブラリがある。
http://hackage.haskell.org/package/http-wget
きみと似たようなことをしてる(wget コマンドのラッパー)。

このライブラリを使えば、とりあえず
(_, b) <- wget' "http://・・・hoge.gif" [] []
という記述で b に GIF ファイルの本体が String 型で書き込まれた。
後は標準ライブラリの withBinaryFile 関数を使って、
withBinaryFile "c:\\・・・hoge.gif" WriteMode (\h -> hPutStr h b)
と記述すれば保存されたよ。

ただ、wgwt コマンドにどのようなパラメータを渡しているのかは知らない。
公開されている関数の中には、詳細なパラメータを渡す類のものは無さそうだけど、
デフォルトがどうなってるのかは自分で調べてくれ。
ソースを見れば何やってるのか分かるだろうし。
0212デフォルトの名無しさん2010/11/14(日) 14:24:26
>>211
あ、ごめん。
wgetMain 関数は空リストだったり成功したら ExitSuccess を「ひとつ」返すのか。
それなら forM_ や forM では意味無いね。
成功や失敗のリストを返すのなら forM を使えばいいけど。

ごめん、>>211 の前半は無視してくれ。
0213デフォルトの名無しさん2010/11/14(日) 16:29:04
wget で画像のダウンロード失敗して ExitFailure を受け取ったURLのリストをリストに保存しようと思ったら、URLに画像が存在しなくても 404.html をダウンロードして ExitSuccess を返してきちゃう
0214デフォルトの名無しさん2010/11/14(日) 16:48:45
>>213
(h, b) <- wget' "http://・・・hoge.gif" [] []

とやって、ヘッダの内容を確認してもダメだった?

それでもダメなら、b の先頭数文字くらいのマジックコードで、
画像ファイルかどうかを判別するとか
0215デフォルトの名無しさん2010/11/14(日) 16:54:42
curl -I <404.htmlを返すurl>でどんなレスポンスコードがくる?
もし404じゃないのが来るようなら自前で判断するコード書く必要がある
02162152010/11/14(日) 16:55:50
ごめんスルーで
0217デフォルトの名無しさん2010/11/14(日) 17:57:58
>>210
HTMLテキストファイルから画像のURLを抽出するスクリプト作ってみた
これと>>210で画像だけダウソできる(ふたばの二次裏junで確認したけど、多用するとアク禁されると思う)
↓ここから(GetURL.hs)
-- ghci   →   :load GetURL.hs   →    getImageURL "HTMLのソースコードが書いてあるテキストファイル" "結果を出力するファイル"

import Text.Regex.Posix
import System.FilePath
import Data.Char (toLower)

urlPat = "s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+"

getImageURL :: FilePath -> FilePath -> IO ()
getImageURL inFile outFile = do
{-タブ-} inStr <- readFile inFile
{-タブ-} writeFile outFile $ unlines $ (filter isNotThumb) $ (filter isImageURL) $ ((inStr =~ urlPat) :: [String])

isImageURL :: String -> Bool
isImageURL url =
{-タブ-} case (map toLower $ takeExtension url) of
{-タブ-}{-タブ-} ".jpg" -> True
{-タブ-}{-タブ-} ".jpeg" -> True
{-タブ-}{-タブ-} ".gif" -> True
{-タブ-}{-タブ-} ".png" -> True
{-タブ-}{-タブ-} _ -> False

isNotThumb :: String -> Bool
isNotThumb url = not $ (map toLower url) =~ "thumb" :: Bool
0218デフォルトの名無しさん2010/11/14(日) 18:09:43
>>217
相対 URL も忘れずに
0219デフォルトの名無しさん2010/11/14(日) 18:11:42
>>217
IMG タグ内の SRC だけを調べた方がよくないか
0220デフォルトの名無しさん2010/11/14(日) 18:18:01
>>217
相対パス名ガン無視だから、ちゃんと動くのは二次裏だけだと思う
二次裏は、junとかmarとか画像を置いてるサーバを分けてて、全部絶対パス名で書いてるから
0221デフォルトの名無しさん2010/11/14(日) 20:23:31
www.haskell.orgが見れないのですが、いつからでしょうか。
どなたかご存知ないでしょうか?
0222デフォルトの名無しさん2010/11/14(日) 20:33:10
>>221
一昨日までは見てたから、それ以降からだろ

良くある、今までも何度もあった
待ってれば数日で見られるようになる
0223デフォルトの名無しさん2010/11/14(日) 20:34:35
昨日の夜は見られなかったよ
0224デフォルトの名無しさん2010/11/14(日) 21:19:55
>>222 >>223
ありがとうございます
wxHaskellかGtk2HS試したかったのですが、待つことにします
0225デフォルトの名無しさん2010/11/14(日) 21:31:59
>>224
どちらも今問題なく hackageDB から落とせるが?
0226Perl忍者 ◆M5ZWRnXOj6 2010/11/14(日) 21:48:51
さきりさ っていうやつしね

0227Perl忍者 ◆M5ZWRnXOj6 2010/11/14(日) 21:56:00
hageDBみてええだな
0228デフォルトの名無しさん2010/11/15(月) 07:31:16
Perl忍者ぺろぺろ
0229デフォルトの名無しさん2010/11/15(月) 20:43:25
Haskell の最適化にまつわる話やテクニック、注意などを集めて紹介している
本やサイトはありませんか。

例えば、末尾再帰の形の関数は引数が正格でなければ効率は上がらないとか。
計算量や必要な(メモリ)空間などの測り方とか。

アルゴリズム系の本やブログなんかで少し紹介されてはいますが、
まとまった情報というのがなかなか見当たりません。

日本語・英語どちらでもかまいません。
0230デフォルトの名無しさん2010/11/15(月) 21:24:33
すぐ見つかったのはこれ
http://www.slideshare.net/tibbe/highperformance-haskell
http://book.realworldhaskell.org/read/profiling-and-optimization.html

haskell.orgのwikiにも記述があったと思うけど、まだ落ちてるな
0231デフォルトの名無しさん2010/11/15(月) 21:35:15
>>230
すいません、紹介しているという言い方が悪かったです。
カタログ化されてるといいなぁと。
(どこもやってなかったら、自分でやってみようかなとは、ちょっと思ってますが)

紹介していただいた前者のページは初めて知りました。
これは、上のスライドを表示しながら、
ページ下の台詞を講演者が喋っていたというイメージですか。
初めの方をちらっと見ましたが、扱ってる話題が多そうなので、
これからじっくり見てみます。

後者の方は原著(ネット)も和訳も読みましたが、浅い感じでした。
なんというか、少なくともこのトピックに関しては
詳細はウェブで、論文で、他書で、公式ドキュメントでという感じでした。
0232デフォルトの名無しさん2010/11/15(月) 21:43:31
>>230
忘れてました。

紹介、ありがとうございました。
0233デフォルトの名無しさん2010/11/16(火) 10:19:02
GHC 7.0.1
0234Perl忍者 ◆M5ZWRnXOj6 2010/11/16(火) 17:44:26
イモリ4GBだけどネトゲはサクサクうごきますか?
0235デフォルトの名無しさん2010/11/17(水) 05:46:15
学ぶのも大変なのに,性能までゴミだと?
そんなクズみたいな言語は使いたくありません.
http://shootout.alioth.debian.org/
0236デフォルトの名無しさん2010/11/17(水) 06:28:35
実は俺どうこのベンチを解釈したらいいかよくわかんないんだけど
リンク貼っとけば勝手に話を膨らませてくれるだろう

まで読んだ
0237デフォルトの名無しさん2010/11/17(水) 19:29:33
Haskell十分すぎるほど速いじゃん
あとLuaが意外と上位なんだね
0238デフォルトの名無しさん2010/11/17(水) 19:31:35
ほんとだ、LuaがJavaより速い(こともある)のは知らなかった
0239デフォルトの名無しさん2010/11/17(水) 19:43:42
まぁ、そこそこの努力で十分な速さが出るならいいよな

いろんな最適化テクニックを駆使しなければならないとか、
またそのためにソースが見難くなるのなら問題だけど
0240Perl忍者 ◆M5ZWRnXOj6 2010/11/17(水) 21:24:00
お前らまだHaskellやってんの

死んだ方が良いよ

親がかわいそう
0241デフォルトの名無しさん2010/11/17(水) 23:46:15
この忍者の親が可哀想だわ
0242デフォルトの名無しさん2010/11/17(水) 23:55:10
まさか息子が忍者やってるとは思いもしないだろうなw
0243デフォルトの名無しさん2010/11/18(木) 00:37:04
>>242
たしかにwww
0244Perl忍者 ◆M5ZWRnXOj6 2010/11/18(木) 22:15:47
いテレパシーがとんできました

haskellスレから

誰かいまテレパシーをおくったか?

お前らかわいそうだよ
haskellやって ゴミ掃除やってるレベルだろ
0245デフォルトの名無しさん2010/11/19(金) 08:40:24
Luaが速いというか、LuaJITが速いみたい
Haskellが今より20%くらい速くなると、ほぼJavaの水準になるね
0246デフォルトの名無しさん2010/11/19(金) 10:01:04
じゃあ誰が20%速くしてくれんだよ!
Ruby高速化したあの少年連れて来い!
0247デフォルトの名無しさん2010/11/19(金) 10:03:03
RWHの次に読むべき英語の書籍ってなんだっけ?
0248デフォルトの名無しさん2010/11/19(金) 10:17:20
何がしたいの?
0249デフォルトの名無しさん2010/11/19(金) 10:45:25
万能感を錯覚したいです
0250デフォルトの名無しさん2010/11/19(金) 10:55:55
それならRWHとか読んでないで然るべきクスリを使うべき
0251デフォルトの名無しさん2010/11/19(金) 11:21:25
では質問を変えます
最も新しく発売されたHaskellの書籍は何ですか?
0252デフォルトの名無しさん2010/11/19(金) 12:37:07
>>251
Concurrent Haskell
(ISBN-13: 978-6133152977)

たぶん、これが最新だと思う
内容は知らん
0253デフォルトの名無しさん2010/11/19(金) 12:53:02
あ〜これだったかなぁ?違ったかなぁ?
前スレの末尾までの時点で最新だった奴だと思うんですけどね
0254デフォルトの名無しさん2010/11/19(金) 18:09:39
>>253
じゃあこれか

Pearls of Functional Algorithm Design
(ISBN-13: 978-0521513388)
0255デフォルトの名無しさん2010/11/19(金) 20:30:16
>>254
ああこれだ!多分これ!
あり^^
0256デフォルトの名無しさん2010/11/19(金) 20:54:48
次のような型クラスと関数があるとします。

class Trans t where
  fromList :: [a] -> t a
  toList   :: t a -> [a]

trans :: [a] -> [a]
trans = toList . fromList

ここで Trans 型クラスのインスタンス T1 と T2 があって、
T1 の trans の結果と T2 の trans の結果が
同じなら True 違うなら False を返す関数を作りたいです。
(QuickCheck で確認したい)

しかし、この trans 関数をそのまま使ってそのような関数を作ることは
できないのでしょうか(型シグネチャをどこかに明示して)。
0257デフォルトの名無しさん2010/11/19(金) 22:03:00
>>256
無理
そもそもtransの型が曖昧でコンパイル通らない
0258デフォルトの名無しさん2010/11/19(金) 22:25:34
>>257
では、

transT1 :: [a] -> [a]
transT1 = t . f
  where f = fromList :: [a] -> T1 a
        t = toList :: T1 a -> [a]

transT2 :: [a] -> [a]
transT2 = t . f
  where f = fromList :: [a] -> T2 a
        t = toList :: T2 a -> [a]

などと、T1 T2 それぞれ用の trans 関数を作って、
それらを比較しなければならないのでしょうか。

transT1 と transT2 は T1 や T2 といった型のみが違うだけなのですが、
どうにかしてこの型をパラメータとして指定できる関数は作れないものでしょうか。
■ このスレッドは過去ログ倉庫に格納されています