[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 10/27 09:49 / Filesize : 225 KB / Number-of Response : 933
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



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の仕様により、行頭の半角スペースは表示されません。
 コードをインデントしたいときは、代わりに または全角スペースを使うことができます。


858 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 12:06:08 ]
unsafeInterleaveIO :: IO a -> IO a
unsafeInterleaveIO (IO m)
= IO ( \ s -> let
r = case m s of (# _, res #) -> res
in
(# s, r #))

この#って何なんですか?ghc6.8.2ではエラーになりますし…

859 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 12:38:02 ]
>>858
unboxed tupleってやつだね。
itpro.nikkeibp.co.jp/article/COLUMN/20070206/260872/?ST=develop&P=2

>>856
Windows版を入れてみたんだけど、ライブラリの置き場所がキモイな。
6.8だと$topdir/lib以下に入ってたのが6.10.1だと$topdirに入ってる。
キモイし$topdirの見通しも悪いので6.8と同じように$topdir/libの中に移動して
package.confの中の$topdir\\を$topdir/lib\\に全置換した。

860 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 14:29:51 ]
>>859
ありがとうございました
拡張構文なんですね

861 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 23:45:00 ]
weakリダクションって何?

862 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 00:10:49 ]
googleで検索したらひっかかったので、ここに書かせていただきます。質問していいでしょうか?

Haskellの処理系だけを使って、prologみたいなことができないか調べています。
↓でprologのタプル parent(tom, bob). のような感じにすると、

parent::[Char]->[Char]->Bool
parent "tom" "bob" = True
parent "liz" "bob" = True
parent "mike" "liz" = True
parent _ _ = False

とりあえず、
main = print $ parent "tom" "bob"
main = print $ parent "mike" "bob"
で True や False が出て、prologっぽくなります。

そこで、
parent X "bob"
という質問に対し、
X=tom
X=liz
みたいに変数にユニファイするような定数を手に入れるような仕組みってあるでしょうか?

入門書に、コンパイル時に内部でグラフを作るみたいな話が書いてあったので、
そのグラフを参照できるようなことができれば実現できると思うのですが、無理でしょうか?

863 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 00:23:23 ]
>>862
無理
Haskellの関数は文字通り関数なので、引数を放り込んで結果を観察する他に使い道は無い

864 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 00:43:20 ]
中間形式のグラフみたいなの見れないのん?

865 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 01:15:29 ]
中間形式のグラフって何?
グラフ簡約のことを言ってるのなら、グラフが作られるのは実行時だし、
要するに「未評価の式」を表してるだけだから、それを見ても>>862みたいなことをする助けにはならんよ

866 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 01:27:35 ]
少なくとも書こうとしてるプログラムの中からは見れない。
Haskellって厳格な言語で、その手の変なことは基本的にできないよ。
何をやりたいのか知らないけど、インタプリタ的なものを書いて、
それをライブラリとして使えば?



867 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 01:38:05 ]
ん、普通にMaybeとかそれ以前にListモナドとか使えば普通に実現出来るって云うかモナドのすべて読んだ方が良いと思うよ

868 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 02:16:43 ]
関数から引数への参照は、関数が展開されても複数の場所から同じ場所を参照するという話と、
先にグラフを作って、実行時に、そこにデータを流し込むような感じの説明があったから、
処理系をそのまま利用して、かなり高速なデータベースが作れると思ったんですけどダメですかね。

実現できればprologよりも表現能力が高いから面白そうだと思ったんですが。

869 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 03:27:38 ]
>関数から引数への参照は、関数が展開されても複数の場所から同じ場所を参照する
これはその通り

>先にグラフを作って、実行時に、そこにデータを流し込む
これはぜんぜん違う
多分どこかで誤読してると思う

870 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 11:40:05 ]
>>867
zs <- everything
append [1..100] [1..100] zs
こういうやり方じゃ生きてるうちに終わらないかもよ。
Listモナドは、もちろんユニフィケーションや制約伝播なんて無くて、
総当りで解を求めようとする非決定性計算ってだけなんで。

871 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 11:50:02 ]
yet another embedding of pure Prolog into Haskell
okmij.org/ftp/Prolog/Arithm/DefinitionTree.hs

いまいち使い方はわからんけど、ググったら見つかったので貼っておく。

872 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 20:48:35 ]
>>870
failや[]で枝狩り


873 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 00:44:22 ]
>>872
変数をどう表現して、何をどう枝刈るの?


874 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 08:25:24 ]
887 名前:デフォルトの名無しさん[] 投稿日:2008/11/22(土) 00:28:37
Real World Haskellは糞本だと思う

875 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 12:49:16 ]
出版されたの?

876 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 23:01:38 ]
出版されたかは知らないけど訳してる人がいる
ttp://d.hatena.ne.jp/mokehehe/20081124/rwh



877 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 23:27:23 ]
始まったばかりにしても、ひでえ訳

878 名前:デフォルトの名無しさん [2008/11/25(火) 23:41:58 ]
Real World Haskellって翻訳本が出ると思いますか?
マイナーな言語だけど、微妙にブームになってるし
来年ぐらいに出版されたりするかなあ?

879 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 23:48:26 ]
確かに一時期あったけど、とっくに沈静化したような…>ブーム

880 名前:a36 ◆K0BqlCB3.k mailto:sage [2008/11/25(火) 23:50:52 ]
>>879
最近は沈静化したように見せかけて、ジワジワきてるよ。
各大学の卒研レベルではHaskellやったりしてるところが増えてきてる。

881 名前:デフォルトの名無しさん [2008/11/26(水) 00:04:13 ]
うーん、訳の出来とは別になんか期待できなさそうな感じ


882 名前:a36 ◆K0BqlCB3.k mailto:sage [2008/11/26(水) 00:08:27 ]
原文自体平易な英文なので今後のことを考えるなら英文に慣れるために原文で読むことをお勧めします。

883 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 00:12:16 ]
まだ10章までしか読めてないけど
ふつケルの次くらいに読む分には悪くないと思う>RWH

タダだし

884 名前:デフォルトの名無しさん [2008/11/26(水) 00:17:39 ]
本買おうと思ったけど、WEBで読めるわけだし
翻訳本が出るまでそれですまそうかなw

885 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 00:19:34 ]
RWHクソだろ〜
11章からはページを増やすためにネタを書きましたって
レベルのオナねたのオンパレードだぞ

886 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 00:36:34 ]
RWHってネットでもう出回ってるんだなw



887 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 00:45:56 ]
出回ってるつーかあれを最近本にしたんでしょ?

888 名前:デフォルトの名無しさん [2008/11/26(水) 00:49:09 ]
存在型ってなんですか?

889 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 01:23:56 ]
バキシルとか大麻のことだ

890 名前:デフォルトの名無しさん [2008/11/26(水) 01:48:33 ]
ありがとうございます。

891 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 07:48:38 ]
>>888
Cardelli読め

892 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 13:02:02 ]
Haskell: The Craft of Functional Programming

Programming in Haskell
のどちらがお勧めですか?ふつけるの次くらい。

893 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 21:24:32 ]
>>884
下手糞な翻訳の恐れ大。最近多いね、いや昔からか

894 名前:デフォルトの名無しさん [2008/11/26(水) 22:52:49 ]
Programming in Haskellはいいよ。ふつけるの前でもいいです。

895 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 19:14:12 ]
>>892
自分はふつけるの後にCraftでした。というか、その間にSICPが
あるので、あんまり参考にならないかな。ふつける読んでも
ちょっとピンとこなかったんですね、よくまとまってるとは思うのですが。

自分は普通の文系プログラマで、関数型プログラミングの世界とは
無縁だったので、SICPをくぐる必要があったと感じてます。


896 名前:デフォルトの名無しさん [2008/11/27(木) 19:30:50 ]
Craftはいつ第3判が出るのですか?



897 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 19:55:34 ]
Craft第2版以降で目立ったHaskellの技法というと、Arrowぐらいでしょうか。

あとはReal Worldみたいな実用面を書いたものになりますかね。

898 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 20:02:06 ]
ガンズのニューアルバムが出るころに出版されるそうです。

899 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 20:17:32 ]
それは出版されないってのとどう違うのだ

900 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 22:32:12 ]
泳げる頃にh(ry

901 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 23:59:30 ]
1版ならともかく3版なら別に出なくてもいいんじゃね

902 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 00:04:26 ]
Implementing Functional Languages: a tutorial

ってのをやってますが、練習問題の回答とかどっかに転がってますでしょうか。

903 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 11:25:49 ]
>>902
著者本人が公開してる。あとは自分で探せクズ。

904 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 11:27:36 ]
>>903
おめーがクズだろ
この引きこもりw

905 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 21:15:40 ]
自演乙

906 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 22:05:13 ]
Haskellで書かれた数式処理ソフトがあると聞いたのですが
maximaと比べると
言語から直接利用するときの利用しやすさは、どんな感じなのでしょうか?



907 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 09:20:37 ]
PJの答を探しているクズ、どこのゼミ生かしらんが、これで次の輪講はアウトだなwww

908 名前:902 mailto:sage [2008/11/30(日) 09:56:28 ]
>>907
自分では探してみましたが、部分的なコードだけしか見つけられませんでした。

ちなみに、自分は学生ではないんです。輪読の場があったりしたら入りたい
ですけど、ちょっと今は時間的に厳しいかな。ネットでやってたりするといいん
ですが。

909 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 16:00:41 ]
探すもなにも、入手方法ちゃんと書いてあるじゃんwww

910 名前:デフォルトの名無しさん [2008/11/30(日) 21:28:44 ]
>>896
2021年4月19日に出るみたいです。
まだ相当先ですね。

911 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 20:25:35 ]
どんどん延期してると思ったら
今度はありえないくらいに延ばしたな・・・

912 名前:デフォルトの名無しさん [2008/12/07(日) 12:54:19 ]
ghci の補完って windows じゃ効かないんですかね。
Linux 上だとちゃんと動いて便利だったのでショックです。

ネット探してみると rlwrap 使えとかあったけど
rlwrap って動的な補完(スコープ内の関数一覧等)
って可能なんでしょうか。

913 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 13:54:21 ]
そんな高度な補完はemacsのinferior-haskellとかeclipseの拡張でもできるかどうか怪しいな

914 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 13:56:28 ]
英語配列30g早く!

915 名前:902 mailto:sage [2008/12/07(日) 20:05:48 ]
>>909
書いてありました。これって個人でも送ってくれるのでしょうかね。

ただ、まだ半分ぐらいなんですけど、問題簡単なので別に解答不要
になりそうです。ありがとうございました。

916 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 18:52:49 ]
do記法と(>>=)の対応についてですが、
do;putStr "a\n";putStr "b\n";putStr "c\n";

putStr "a\n" >>= (\_->putStr "b\n" >>= (\_-> putStr "c\n"))
なんですかね?

右結合的になったり匿名関数に変換されたりと難しいです



917 名前:a36 ◆K0BqlCB3.k mailto:sage [2008/12/13(土) 19:06:24 ]
>>916
一緒です。
でも
putStr "a\n">>putStr "b\n">>putStr "c\n"
と書いた方がきれいですよ。

918 名前:a36 ◆K0BqlCB3.k mailto:sage [2008/12/13(土) 19:06:57 ]
あと、括弧なくても良いですよ。

919 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 10:36:09 ]
なるほど、そう言えばlambda式ってかなり優先順位が高いんでしたね
ありがとうございました

920 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 15:42:38 ]
F#からポロロッカしてきました

fold/undold、flip とかを使った関数合成がすげえ苦手なんですが
このあたりに特化した書籍とかってないでしょうか

モナドとか継続とかはわりとどうでもいいんですが

921 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 16:19:34 ]
プログラムの変形やそこで使う公式を見るのがいいと思う。
birdがそういうの得意な人だから、
Introduction to Functional Programming using Haskell
www.amazon.com/Introduction-Functional-Programming-using-Haskell/dp/0134843460/
"Using Haskell"じゃない前の版の方がその辺は内容が濃かった。

The Algebra of Programming
www.amazon.com/Algebra-Programming-Prentice-Hall-International-Computer/dp/013507245X/
は関数合成、変形ドリルみたいな内容だった。
たしかparserを必要な機能を持つように変形する論文もあったはず。



922 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 17:06:40 ]
undoldって何かと思ったけど、unfoldの間違いだよね?


923 名前:920 mailto:sage [2008/12/14(日) 17:19:51 ]
間違いですw

>>921
ありがとう
Introduction〜とRealWorldHaskellをぽちってみました
下は高杉…

924 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 17:13:13 ]
yet another haskell tutorialの4.6で

cfold' f z [] = z
cfold' f z (x:xs) = f x z (\y -> cfold' f y xs)

という継続fの与え方次第でfoldlにもfoldrにもなるものが出てきたんですが
普通のfoldlやfoldrの定義からこれを導きだす手順のようなものがあるなら知りたいです

また「なんでも再帰」流に一つ引数増やして、最後にそれを必ず呼び出すようにして
末尾再帰の形に直していく…ってやり方で書こうとしてますがさっぱりです

925 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 12:48:15 ]
面倒だからfactorialで書くと、
fac 0 = 1
fac n = n * fac (n-1) なのか
fac n = fac (n-1) * n なのかってことだから、

fac n = ((n *) . fac) (n-1)あるいは、
fac n = ((* n) . fac) (n-1)

fac n = (((\m ->(m *)) n) . fac) (n-1)あるいは、
fac n = (((\m ->(* m)) n) . fac) (n-1)

fac0 f n = ((f n) . (fac0 f)) (n-1)で
fac0 (\m ->(m *)) nあるいはfac0 (\m ->(* m)) n

\m ->(m *)と\m ->(* m)は、
fac(n-1)を計算した後にすべき計算、つまり継続になっています。



926 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 12:51:01 ]
要するにfoldってのは累積を計算しているのだから、
その累積演算を関数に独立させると、foldの性質上、継続的になるのです。
mapだとこうはなりません。



927 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 22:40:24 ]
>>926
ところがどっこい、この説明のすぐ後で、
「CPSを使ってmapとfilterを書け」なんて演習問題が出されてるわけですよ。

それを考えると、foldlの定義からcfold'へ持っていってあげたほうが
親切かもしれません。

928 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 22:53:36 ]
あっと、「この説明」ってのは
「yet another haskell tutorial の cfold' の説明」のことね。

929 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 23:38:03 ]
>>927
cfold'は、元のfold*の引数に渡す演算自体が継続的になるのに対して、
mapでは引数に渡す演算ではなくて、:が継続的になるわけです。
だからYAHTでは微妙に表現を変えています。
map f = foldr (\x -> ((f x) :)) []
ですから当たり前ですけども。

930 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 19:38:36 ]
>>929
すまん、「継続的」という言葉の意味がさっぱり分からん。
CPSにしたときに最後に行われる計算、という意味なら、
foldlは「foldl」自体が継続的、
foldrは引数として渡す関数「f」が継続的ということになるので、
fold*で継続的となる関数が同じになるとは思えない。

931 名前:デフォルトの名無しさん [2008/12/21(日) 19:58:16 ]
おそらく激しいFAQだとは思うのですが、日本語の扱いについて。
Charの仕様からして、 >>5の「i. CharをUnicodeとして扱う」が筋と思いますが、
リテラルはともかく、IOでの変換のスタンダードな方法はもう固まってきてるでしょうか。
blog.kfish.org/2007/10/survey-haskell-unicode-support.html によると、
メジャーな方法が3つあるらしいですが、どれか、もしくはどれかがdefactoになっているでしょうか。
Haskell'でも使えるのがいいですが…。

932 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 22:14:48 ]
utf8-stringっぽいかな‥‥






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<225KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef