関数型プログラミング言語Haskell Part9
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/05/17(土) 16:41:29http://www.haskell.org/
日本語サイト
http://www.sampou.org/cgi-bin/haskell.cgi
http://www.shido.info/hs/
過去ログ
関数型プログラミング言語Haskell
Part1 http://pc.2ch.net/tech/kako/996/996131288.html
Part2 http://pc2.2ch.net/test/read.cgi/tech/1013846140/
Part3 http://pc8.2ch.net/test/read.cgi/tech/1076418993/
Part4 http://pc8.2ch.net/test/read.cgi/tech/1140717775/
Part5 http://pc8.2ch.net/test/read.cgi/tech/1149263630/
Part6 http://pc11.2ch.net/test/read.cgi/tech/1162902266/
Part7 http://pc11.2ch.net/test/read.cgi/tech/1174211797/
Part8 http://pc11.2ch.net/test/read.cgi/tech/1193743693/
・2chの仕様により、行頭の半角スペースは表示されません。
コードをインデントしたいときは、代わりに または全角スペースを使うことができます。
0002デフォルトの名無しさん
2008/05/17(土) 16:42:18・Introduction to Functional Programming Using Haskell
http://www.amazon.co.jp/exec/obidos/ASIN/0134843460/
・Haskell: The Craft of Functional Programming
http://www.amazon.co.jp/exec/obidos/ASIN/0201342758/
・The Fun of Programming
http://www.amazon.co.jp/exec/obidos/ASIN/1403907722/
・The Haskell School of Expression: Learning Functional Programming Through Multimedia
http://www.amazon.co.jp/exec/obidos/ASIN/0521644089/
・入門Haskell
http://item.rakuten.co.jp/book/1794880/
・ふつうのHaskellプログラミング
http://item.rakuten.co.jp/book/4052963/
0003デフォルトの名無しさん
2008/05/17(土) 16:42:39・関数型言語Part IV
http://pc8.2ch.net/test/read.cgi/tech/1083649982/
・【数学者】Haskellはクソ言語【オナニー】
http://pc8.2ch.net/test/read.cgi/tech/1128011645/
・純粋関数型言語Concurent Clean
http://pc8.2ch.net/test/read.cgi/tech/1075629340/
・関数型言語ML(SML, OCaml, etc.), Part 5
http://pc11.2ch.net/test/read.cgi/tech/1186292994/
・Lisp Scheme Part21
http://pc11.2ch.net/test/read.cgi/tech/1207300697/
・【入門】CommonLispその4【質問よろず】
http://pc11.2ch.net/test/read.cgi/tech/1201402366/
・Emacs Lisp 3
http://pc11.2ch.net/test/read.cgi/tech/1191875993/
0004デフォルトの名無しさん
2008/05/17(土) 16:43:00Haskell98によると、Charは一つのUnicode文字を表す(6.1.2)。
これに従って、比較的新しいHugsやGHC(6.4系を含む)ではCharは32ビット整数になっている。
ただし、どちらも入出力に際しての変換が完全でない。具体的には、
・ソースコード中の文字列リテラル
・System.IOライブラリでの入出力
が問題になる。
1. GHC6.4.2以前
ソースコード・入出力ともLatin-1を仮定する。Latin-1ではバイト値と
コードポイントが一致するので、入力時には外部エンコードの各バイトがそのままCharに
入り、出力時にはCharの下位8ビットのみが出力されるような実装になっている。
このため、あるエンコーディング(Latin-1とは限らない)の入力をgetLineで受け取り、
それをそのままputStrで表示すれば、入力時とおなじエンコードにおいて正しく表示される。
これを利用して、[Char]を、本来のコードポイントの列としてではなく、特定のエンコードの下での
バイト列として使うことができる。ただし文字列リテラルについては、GHCはLatin-1として
不正な文字を受け付けないので、EUC-JPのような例外を除くと、単純にリテラルを使うことはできない。
2. GHC6.6
ソースコードにはUTF-8、入出力にはLatin-1を仮定する。このため、EUC-JPでリテラルを直に
書くことはできない。
(続く)
0005デフォルトの名無しさん
2008/05/17(土) 16:43:203.最近のHugs(非WindowsかつCのwchar_tがUnicodeの環境、というかLinux)
ソースコード・入出力ともロケールのエンコードを利用する。
4.最近のHugs(Windows)
ソースコード・入出力ともLatin-1を仮定する。ただし文字列リテラルにShift-JISを使ってもエラーにならない。
5.最近のHugs(それ以外)
未調査。
・結局どうするか。
規格どおりにCharにUnicodeを入れるか、Charを単なるバイトとして扱うかの二択。
i. CharをUnicodeとして扱う
(3)以外の場合入出力で変換が必要。(2)または(3)以外の場合文字列リテラルでは
明示的なエスケープ(たとえば"\22234")が必要。
ii. Charをバイトとして扱う
(3)ではファイルをバイナリモードで開くなどの対策が必要。(1)でEUC-JPを使う場合と(4)
を除き文字列リテラルでは明示的なエスケープ(たとえば"\143\153")が必要。
lengthやisAlphaのような関数、およびwin32パッケージの関数(win32API)が正しく動作しない。
0006デフォルトの名無しさん
2008/05/17(土) 16:43:41前スレが終わってからしばらく建ってなかったので建てました。
行き届かないところがあったらごめんなさい。
0007デフォルトの名無しさん
2008/05/17(土) 17:05:58, '´ λ ヽ
!,.イリノ)))〉
リ)^ヮ^ノ| このスレのマスコットキャラ
ノ⊂)水!つ
((( く/_l〉 リ はすけるたん
`` し'ノ
0008デフォルトの名無しさん
2008/05/17(土) 18:53:58Word8からWord32に変換する方法についてなのですが、
Word8からtoInteger・fromInteger関数を経てWord32に変換する以外に、
クレバーな方法はありませんか?
0009デフォルトの名無しさん
2008/05/17(土) 18:54:51http://www.haskell.org/croppedhaskell.jpg
0010デフォルトの名無しさん
2008/05/17(土) 19:44:18n(n-1)個のcastを用意するのが
2n個のcastを用意するよりクレバーだと思いますか?
0011デフォルトの名無しさん
2008/05/17(土) 20:00:311. ソース中の文字列 hello = "こんにちは" :: String は UTF-8
2. これを ghci で表示することは可能:(ただし、環境変数 LANG を UTF-8 にしておくこと、また、ターミナルも UTF-8 で入出力できるようにしておくこと)
Main> print hello
こんにちは
Main>
3. 入出力 IO は Latin-1 だが、package utf8-string (http://code.haskell.org/utf8-string/) を導入することにより、入出力を UTF-8 にすることができる
4. その他の文字列エンコード(ShiftJIS, JIS, EUC-JP など) は、package iconv (http://hackage.haskell.org/cgi-bin/hackage-scripts/package/iconv) で UTF-8 な文字列にする
とまあ、こういうことで、日本語表示できるわけだ。iconv package は MacOSX と *BSD では cabal を少しいじらなければいけないことに注意しろよ(iconv.cabal のコメントに書いてある)
よろしくたのむ、な。
0012sage
2008/05/17(土) 20:05:38toEnum . fromEnum でよくね
0013デフォルトの名無しさん
2008/05/17(土) 21:23:49>1. ソース中の文字列 hello = "こんにちは" :: String は UTF-8
これどういう意味?Stringになってしまえば文字コード関係なくね?
>2. これを ghci で表示することは可能
*Main> print hello
"\12371\12435\12395\12385\12399"
こうなった
0014デフォルトの名無しさん
2008/05/17(土) 21:25:11fromIntegral :: (Integral a, Num b) => a -> b
fromIntegral = fromInteger . toInteger
という関数がある
0015デフォルトの名無しさん
2008/05/17(土) 21:41:450016デフォルトの名無しさん
2008/05/18(日) 08:26:56上げていただいている関連書籍で、
・Introduction to Functional Programming Using Haskell
・Haskell: The Craft of Functional Programming
は読み終えて、
・The Haskell School of Expression: Learning Functional Programming Through Multimedia
を問題解きつつ進めているところですけど、
・The Fun of Programming
次はこちらがいいんでしょうか。それともネット上の新しい記事とかを
見ていくほうがいいですか?
0017デフォルトの名無しさん
2008/05/18(日) 09:26:23The Haskell Programmer's Guide to the IO Monad ― Don't Panic
http://stefan-klinger.de/files/monadGuide.pdf
は、Haskellのモナドを理解するのにおすすめ。
0018デフォルトの名無しさん
2008/05/18(日) 12:25:58100MB程度の音楽データを編集するツールを作ろうと思っているのですが、
音楽データを格納するための型のお勧めは何ですか?
0019デフォルトの名無しさん
2008/05/18(日) 12:39:36音楽ツールのことは良く知らないから一般的なことだけ言うと、
Haskellで配列っぽいデータを扱うときに一番空間効率がいいのは非ボックス化配列
(具体的にはUArrayかIOUArrayかSTUArray)で、Cの配列と同じくらいコンパクト
ただし、これは生の配列だから切ったり貼ったりするのには向かない
切り貼りしたいなら、「非ボックス化配列を葉とする木」みたいな構造が必要かも
ところで音楽編集ソフトって全部メモリ上で作業するんだろうか
0020デフォルトの名無しさん
2008/05/18(日) 22:20:25ありがとうございます。文系なので理解できるか不安ですがw。
一通りの基本構文については馴染んできたと思うので、もう少し
アプリ全体の構成などについての解説文書みたいなものって
ありますでしょうか。
或いは、モナドもその一つだと思うのですが、関数型によるプログラミング
テクニックというんでしょうか、そういったものがもう少しまとまっている
本があると嬉しいんですが。
0021デフォルトの名無しさん
2008/05/18(日) 23:25:58細かいこと考えないのが吉なのか凶なのか。
0022デフォルトの名無しさん
2008/05/18(日) 23:34:120023デフォルトの名無しさん
2008/05/18(日) 23:37:22真理?なにそれ食えるの?
0024デフォルトの名無しさん
2008/05/18(日) 23:40:594 :: Int
は絶対的な真理じゃね?
0025デフォルトの名無しさん
2008/05/18(日) 23:50:330026デフォルトの名無しさん
2008/05/19(月) 00:15:42ささ、次行きましょう
0027デフォルトの名無しさん
2008/05/19(月) 00:16:50その例のようなことが成り立つ数体系が便利だから、
たまたま人間が採用して「正しい」として使ってるだけとも言える
とはいえ、「数学は人間の存在にかかわらず成立するから
数学はこの世の真理の一つだ」と主張する哲学者もいたような
0028デフォルトの名無しさん
2008/05/19(月) 00:19:330029デフォルトの名無しさん
2008/05/19(月) 00:22:380030デフォルトの名無しさん
2008/05/19(月) 00:27:10言葉が足りなかったな
Haskell98における式「4」は、Haskell98における型式「Int」で表される型を持つ
と言えばよかったか
もちろんHaskell98ってのは地球でBC1998年に定義された「あの」Haskell98のことで、
「型」とか「式」とかの術語はHaskell98の仕様に従って解釈するものとしてね
0031デフォルトの名無しさん
2008/05/19(月) 00:49:11真理の意味が分かってないんだろ
0032デフォルトの名無しさん
2008/05/19(月) 00:52:180033デフォルトの名無しさん
2008/05/19(月) 00:53:52まことのことわり。
コレは絶対の真理。
0034デフォルトの名無しさん
2008/05/19(月) 00:55:36例:HaskellスレはHaskellを論ずる為に存在している
これでおk?
0035デフォルトの名無しさん
2008/05/19(月) 00:55:400036デフォルトの名無しさん
2008/05/19(月) 00:59:02そこから >>31 を導出するのは至難だなw
0037デフォルトの名無しさん
2008/05/19(月) 01:04:010038デフォルトの名無しさん
2008/05/19(月) 01:06:01理系に限らず2chの雑談はどこもこんな感じです。
0039デフォルトの名無しさん
2008/05/19(月) 01:07:30春か?春だからなのか?
0040デフォルトの名無しさん
2008/05/19(月) 01:19:01修飾語は強調する為にも使うけど、意味内容の重複は許されないという主張?
0041デフォルトの名無しさん
2008/05/19(月) 01:25:540042デフォルトの名無しさん
2008/05/19(月) 01:31:460043デフォルトの名無しさん
2008/05/19(月) 13:06:150044デフォルトの名無しさん
2008/05/19(月) 13:50:330045デフォルトの名無しさん
2008/05/19(月) 18:57:28+とか++とかもあってよくわからないのですが
0046デフォルトの名無しさん
2008/05/19(月) 19:25:42× haskell4000年の歴史
○ AD
0047デフォルトの名無しさん
2008/05/19(月) 19:41:15解らないなら使うな以上
0048デフォルトの名無しさん
2008/05/19(月) 19:46:25(+) は Integralクラスのインスタンス、つまり数の加法。
(++) は リストの結合。[1, 2, 3] ++ [4, 5, 6] は [1,2,3,4,5,6]。
(+++) は Arrowの合成かなにかに使う。Arrowは俺も良くわかんないし、まあ知らんでもプログラムは書けるから気にするな。
0049デフォルトの名無しさん
2008/05/19(月) 19:46:290050デフォルトの名無しさん
2008/05/19(月) 19:49:24失敬!(+)はIntegralじゃなくてNumクラスのインスタンスの加法だな。
0051デフォルトの名無しさん
2008/05/19(月) 20:03:27「16文字のString型」という定義は型定義の段階でできるのでしょうか?
0052デフォルトの名無しさん
2008/05/19(月) 20:11:35ありがとうございます
0053デフォルトの名無しさん
2008/05/19(月) 20:14:01絶対の真理
005420
2008/05/19(月) 22:42:22ちなみに自分は理系人間に対しては羨望の眼差しで見ています。
The Fun of Programming って読んだ方いらっしゃいますでしょうか。
0055デフォルトの名無しさん
2008/05/19(月) 23:25:55彼女ができると聞いたのですが
みなさんは彼女いてますか?
0056デフォルトの名無しさん
2008/05/19(月) 23:39:5555人ぐらいいるよ。
0057デフォルトの名無しさん
2008/05/20(火) 03:13:47そんな教科書ばっか読んでなにがしたいの?
>>20
Haskellで書かれたアプリのコード読め。
0058デフォルトの名無しさん
2008/05/20(火) 22:55:170059デフォルトの名無しさん
2008/05/20(火) 23:03:23今はもっと洗練されてる。
0060デフォルトの名無しさん
2008/05/21(水) 00:08:320061デフォルトの名無しさん
2008/05/21(水) 01:40:02それってリトル隙間の姉妹本?
0062デフォルトの名無しさん
2008/05/21(水) 02:51:300063デフォルトの名無しさん
2008/05/21(水) 03:51:48まってないで作って公開しろ
0064デフォルトの名無しさん
2008/05/21(水) 23:00:47今って例えばどれ?
0065デフォルトの名無しさん
2008/05/22(木) 03:04:27古いというか、力技で作ったって感じ。
>>59はFRPを念頭においてるんだろうけど、
FragのObjectBehaviorなんかが洗練されてるのかは微妙。
0066デフォルトの名無しさん
2008/05/22(木) 19:37:060〜10までの整数を定義した型というのは宣言できますか?
0067デフォルトの名無しさん
2008/05/23(金) 01:04:34数学基礎論がまるで分からないんだね。
0069デフォルトの名無しさん
2008/05/23(金) 07:10:080070デフォルトの名無しさん
2008/05/23(金) 13:34:41沢山あるからどれを読もうか迷ってしまう
このスレ的に、コレは読んでおいて損は無い!って奴あったら教えてくらはい
今のとこ読んだのはImperative functional programmingとLazy vs Strictと
Haskell vs. Ada vs. C++ vs. Awk vs. ...
0071デフォルトの名無しさん
2008/05/23(金) 13:47:070072デフォルトの名無しさん
2008/05/23(金) 13:49:132chは時代遅れ情報しか出てこねーな。noobどもしかいねぇ。
0073デフォルトの名無しさん
2008/05/23(金) 13:53:080074デフォルトの名無しさん
2008/05/23(金) 14:18:52落として読んでみるよー
他にもあったら是非教えてクレクレ
>>72
玄人さん面白かった論文教えて
0075デフォルトの名無しさん
2008/05/23(金) 14:36:10そんな事を言う奴が来るな!
数学なんぞできんでもプログラムはできる!!
0076デフォルトの名無しさん
2008/05/23(金) 14:49:15手続き型にどっぷり浸かった後で関数型言語を触って嵌ってしまったやつは
やつは皆計算機科学の世界に飛び込み二度と帰ってこなくなっちまうものなのさ
「コード書いてるより数式弄くってるほうが楽しいおwwww」
俺の同僚の最後の言葉さ・・・
0077デフォルトの名無しさん
2008/05/23(金) 16:03:560078デフォルトの名無しさん
2008/05/23(金) 18:02:35いまいちメリットが無いんだよなぁ。
前のコードの方が短かったし、arrowにしたせいで複雑になってしまうことも多々ある。
arrowのメリットを具体的に教えてくださいよ。
論文読んでみてもarrowのうまみが伝わってこないんだよね。
0079デフォルトの名無しさん
2008/05/23(金) 18:31:300080デフォルトの名無しさん
2008/05/23(金) 19:12:20arrowを使ったほうが分かりやすいって感じる人も少しはいるでしょうから
そういう人が勝手に使ってればそれでいいんでしょう
008136 ◆K0BqlCB3.k
2008/05/23(金) 19:20:21008236 ◆K0BqlCB3.k
2008/05/23(金) 19:21:01■ このスレッドは過去ログ倉庫に格納されています