トップページtech
768コメント261KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001潜伏していた1NGNG
何とか生き残れました。
前スレ
http://pc.2ch.net/test/read.cgi/tech/996131288/l50

関連 >>2 以降
0159153NGNG
>>157
てひひひー。C#は全然把握してないッスー。
0160デフォルトの名無しさんNGNG
C#っていってももともとは.net frameworkのために作られた言語だからね。
シンタックスだけはJavaに似てるけど。逆に言語から仮想環境を想定するとしたら
どんなものになるんだろね。Hakell、というより関数型言語全般のために
作られたようなもの。あるとしたらどんなもんでしょ?
0161153NGNG
仮想環境ッスかー?何ッスかー?
0162デフォルトの名無しさんNGNG
Parallel Graph reduction Virtual Machine (PGVM) ?
0163134NGNG
>>135
>ストリームは「いくらでも長くなりうる列」というデータだ。
確かに漏れも、そう思います。ストリーム()
しかし、haskellのモデルではIO入出力はストリーム(ぎリスト)ではないですよね。
ということは結局、評価の順序が入出力に影響するはずですよね。
評価の順序を強制するためにモナドというものを利用しているんじゃないですかねー?
どうなんでしょ。
0164デフォルトの名無しさんNGNG
http://www.yfcbookshelf.com/ml_lisp_scheme.htm
ここの下の所に「Programming Languages:Concepts and Constructs 2/E」
の「日本語訳版を期待」という文字が見えるんですが、今翻訳中なのでしょうか?
もしそうなら超期待!!

>>158
どうも効率面を問題にされているようですが、
私自身たいして関数型言語の経験はありませんが、
仕事の関係上感じている事です。
コンパイラ作ってると、この副作用がないというのが
結構オプティマイズに有効だったりするので、
結構これからの言語の核にすえるのは悪くないと最近思ってます。
計算の依存関係が明白でないと最近のスーパスカラーみたいに
命令スケジュールが必要だと面倒です。
全体的とはいわなくても部分的には関数型言語が高速化への寄与大きいと考えています。
計算機の並列度が上がってくると、少し考え方を変えてみるのも悪くはないと思っています。
ちなみにモナドはあんまり良くわかっていません。(TT)
だれか教えてくれー
0165デフォルトの名無しさんNGNG
>>163
昔のバージョンではストリームでI/OやってたんだよHaskellは。
I/Oエラーが扱いにくくってなあ…

モナドの方が楽だよ。
0166134NGNG
>>165
本当ですか?
何時の頃のモノなんでしょう?
処理系の名前とバージョンを教えてもらえませんか?

>I/Oエラーが扱いにくくってなあ…
>モナドの方が楽だよ。
たしかに、そうですね。
うーん、モナドから逃げてるのかなー?俺は
0167デフォルトの名無しさんNGNG
モナドを意味づける(動作を定義する)のにストリーム使えるしね。
0168デフォルトの名無しさんNGNG
副作用推進派のかた、もっと高階関数を活用してみては
どうでしょう?
関数も各引数を繋ぐための糊だと考えると
副作用が無いほうが嬉しいのでは?
0169158NGNG
>>164
効率は計算機上での実行の際のことです。
・・・・・・というか効率を考えた動作をガチガチにプログラマが記述する際に
場合によってはあるほうが便利ということですね。

一方、最適化のためのプログラムの解析においては
一般に副作用がないほうがやりやすいのは確かだと思います。
だからこそ代入を消してSSAなんて形式に落としたりもするんでしょうし。
0170158NGNG
>>168
行列を配列並みの高効率で実装できる方法があるなら是非そう致したいと。
0171158NGNG
引数で指されるオブジェクトがコピーのコストが気にならないほど小さいうちは
それほど悩ましくないんですが・・・・・・。
0172デフォルトの名無しさんNGNG
>>166
Haskell 1.1まではそういう仕様だった。全ての準拠処理系がそうなって
たはず。stream I/Oとcontinuation-based I/Oの両方が使えた。

http://www.haskell.org/definition/haskell-report-1.1.tar.gz

Monadic I/Oがあんまり便利なんで今は全部そっち。
0173デフォルトの名無しさんNGNG
>>170
配列使えばいいじゃん。副作用なしの。
SISALっていう関数型言語がそうやって、スーパーコンでも
Fortranに負けない性能出してたよ。

Fortran厨は他の言語が書けなかったので普及しなかったが。
0174デフォルトの名無しさんNGNG
なんかこのスレ人増えたな。
0175158NGNG
>>173

 http://www.sys.uea.ac.uk/~jrwg/Sisal/index.html

を読んで見てるけど、やたら配列に特化した言語だなぁ。APLを思い出したよ。
サワリの部分を読んでの感想としては、
配列に特化した構文が多すぎるし、拡張性にも疑問が残る。
この言語を実装する上で研究された内容(解析や最適化の技術)は有益そうだが、
それをつかって書けと言われると結構苦痛かも。
CやFortranのソースに混ぜられると言われてもねぇ。
0176158NGNG
でついでに、「スーパーコンでも」というよりは
むしろ「スーパーコンのために」開発されたようだ。
スパコン以外にも移植はされているようだが、
どうもメインの技術ははデータ並列っぽい気配が。
もっと詳しく読んでみないと判らない部分もあるが、
そうなると今時のマシンの記憶階層と
マッチするかどうかは些か怪しげ。
0177Super CombinatorNGNG
MonadとInfinite listの関係について知りたければ、
"Comprehending Monads", Philip Wadler読め。面白い。
0178デフォルトの名無しさんNGNG
>>176
文句の多いヤツだな。
0179デフォルトの名無しさんNGNG
>>158>>173 を「Sisal 使えば?」と読んでそうな感じだが
>>173 は「Haskell の副作用無しの配列使え」と言ってるのだろう。たぶん。
0180デフォルトの名無しさんNGNG
>>179
どんな実装してるんでソ。>「Haskell の副作用無しの配列使え」
私が読んだ何件かの「副作用なし配列」の論文は皆頑張っていたけどヤパ−リ
オーバーヘッドが大きくて生の配列ほどには早くない・・・・・・。
0181デフォルトの名無しさんNGNG
>>132
>Prologにカットオペレータ
カットオペレータ思い出した。これでProlog嫌いになった。
ところで、Prologも関数型かな? 副作用ないみたいだし。
真偽の2値のみを返すと考えられるかな。もっとも偽の値が
返ればストップするので真のみ返るが。
0182デフォルトの名無しさんNGNG
>>181
関数型じゃないね。論理型。
項の「値」を求めてるわけじゃない。
定理を満足する変数の値の組(代入)を求めている。

両方を組み合わせた関数論理型ってのもあるけど。
0183第5世代はどうなったNGNG
>>182
論理式の値を求めるのでなく、妥当な推論をするんだった。
unificationできなきゃ終わりという形式だったね。

Hugsのライブラリーに簡単なPrologあるね。
unificationなんかはもともとhaskellにあるから、
簡単に実装できるようだ。
そういえば、カットオペレーターもhaskellで実装
してたかな。
0184デフォルトの名無しさんNGNG
haskellは非正格言語だからデバッグし辛いのでは?
副作用がありまくる手続き型言語や正格言語ではデバッグで
苦労しない。というかデバッグしやすい。

非正格言語の優秀なデバッガって無いからね。
一つでもモデル(非正格言語のデバッガのね)が出来ればね。
0185デフォルトの名無しさんNGNG
Mondrianって言語がHaskellをコンパクトにして
OO対応にしたような言語で、.NETにも対応してるらしい
んだけど、この言語ってどうですか?
http://www.mondrian-script.org/
0186デフォルトの名無しさんNGNG
>>184
ていうか、副作用が無いってのはようするに
思わぬバグが混入しないようにする効果があるわけだから、
デバッグ以前にバグが混入しにくいのでは?
0187デフォルトの名無しさんNGNG
代わりに呼び出し関係が入り組んでくるからねぇ。>>186
やっぱ銀の弾丸はないもんだよねぇ。
0188デフォルトの名無しさんNGNG
>>186
でもバグが無くなる訳ではないでしょ?
仕様のバグという根絶不可能なバグがあるんだから。
やっぱデバッガ必要でしょ。
0189デフォルトの名無しさんNGNG
>>188
既存のデバッガ的な考えは合わないよね。
0190デフォルトの名無しさんNGNG
>>184
副作用がないので
Unit Test あたりが向いてるかも。
0191デフォルトの名無しさんNGNG
http://www.haskell.org/libraries/#testing
のあたりだろうか。
0192デフォルトの名無しさんNGNG
>>188
仕様のバグとデバッガが関係あるんですか?
0193デフォルトの名無しさんNGNG
副作用が無いんだから、
コードの打ち間違いと理論にだけ気をつければ
やっていけます。
0194Super CombinatorNGNG
>>192
帰納推論系の人たちで、
間違った具体例の指摘から仕様を直したり、
なんて事が流行ったよね?

そのengineのUI programはdebuggerと呼ばれることが多かった。
0195デフォルトの名無しさんNGNG
なんじゃそら
屁理屈か
0196デフォルトの名無しさんNGNG
つまり、従来のデバッガの役割は
非常に少なくなると言うことでいいのか?
0197デフォルトの名無しさんNGNG
デバッガの使い道ってバグを取るためだけの物かなー?
0198え?NGNG
デバッガをバグ取りに使わないの?
0199デフォルトの名無しさんNGNG
>>198
プログラミング言語の前に日本語を勉強尻。
0200え?NGNG
>>199
君こそ根。
0201デフォルトの名無しさんNGNG
Stream IOを勉強した頃は、同期関係の bugがあったら取り難そうだなあ、
とおもた。
Monadになったら改善できるのかしらん?
0202デフォルトの名無しさんNGNG
>>198 はすさまじいアフォ
0203デフォルトの名無しさんNGNG
>>201
並列処理の話?
0204え?NGNG
>>199 は、すさまじいエロ
0205デフォルトの名無しさんNGNG
>デバッガの使い道ってバグを取るためだけの物かなー?
他に使い道は?
0206デフォルトの名無しさんNGNG
>>204 ウザイ
「バグ取りの他に使う」と「バグ取りに使わない」の
区別もつかない糞は小1からやりなおせヴォケ
0207デフォルトの名無しさんNGNG
>>206
その前にお前は>>205の質問に答えろよ。
0208デフォルトの名無しさんNGNG
静的なプログラム検証ツールはデバッガの範疇に入るの?
こういうものが作りやすいのが関数型言語の特徴って言われてるから
そっちに期待しちゃうな。あくまで素人の考えだけど。
0209C厨房NGNG
lintはデバッガって言うか?
0210デフォルトの名無しさんNGNG
なんでHaskellスレは厨房がワラワラと寄ってくるんだろ。
無視できない何かがあるんですかねー。
0211206ではないがNGNG
関数型言語にあてはまるかどうかは知らんが、
他人が書いたプログラム(またはライブラリ)を理解するために
デバッガを使って動作を見るのは、けっこうよく使う手だと思う。

>>208
普通は静的な検証ツールはデバッガには含めないと思うけど、
参照透明性の高い関数型言語では、静的/動的の境界はどう定義するんだろう?
例えば多相型の型エラーをデバッグするのって、静的なのか動的なのか…
0212デフォルトの名無しさんNGNG
言語理論に比べて処理系のセオリーが
弱い気がするのは気のせいでしょうか?>>211
0213デフォルトの名無しさんNGNG
>>210
お前のような厨房がな。
0214201NGNG
>>203 並列って言うか、そもそも関数型言語は逐次処理でもないじゃん。
木の好き勝手なところを簡約していくっていうか。
そでで再帰的に定義された無限リストの簡約とかまちがうとこわいな。と。
P.Wadlerの入門書にもそれがらみの話あったよねえ?
0215デフォルトの名無しさんNGNG
関数プログラミングでは、動作手順を記述するわけではないので、命令プログラミングの
動作をステップ実行する従来のデバッグ手法のイメージとはあいいれないかも。

でも、計算順序を無理矢理いれこむ、モナドIO使いまくりのプログラミングなら
命令プログラミングとおんなじだから、print デバッグができるよ。
0216デフォルトの名無しさんNGNG
Windowの表示とかやる場合はモナド使うんですか?
関数型でイベント駆動処理を書くのって、
ちょっと想像できないんですが。
0217デフォルトの名無しさんNGNG
Fudgetあげ
ようとしたけど古いから sage
0218デフォルトの名無しさんNGNG
>>216
GTK+HS のサンプルコードとかみてみれば?
0219デフォルトの名無しさんNGNG
>>216
モナドによるI/Oのコードをじっとみつめると
入力列内の文字種に応じて呼ばれるハンドラの集まりとも見えてくる。
それがメッセージ列に変わったと思えば書けそうな気がしてくる。
0220デフォルトの名無しさんNGNG
>>205
処理系の実行過程の確認
最適化の結果、プログラマーの予想もしないプログラムに変化したりしないとか
その確認をする。勉強にもなるね。
某本にもデバッガでは、シングルステップを使えと載っていた。目から鱗。
0221デフォルトの名無しさんNGNG
>>215
GHCか何かだと、unsafeとか何とかいうモジュールに、
どこでもprintできる関数がなかったっけ。
まさにprintfデバッグのための抜け道として。
0222デフォルトの名無しさんNGNG
>>220
それは要するにデバッガがアナライザだって言ってるだけでは?
そういうのとは微妙に話が違うような気がするなー。
つまり、デバッガにはそういうブラウジング機能とは別に
何かあるって言ってるんだろ?
0223デフォルトの名無しさんNGNG
>>222
いや、デバッグ以外に使い道があるかどうかって話だろ?
だからアナライザとして使ったり、ってのも答えとしてアリだろ。
0224デフォルトの名無しさんNGNG
ナスです。
0225デフォルトの名無しさんNGNG
ウリです。
0226デフォルトの名無しさんNGNG
デバッガっでようするにアナライザだろ。
デバッガがバグを指摘するわけじゃなし。
0227デフォルトの名無しさんNGNG
>>226
書くのが遅い
0228デフォルトの名無しさんNGNG
>>221
遅延評価だと、どのprintが先に実行されるかわかんなくねえ?
そんなんでデバッグできるのか?
0229デフォルトの名無しさんNGNG
>>228
何をデバッグしたいかによるけど。

(文字列やファイルの最終的な内容も含めた)計算結果が
正しければ良いなら、別に求まる順序は重要じゃないよね。

まあprintを使うってことは順序も気にするんだろうから、
もともと$!やseqを使いまくってるんじゃないの?
0230haskellNGNG
age
0231デフォルトの名無しさんNGNG
高階関数に詳しくなりたいので教えて。
0232Super CombinatorNGNG
Bird「関数プログラミング」
http://www.amazon.co.jp/exec/obidos/ASIN/4764901811/qid=1022390348/sr=1-17/ref=sr_1_2_17/250-5692221-3686632
萩谷昌己「関数プログラミング」
http://www.amazon.co.jp/exec/obidos/ASIN/4535608172/250-5692221-3686632
あたりで。
0233デフォルトの名無しさんNGNG
まさみさまがそんな本書いているとはしらなんだ..
竹内先生の Lisp本もじつは読んでないんだよなあ。
0234デフォルトの名無しさんNGNG
日本語で書かれたHaskell本はいつ頃出ますか?
SMLだって出てるのに……。
0235デフォルトの名無しさんNGNG
>>234
日本のHaskellユーザの数が、初回印刷部数(200)を越えたら。
0236デフォルトの名無しさんNGNG
ユーザの数はどうやって数えるんですか?
0237デフォルトの名無しさんNGNG
うちの研究室だけで10人はいるんだから簡単に超えそうなもんだけど(藁
0238デフォルトの名無しさんNGNG
>>237
そこが特別なんじゃないの?
0239デフォルトの名無しさんNGNG
じゃ、漏れが布教用に3冊買ってやるから、早く出してくれよ。
訳本でいいからさ。
0240デフォルトの名無しさんNGNG
つーかさ、200位だったら、
いろんな図書館に要望しまくれば、
なんとかなるんじゃないの?
0241デフォルトの名無しさんNGNG
200じゃだめみたい。
http://www.onweb.to/ken9/log/039.htm
0242デフォルトの名無しさんNGNG
>>237
ここのところ素人も増えてるぞ>オレオレ
0243デフォルトの名無しさんNGNG
有明で売れよ! ってことですか?
0244デフォルトの名無しさんNGNG
>>243
東京ビッグサイトの巨大同人誌即売会サークル抽選当選しますた。
でもジャンルはプログラミング言語とはホド遠いけど(w。
0245デフォルトの名無しさんNGNG
>>244
適当でいいからHaskell本もきぼんぬ
買いに行くから(藁
0246244NGNG
ウチはなんと女装本だぞ。それでも買いに来られるか?(w

って、実際問題としてHaskell本を作る余力はなし。
0247デフォルトの名無しさんNGNG
Haskell本かどうかは分からんが、
R. Birdの「関数プログラミング」第2版を翻訳して出版して欲しい。
流れで近代科学社に。
0248デフォルトの名無しさんNGNG
今売ってる「関数プログラミング」も、
みなしHaskell本では。
0249デフォルトの名無しさんNGNG
ぶっちゃけた話、古いわけよ。
0250デフォルトの名無しさんNGNG
で。
結局、日本語のHaskellの本て有るんですか?
無いんですか?
(というのか無いのか?)
0251デフォルトの名無しさんNGNG
>>237
おどろき。
どんな研究なんだ!?
0252デフォルトの名無しさんNGNG
>>237
ならむしろおまえの研究室で発行しる!
0253デフォルトの名無しさんNGNG
F#のサイトより転載。

Purely functional languages like Haskell
are excellent within certain niches,
but many simple programming exercises
can quickly turn into problems that require a PhD. to solve.

大げさだな・・・
0254デフォルトの名無しさんNGNG
うまいこというな〜
0255デフォルトの名無しさんNGNG
女装+Haskell本期待age
0256デフォルトの名無しさんNGNG
「女装しながら覚えるHASKELL」
0257デフォルトの名無しさんNGNG
「HASKELLによる女装プログラミングの理論と実践」
0258Super CombinatorNGNG
Mocking Bird, "Introduction to Female Attire using Haskell", Price Sale, 2002.
■ このスレッドは過去ログ倉庫に格納されています