関数型プログラミング言語Haskell Part13
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2010/10/10(日) 19:34:34ttp://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やっぱり、GHCとドキュメントをインストールして使いながら読まないとダメか…
0160デフォルトの名無しさん
2010/11/09(火) 22:02:54使わないで 360 ページまで理解できたのなら凄いですね
0161デフォルトの名無しさん
2010/11/10(水) 05:17:490162Perl忍者 ◆V8M/4amdko
2010/11/10(水) 17:13:35なーむーん
0163デフォルトの名無しさん
2010/11/10(水) 18:07:490164デフォルトの名無しさん
2010/11/10(水) 22:27:280165Perl忍者 ◆M5ZWRnXOj6
2010/11/10(水) 22:35:180166デフォルトの名無しさん
2010/11/10(水) 22:44:09これこそが贅沢
これこそがステータス
役に立つことしかやる余裕がない人はPerlでメモ帳でも作ってろ
0167デフォルトの名無しさん
2010/11/11(木) 11:57:450168デフォルトの名無しさん
2010/11/11(木) 12:16:02何しろ人事担当も経営者も関数型言語の将来性なんて一つも理解していないのだからw
0169デフォルトの名無しさん
2010/11/11(木) 13:29:170170デフォルトの名無しさん
2010/11/11(木) 13:56:56むしろ底辺の一部のベンチャーほど理解してると思うなぁ。
0171デフォルトの名無しさん
2010/11/11(木) 14:23:370172デフォルトの名無しさん
2010/11/11(木) 14:43:16言語が使えるとか使えないという初級レベルの話はしていないと思うなぁ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
0176デフォルトの名無しさん
2010/11/11(木) 17:17:340177デフォルトの名無しさん
2010/11/11(木) 18:16:35あと、忍者熱烈支持!!!
0178デフォルトの名無しさん
2010/11/11(木) 18:18:11お前自分のレスを読み返してみてどんなことを思う?
0179デフォルトの名無しさん
2010/11/11(木) 18:24:130180デフォルトの名無しさん
2010/11/11(木) 18:42:50銀行員とか書けば良いんだろうか?或は、議員だとか。
何かこう…
0181デフォルトの名無しさん
2010/11/11(木) 18:45:010182デフォルトの名無しさん
2010/11/11(木) 19:16:130183デフォルトの名無しさん
2010/11/11(木) 19:21:510184デフォルトの名無しさん
2010/11/11(木) 19:32:290185デフォルトの名無しさん
2010/11/11(木) 19:37:44ninja-って言ってる
0186デフォルトの名無しさん
2010/11/11(木) 19:40:460187Perl忍者 ◆M5ZWRnXOj6
2010/11/11(木) 19:54:120188Perl忍者 ◆M5ZWRnXOj6
2010/11/11(木) 20:01:18お前がふけ
>>177
忍者熱烈支持!!! って韓国人みたい
>>178
ほんとに低レベルだと思う
>>179
知り合いが店つくったときのIT化
事務術
>>180
しねw
>>181
死ねw
>>182
大名殺しとかPerl業界の破壊工作
S級犯罪者 ビンゴブックにも載ってるけどな
>>185
外人がわめいてる
0189Perl忍者 ◆M5ZWRnXOj6
2010/11/11(木) 20:08:03影武者がいる
全て共有してるからな 俺を潰したければ本物を見つけてみろ
0190デフォルトの名無しさん
2010/11/11(木) 20:21:310191デフォルトの名無しさん
2010/11/11(木) 20:47:19じゃあ九割五分までが底辺だな。w
0192デフォルトの名無しさん
2010/11/11(木) 21:02:080193デフォルトの名無しさん
2010/11/11(木) 21:03:010194デフォルトの名無しさん
2010/11/11(木) 21:03:13話題によるスレの使い分けにご協力願います。
Perl忍者です Perlプログラマになりたいです
http://hibari.2ch.net/test/read.cgi/tech/1284704280/
0195デフォルトの名無しさん
2010/11/11(木) 21:05:44知恵遅れのPerl忍者。w
0196デフォルトの名無しさん
2010/11/11(木) 21:47:440197デフォルトの名無しさん
2010/11/11(木) 22:06:30驚愕の事実だな
0198デフォルトの名無しさん
2010/11/12(金) 05:03:080199Perl忍者 ◆M5ZWRnXOj6
2010/11/12(金) 17:14:08「動画プレイヤーの開発です」
好きな言語はなんですか
「PHPとASです」
なにできる?
「Flash使って動画プレイヤー」
俺「プッ(笑)
「Twitterアプリもつくりましたよ」
みせてください
俺「へー(苦笑
0200デフォルトの名無しさん
2010/11/12(金) 18:00:450201デフォルトの名無しさん
2010/11/12(金) 18:01:40>>197
0202デフォルトの名無しさん
2010/11/12(金) 20:20:57GHC の拡張なんかでできますか?
たとえば次のような感じです。
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:190204デフォルトの名無しさん
2010/11/13(土) 13:31:57素っ気ないな
でも、ありがと
0205デフォルトの名無しさん
2010/11/13(土) 15:15:560206デフォルトの名無しさん
2010/11/13(土) 19:48:270207デフォルトの名無しさん
2010/11/13(土) 21:37:530208デフォルトの名無しさん
2010/11/14(日) 00:07:27それとも解答例なんか見るまでもなく簡単にできるものなんでしょうか?
0209デフォルトの名無しさん
2010/11/14(日) 00:17:07なんかでググればいろいろ出てくるでしょ
ネットで読める原書 http://book.realworldhaskell.org/read/
にある各 Exercises のコメ欄にも、回答例のコメントが付いてるのが所々ある
0210デフォルトの名無しさん
2010/11/14(日) 12:18:13-- ここから
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ぱっと見たところ、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あ、ごめん。
wgetMain 関数は空リストだったり成功したら ExitSuccess を「ひとつ」返すのか。
それなら forM_ や forM では意味無いね。
成功や失敗のリストを返すのなら forM を使えばいいけど。
ごめん、>>211 の前半は無視してくれ。
0213デフォルトの名無しさん
2010/11/14(日) 16:29:040214デフォルトの名無しさん
2010/11/14(日) 16:48:45(h, b) <- wget' "http://・・・hoge.gif" [] []
とやって、ヘッダの内容を確認してもダメだった?
それでもダメなら、b の先頭数文字くらいのマジックコードで、
画像ファイルかどうかを判別するとか
0215デフォルトの名無しさん
2010/11/14(日) 16:54:42もし404じゃないのが来るようなら自前で判断するコード書く必要がある
0216215
2010/11/14(日) 16:55:500217デフォルトの名無しさん
2010/11/14(日) 17:57:58HTMLテキストファイルから画像の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相対 URL も忘れずに
0219デフォルトの名無しさん
2010/11/14(日) 18:11:42IMG タグ内の SRC だけを調べた方がよくないか
0220デフォルトの名無しさん
2010/11/14(日) 18:18:01相対パス名ガン無視だから、ちゃんと動くのは二次裏だけだと思う
二次裏は、junとかmarとか画像を置いてるサーバを分けてて、全部絶対パス名で書いてるから
0221デフォルトの名無しさん
2010/11/14(日) 20:23:31どなたかご存知ないでしょうか?
0222デフォルトの名無しさん
2010/11/14(日) 20:33:10一昨日までは見てたから、それ以降からだろ
良くある、今までも何度もあった
待ってれば数日で見られるようになる
0223デフォルトの名無しさん
2010/11/14(日) 20:34:350224デフォルトの名無しさん
2010/11/14(日) 21:19:55ありがとうございます
wxHaskellかGtk2HS試したかったのですが、待つことにします
0225デフォルトの名無しさん
2010/11/14(日) 21:31:59どちらも今問題なく hackageDB から落とせるが?
0226Perl忍者 ◆M5ZWRnXOj6
2010/11/14(日) 21:48:510227Perl忍者 ◆M5ZWRnXOj6
2010/11/14(日) 21:56:000228デフォルトの名無しさん
2010/11/15(月) 07:31:160229デフォルトの名無しさん
2010/11/15(月) 20:43:25本やサイトはありませんか。
例えば、末尾再帰の形の関数は引数が正格でなければ効率は上がらないとか。
計算量や必要な(メモリ)空間などの測り方とか。
アルゴリズム系の本やブログなんかで少し紹介されてはいますが、
まとまった情報というのがなかなか見当たりません。
日本語・英語どちらでもかまいません。
0230デフォルトの名無しさん
2010/11/15(月) 21:24:33http://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すいません、紹介しているという言い方が悪かったです。
カタログ化されてるといいなぁと。
(どこもやってなかったら、自分でやってみようかなとは、ちょっと思ってますが)
紹介していただいた前者のページは初めて知りました。
これは、上のスライドを表示しながら、
ページ下の台詞を講演者が喋っていたというイメージですか。
初めの方をちらっと見ましたが、扱ってる話題が多そうなので、
これからじっくり見てみます。
後者の方は原著(ネット)も和訳も読みましたが、浅い感じでした。
なんというか、少なくともこのトピックに関しては
詳細はウェブで、論文で、他書で、公式ドキュメントでという感じでした。
0232デフォルトの名無しさん
2010/11/15(月) 21:43:31忘れてました。
紹介、ありがとうございました。
0233デフォルトの名無しさん
2010/11/16(火) 10:19:020234Perl忍者 ◆M5ZWRnXOj6
2010/11/16(火) 17:44:260235デフォルトの名無しさん
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あとLuaが意外と上位なんだね
0238デフォルトの名無しさん
2010/11/17(水) 19:31:350239デフォルトの名無しさん
2010/11/17(水) 19:43:42いろんな最適化テクニックを駆使しなければならないとか、
またそのためにソースが見難くなるのなら問題だけど
0240Perl忍者 ◆M5ZWRnXOj6
2010/11/17(水) 21:24:00死んだ方が良いよ
親がかわいそう
0241デフォルトの名無しさん
2010/11/17(水) 23:46:150242デフォルトの名無しさん
2010/11/17(水) 23:55:100243デフォルトの名無しさん
2010/11/18(木) 00:37:04たしかにwww
0244Perl忍者 ◆M5ZWRnXOj6
2010/11/18(木) 22:15:47haskellスレから
誰かいまテレパシーをおくったか?
お前らかわいそうだよ
haskellやって ゴミ掃除やってるレベルだろ
0245デフォルトの名無しさん
2010/11/19(金) 08:40:24Haskellが今より20%くらい速くなると、ほぼJavaの水準になるね
0246デフォルトの名無しさん
2010/11/19(金) 10:01:04Ruby高速化したあの少年連れて来い!
0247デフォルトの名無しさん
2010/11/19(金) 10:03:030248デフォルトの名無しさん
2010/11/19(金) 10:17:200249デフォルトの名無しさん
2010/11/19(金) 10:45:250250デフォルトの名無しさん
2010/11/19(金) 10:55:550251デフォルトの名無しさん
2010/11/19(金) 11:21:25最も新しく発売されたHaskellの書籍は何ですか?
0252デフォルトの名無しさん
2010/11/19(金) 12:37:07Concurrent Haskell
(ISBN-13: 978-6133152977)
たぶん、これが最新だと思う
内容は知らん
0253デフォルトの名無しさん
2010/11/19(金) 12:53:02前スレの末尾までの時点で最新だった奴だと思うんですけどね
0254デフォルトの名無しさん
2010/11/19(金) 18:09:39じゃあこれか
Pearls of Functional Algorithm Design
(ISBN-13: 978-0521513388)
0255デフォルトの名無しさん
2010/11/19(金) 20:30:16ああこれだ!多分これ!
あり^^
0256デフォルトの名無しさん
2010/11/19(金) 20:54:48class 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無理
そもそもtransの型が曖昧でコンパイル通らない
0258デフォルトの名無しさん
2010/11/19(金) 22:25:34では、
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 といった型のみが違うだけなのですが、
どうにかしてこの型をパラメータとして指定できる関数は作れないものでしょうか。
■ このスレッドは過去ログ倉庫に格納されています