トップページtech
981コメント300KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2008/05/17(土) 16:41:29
haskell.org
http://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:00
・日本語の扱いについて

Haskell98によると、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:20
(続き)

3.最近の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:58
質問です

Word8からWord32に変換する方法についてなのですが、
Word8からtoInteger・fromInteger関数を経てWord32に変換する以外に、
クレバーな方法はありませんか?
0009デフォルトの名無しさん2008/05/17(土) 18:54:51
リアルhaskellたん
http://www.haskell.org/croppedhaskell.jpg
0010デフォルトの名無しさん2008/05/17(土) 19:44:18
>>8
n(n-1)個のcastを用意するのが
2n個のcastを用意するよりクレバーだと思いますか?
0011デフォルトの名無しさん2008/05/17(土) 20:00:31
そろそろ、テンプレの GHC 6.6 の日本語の取り扱いについて書き改めて欲しい。
1. ソース中の文字列 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 のコメントに書いてある)
よろしくたのむ、な。
0012sage2008/05/17(土) 20:05:38
>>8
toEnum . fromEnum でよくね
0013デフォルトの名無しさん2008/05/17(土) 21:23:49
>>11
>1. ソース中の文字列 hello = "こんにちは" :: String は UTF-8
これどういう意味?Stringになってしまえば文字コード関係なくね?

>2. これを ghci で表示することは可能
*Main> print hello
"\12371\12435\12395\12385\12399"
こうなった
0014デフォルトの名無しさん2008/05/17(土) 21:25:11
>>8
fromIntegral :: (Integral a, Num b) => a -> b
fromIntegral = fromInteger . toInteger
という関数がある
0015デフォルトの名無しさん2008/05/17(土) 21:41:45
fromIntegralはGHCだといろいろ特殊化されてて効率もいいしな
0016デフォルトの名無しさん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:23
>>16
The 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:58
質問です。

100MB程度の音楽データを編集するツールを作ろうと思っているのですが、
音楽データを格納するための型のお勧めは何ですか?
0019デフォルトの名無しさん2008/05/18(日) 12:39:36
音楽データって波形データ?

音楽ツールのことは良く知らないから一般的なことだけ言うと、
Haskellで配列っぽいデータを扱うときに一番空間効率がいいのは非ボックス化配列
(具体的にはUArrayかIOUArrayかSTUArray)で、Cの配列と同じくらいコンパクト
ただし、これは生の配列だから切ったり貼ったりするのには向かない
切り貼りしたいなら、「非ボックス化配列を葉とする木」みたいな構造が必要かも

ところで音楽編集ソフトって全部メモリ上で作業するんだろうか
0020デフォルトの名無しさん2008/05/18(日) 22:20:25
>>17
ありがとうございます。文系なので理解できるか不安ですがw。

一通りの基本構文については馴染んできたと思うので、もう少し
アプリ全体の構成などについての解説文書みたいなものって
ありますでしょうか。

或いは、モナドもその一つだと思うのですが、関数型によるプログラミング
テクニックというんでしょうか、そういったものがもう少しまとまっている
本があると嬉しいんですが。
0021デフォルトの名無しさん2008/05/18(日) 23:25:58
文系出身のやつって知ったかぶり多いよな。
細かいこと考えないのが吉なのか凶なのか。
0022デフォルトの名無しさん2008/05/18(日) 23:34:12
絶対的な真理は無いという事を知ってるからじゃないかな。
0023デフォルトの名無しさん2008/05/18(日) 23:37:22
理系は論理を重視するんだよ。
真理?なにそれ食えるの?
0024デフォルトの名無しさん2008/05/18(日) 23:40:59
例えば
4 :: Int
は絶対的な真理じゃね?
0025デフォルトの名無しさん2008/05/18(日) 23:50:33
論理は文系だろ
0026デフォルトの名無しさん2008/05/19(月) 00:15:42
はい?俺理系なんで良く分かりません。
ささ、次行きましょう
0027デフォルトの名無しさん2008/05/19(月) 00:16:50
>>24
その例のようなことが成り立つ数体系が便利だから、
たまたま人間が採用して「正しい」として使ってるだけとも言える

とはいえ、「数学は人間の存在にかかわらず成立するから
数学はこの世の真理の一つだ」と主張する哲学者もいたような
0028デフォルトの名無しさん2008/05/19(月) 00:19:33
哲学者なんてはったり言うだけのでくの坊だろ 次行くぞ次
0029デフォルトの名無しさん2008/05/19(月) 00:22:38
理系のやつって細かい事考えないんだな。
0030デフォルトの名無しさん2008/05/19(月) 00:27:10
>>27
言葉が足りなかったな

Haskell98における式「4」は、Haskell98における型式「Int」で表される型を持つ

と言えばよかったか
もちろんHaskell98ってのは地球でBC1998年に定義された「あの」Haskell98のことで、
「型」とか「式」とかの術語はHaskell98の仕様に従って解釈するものとしてね
0031デフォルトの名無しさん2008/05/19(月) 00:49:11
真理に「絶対的」なんて付けてるところを見ると
真理の意味が分かってないんだろ
0032デフォルトの名無しさん2008/05/19(月) 00:52:18
真理の意味をお願いします
0033デフォルトの名無しさん2008/05/19(月) 00:53:52
>>32
まことのことわり。
コレは絶対の真理。
0034デフォルトの名無しさん2008/05/19(月) 00:55:36
真理・・・いつもどんな時も変わることのない、正しい物事の筋道。真実の道理。
例:HaskellスレはHaskellを論ずる為に存在している

これでおk?
0035デフォルトの名無しさん2008/05/19(月) 00:55:40
理系の雑談っていつもこんななの?
0036デフォルトの名無しさん2008/05/19(月) 00:59:02
>>33-34
そこから >>31 を導出するのは至難だなw
0037デフォルトの名無しさん2008/05/19(月) 01:04:01
「真理」は既に絶対的なものだから「絶対的な真理」という表現は「絶対的」が重複しているってことだろ
0038デフォルトの名無しさん2008/05/19(月) 01:06:01
>>35
理系に限らず2chの雑談はどこもこんな感じです。
0039デフォルトの名無しさん2008/05/19(月) 01:07:30
今日はいつにもましてバカが多いな
春か?春だからなのか?
0040デフォルトの名無しさん2008/05/19(月) 01:19:01
>>37
修飾語は強調する為にも使うけど、意味内容の重複は許されないという主張?
0041デフォルトの名無しさん2008/05/19(月) 01:25:54
程度の存在しない物に強調もクソもないだろ
0042デフォルトの名無しさん2008/05/19(月) 01:31:46
あ、強調って分かり辛かったか。念押しだと考えてみな。
0043デフォルトの名無しさん2008/05/19(月) 13:06:15
程度の存在しない物に念押しもクソもないだろ
0044デフォルトの名無しさん2008/05/19(月) 13:50:33
まさに自転車置場の議論
0045デフォルトの名無しさん2008/05/19(月) 18:57:28
+++ってどういう意味なんですか?
+とか++とかもあってよくわからないのですが
0046デフォルトの名無しさん2008/05/19(月) 19:25:42
>>30
× haskell4000年の歴史
○ AD
0047デフォルトの名無しさん2008/05/19(月) 19:41:15
>>45
解らないなら使うな以上
0048デフォルトの名無しさん2008/05/19(月) 19:46:25
>>45
(+) は Integralクラスのインスタンス、つまり数の加法。
(++) は リストの結合。[1, 2, 3] ++ [4, 5, 6] は [1,2,3,4,5,6]。
(+++) は Arrowの合成かなにかに使う。Arrowは俺も良くわかんないし、まあ知らんでもプログラムは書けるから気にするな。
0049デフォルトの名無しさん2008/05/19(月) 19:46:29
>>45 型を見てみろ
0050デフォルトの名無しさん2008/05/19(月) 19:49:24
>>48
失敬!(+)はIntegralじゃなくてNumクラスのインスタンスの加法だな。
0051デフォルトの名無しさん2008/05/19(月) 20:03:27
質問です。

「16文字のString型」という定義は型定義の段階でできるのでしょうか?
0052デフォルトの名無しさん2008/05/19(月) 20:11:35
>>48
ありがとうございます
0053デフォルトの名無しさん2008/05/19(月) 20:14:01
>>51
絶対の真理
0054202008/05/19(月) 22:42:22
「文系」という一言でスレがこんなに伸びるとは思いませんでしたw。
ちなみに自分は理系人間に対しては羨望の眼差しで見ています。

The Fun of Programming って読んだ方いらっしゃいますでしょうか。
0055デフォルトの名無しさん2008/05/19(月) 23:25:55
今日先輩にHaskellできると
彼女ができると聞いたのですが
みなさんは彼女いてますか?
0056デフォルトの名無しさん2008/05/19(月) 23:39:55
>>55
55人ぐらいいるよ。
0057デフォルトの名無しさん2008/05/20(火) 03:13:47
>>16
そんな教科書ばっか読んでなにがしたいの?

>>20
Haskellで書かれたアプリのコード読め。
0058デフォルトの名無しさん2008/05/20(火) 22:55:17
Monagiusは勉強になる。
0059デフォルトの名無しさん2008/05/20(火) 23:03:23
monadiusはもはや古いぞ。
今はもっと洗練されてる。
0060デフォルトの名無しさん2008/05/21(水) 00:08:32
Little Haskeller読んで学習中。日本語版もホスイ
0061デフォルトの名無しさん2008/05/21(水) 01:40:02
>>60
それってリトル隙間の姉妹本?
0062デフォルトの名無しさん2008/05/21(水) 02:51:30
mod_haskell.soまだー?
0063デフォルトの名無しさん2008/05/21(水) 03:51:48
>>62
まってないで作って公開しろ
0064デフォルトの名無しさん2008/05/21(水) 23:00:47
>>59
今って例えばどれ?
0065デフォルトの名無しさん2008/05/22(木) 03:04:27
http://www.geocities.jp/takascience/doc/monadius-kof.pdf
古いというか、力技で作ったって感じ。
>>59はFRPを念頭においてるんだろうけど、
FragのObjectBehaviorなんかが洗練されてるのかは微妙。
0066デフォルトの名無しさん2008/05/22(木) 19:37:06
質問です。

0〜10までの整数を定義した型というのは宣言できますか?
0067デフォルトの名無しさん2008/05/23(金) 01:04:34
>>27
数学基礎論がまるで分からないんだね。
0068初心者修業中2008/05/23(金) 02:23:32
>>66
data Hoge = Hoge0|Hoge1|Hoge2|Hoge3|…|Hoge10

これじゃ駄目?
0069デフォルトの名無しさん2008/05/23(金) 07:10:08
数学できない奴くるな
0070デフォルトの名無しさん2008/05/23(金) 13:34:41
haskell関係の文書(特に論文)を読みたくてhaskell.orgをあさってるんだけど
沢山あるからどれを読もうか迷ってしまう
このスレ的に、コレは読んでおいて損は無い!って奴あったら教えてくらはい
今のとこ読んだのはImperative functional programmingとLazy vs Strictと
Haskell vs. Ada vs. C++ vs. Awk vs. ...
0071デフォルトの名無しさん2008/05/23(金) 13:47:07
Tackling the awkward squad
0072デフォルトの名無しさん2008/05/23(金) 13:49:13
もうここで紹介される論文はすべて読んだんだよなぁ。
2chは時代遅れ情報しか出てこねーな。noobどもしかいねぇ。
0073デフォルトの名無しさん2008/05/23(金) 13:53:08
2chの情報に価値がないと思うなら立ち去ればいいじゃないか!
0074デフォルトの名無しさん2008/05/23(金) 14:18:52
>>71
落として読んでみるよー
他にもあったら是非教えてクレクレ
>>72
玄人さん面白かった論文教えて
0075デフォルトの名無しさん2008/05/23(金) 14:36:10
>>69
そんな事を言う奴が来るな!
数学なんぞできんでもプログラムはできる!!
0076デフォルトの名無しさん2008/05/23(金) 14:49:15
最初のうちはな
手続き型にどっぷり浸かった後で関数型言語を触って嵌ってしまったやつは
やつは皆計算機科学の世界に飛び込み二度と帰ってこなくなっちまうものなのさ

「コード書いてるより数式弄くってるほうが楽しいおwwww」
俺の同僚の最後の言葉さ・・・
0077デフォルトの名無しさん2008/05/23(金) 16:03:56
だからオブジェクト指向が生き残るのですね
0078デフォルトの名無しさん2008/05/23(金) 18:02:35
最近、自作のソースをarrowで設計段階からやり直そうとしているんだけど、
いまいちメリットが無いんだよなぁ。
前のコードの方が短かったし、arrowにしたせいで複雑になってしまうことも多々ある。
arrowのメリットを具体的に教えてくださいよ。
論文読んでみてもarrowのうまみが伝わってこないんだよね。
0079デフォルトの名無しさん2008/05/23(金) 18:31:30
難読化
0080デフォルトの名無しさん2008/05/23(金) 19:12:20
どんなものが分かりやすいかなんて人それぞれだし
arrowを使ったほうが分かりやすいって感じる人も少しはいるでしょうから
そういう人が勝手に使ってればそれでいいんでしょう
008136 ◆K0BqlCB3.k 2008/05/23(金) 19:20:21
arrowを使ったプログラミングでは設計段階で図式化しやすいところにうまみがあるのかな?
008236 ◆K0BqlCB3.k 2008/05/23(金) 19:21:01
ミスってコテハンつけちゃったぜ
■ このスレッドは過去ログ倉庫に格納されています