5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :デフォルトの名無しさん:2006/11/07(火) 21:24:26
haskell.org
http://www.haskell.org/

日本語サイト
http://www.sampou.org/cgi-bin/haskell.cgi
http://shidot.dyndns.org/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/

関連スレは>>2
関連書籍は>>3

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

261 :デフォルトの名無しさん:2006/12/09(土) 15:00:13
>>258
けんのん?

262 :デフォルトの名無しさん:2006/12/09(土) 19:57:47
>>260
いや。ファンクタだけは理解しておいたほうが良いんだよ。
fmapがちゃんとつかえるのと使えないのとでは結構違いがある。
liftMも同じく。

263 :デフォルトの名無しさん:2006/12/09(土) 20:03:31
>>262
圏論を理解していなくても使える。

264 :デフォルトの名無しさん:2006/12/09(土) 20:12:14
使い方を間違える。

265 :デフォルトの名無しさん:2006/12/09(土) 20:20:00
圏論を理解していないとfmapがちゃんと使えないって例えばどんな場合?

266 :デフォルトの名無しさん:2006/12/09(土) 20:41:36
>>261
ふおん

267 :デフォルトの名無しさん:2006/12/09(土) 20:53:03
なんていうか読みづらくなる。

使い方を間違えるって言うのはおかしかったな、すまん。

268 :デフォルトの名無しさん:2006/12/09(土) 21:06:54
ふと思ったんだが、fmapとliftMをHaskellで日常的に
使ってますって人ってどれくらいいるもんなんかな?

連載では多用しているけど。

269 :デフォルトの名無しさん:2006/12/09(土) 21:09:28
つまり、理想的な書き方と比べて意味的には同等だけど
読みづらい書き方になる、ってことか。

どっちにしても例が欲しい。

>>268
fmapは使わないけどliftMは日常的に使う。

270 :デフォルトの名無しさん:2006/12/09(土) 21:20:16
例・・・。そうだな。極端な例だと
`fmap`,`liftM`みたいに中間演算子的に使われると
どういう意図でそれをつかっているのか意味がとれない。

あとは、できるだけ
たとえば
calc :: a -> a
という関数があったらIOモナド用に
calcIO :: IO a -> IO a
calcIO = fmap calc
みたいに使ってもらったほうが構造だけは同一で元となっている
カテゴリーだけが違うということが明確になっていいんじゃないかと
思っている。

うーん。うまく伝わっただろうか・・・。
というかあまりいい方法じゃないのかなとか思ってきた・・・。

271 :デフォルトの名無しさん:2006/12/09(土) 21:29:28
なるべく根本的な関数定義はラムダ計算のカテゴリー内で
やってしまって後はカテゴリーごとにfmapするなりliftさせるなり
したほうが再利用できるようになるし。

sample :: a -> IO a
なKleisli射はなるべく作らない方向性でいくべきなんじゃないかって。

モジュール化も損なわれるんじゃないかと。
でもそこまでいってしまうと作れなくなってしまうというジレンマに陥って
しまうから・・・。どうなんだろうねぇ。。

272 :デフォルトの名無しさん:2006/12/09(土) 21:47:36
>>270
レスありがとう。

>`fmap`,`liftM`みたいに中間演算子的に使われると
>どういう意図でそれをつかっているのか意味がとれない。
これは俺も時々やるんだが、気持ち悪いと感じるのはたぶん分かった。
圏論の観点からはfmapは(射に作用する)単項演算であって
二引数関数のように使うのは不自然だ、ということか。(素人なので間違ってたら教えてくれ)

このスタイルを弁護しておくと、Haskellではあらゆる場合について
(g f) x

f `g` x
が等しいので、後者を見た読者は前者を見たのと同じように理解することが期待されている。
だから、両者を単純に字面上のおさまりに基づいて使い分けることができる、という考え方が
あり得ると思う。例えば f x の代わりに f `id` xと書くのがそんなに変だろうか。
加えて、それを言い出すと(>>=)だって圏論的には一引数の演算なんじゃないか、とか。

calcの例は理解できなかった。せっかく説明してもらったのにすまん。

273 :デフォルトの名無しさん:2006/12/09(土) 22:01:34
>>271
それは例えば標準入力からCSV形式のデータを読みたいときに、
getCSV :: IO [String]
のようなものをgetChar/getLine/getContentsを使って書くよりも、
parseCSV :: String -> [String]
を用意してユーザ側でfmap parseCSV getContentsとさせた方が良い、
という理解でおk?
それなら多くのHaskellユーザが経験的にやってることだと思うんだが。

274 :デフォルトの名無しさん:2006/12/09(土) 22:19:06
>272

>圏論の観点からはfmapは(射に作用する)単項演算であって
>二引数関数のように使うのは不自然だ、ということか。(素人なので間違ってたら教えてくれ)

その通り。というかそう自分としては解釈している、というほうが適切かな。
人によっては他の翻訳もありうると思う。

>このスタイルを弁護しておくと...

そういうスタイルがあることは最近知った。
前スレで出てきたLaw and Order in Algorithmicsってpdf内が
そういう流儀だったしおかしくはない。
でも、個人的に同一カテゴリー内の射(a -> a, IO a -> IO a)
なら「有り」だとは思うけど、fmapとliftMの場合そうやっちゃうと
ファンクタとかリフトって概念を持ち出す意味がなくなる。

>加えて、それを言い出すと(>>=)だって圏論的には一引数の演算なんじゃないか、とか。

圏論的には(>>=)は概念的にfmap,liftMの持つ概念と別種。
(といいつつそこらへんはよくわかっていないからどうともいえない
というのが本音。別種であるのは確か)


275 :デフォルトの名無しさん:2006/12/09(土) 22:23:20
>calcの例は理解できなかった。せっかく説明してもらったのにすまん。

>圏論の観点からはfmapは(射に作用する)単項演算であって

ということなんだけどちょっと例が少なかったか。
(というか勝手な見解だからあんまり惑わされないでくれ)

というわけでもっと例をあげると
calcMaybe :: Maybe a -> Maybe a
calcMaybe = fmap calc

calcList :: [a] -> [a]
calcList = fmap calc

calcF :: F a -> F a
calcF = fmap calc   Fは任意のFunctorクラス。

みたいなかんじに使えないかと。
・・・でも、やっぱり適用できる場面はそんなに無いか・・・な。

>>273
そういうこと。そしてそれがファンクタの概念。
経験的にわかっていることならこの際明確にしてしまおう。

276 :デフォルトの名無しさん:2006/12/09(土) 22:25:37
なんかえらそうに書いてしまったが
これはすべて個人的な勝手な解釈だ。

277 :デフォルトの名無しさん:2006/12/09(土) 22:41:30
なんかレスくれ。いろいろと穴はあると思うし。

278 :デフォルトの名無しさん:2006/12/09(土) 23:04:44
>>275
>みたいなかんじに使えないかと。
つまり、IOならIOについて(fmap calc)をひとかたまりとみなすべきであり、
そういうスタイルを奨励するためにcalcIOという名前を付ける、ということか。逆に
do x <- a; b (calc x)
のようにcalcの適用をdo式中に散逸させたりすると、
この構造がわかりにくくなるので良くない、と。
ただ、相変わらずこのように書くことの現実的利益がわからない。
>構造だけは同一で元となっている
>カテゴリーだけが違うということが明確になっていいんじゃないかと
>思っている。
の部分。

>経験的にわかっていることならこの際明確にしてしまおう。
もちろん明確にするのは価値があると思うし、そういうのは
個人的に好きな方向性だけど、もともとの議論に関して
「圏論を知らないとHaskellを使うのにどれくらい支障があるか」という点については、
はっきりさせておきたかった。俺としてはHaskelll(のような言語)が
真に一般に普及してほしいと思っているので、経験だけではカバーできない
重大な困難があるかどうかが気になった。

279 :デフォルトの名無しさん:2006/12/09(土) 23:52:51
>>278
>つまり、IOならIOについて(fmap calc)をひとかたまりとみなすべきであり、
>そういうスタイルを奨励するためにcalcIOという名前を付ける、ということか。

いや、そこまで強くは言っていない。名前付けたのはわかりやすくするためで
>>273みたいな名前付けない使い方が一般的だと思う。
というか経験的にすでにわかってることなんだと思う。

>ただ、相変わらずこのように書くことの現実的利益がわからない。

考えを整理できるとかそういう部類で現実的利益といわれると無いね・・・。

>「圏論を知らないとHaskellを使うのにどれくらい支障があるか」という点については、
>はっきりさせておきたかった。俺としてはHaskelll(のような言語)が
>真に一般に普及してほしいと思っているので、経験だけではカバーできない
>重大な困難があるかどうかが気になった。

Haskell使用するというレベルでは圏論の知識の有無による
困難は表面的には無い。が根源的には結構困難があると思う。
おそらく人のコードを読むという段階であらわに出てくるハズ。
fmapにしたってファンクタの概念をつかって圏論チックな考え方で
使おう思っている人と、そうじゃない人だと使い方が違う。
そういうのが積み重なって人によってはその書き方の意図が
読めないコードというのが出てくると思う。
そういう意味では結構困難がある。
まぁ要するにコーディングスタイルの問題。
圏論的なものを取り入れたHaskellコーディングスタイルを確立する
のかあくまで経験的なコーディングスタイルを確立するのか。

うーむ。なんだかグダグだになってしまった。
とりあえずfmap,liftMは便利じゃね?ということを
最初は説明したかったんだがものすごく言葉足らずでスマン。

280 :デフォルトの名無しさん:2006/12/10(日) 00:39:38
>>279
「現実的利益」なんて嫌らしい言い方をしたが、ようするに
「それで何がうれしいのか」を聞きたかっただけだった。
「考えを整理できる」というので十分。
>考えを整理できるとかそういう部類で現実的利益といわれると無いね・・・。
圏論的な考え方を身につけた人にとって考えを整理しやすい書き方、ということでいいだろうか。

>Haskell使用するというレベルでは圏論の知識の有無による
>困難は表面的には無い。が根源的には結構困難があると思う。
>おそらく人のコードを読むという段階であらわに出てくるハズ。
いいたいことはたぶん分かった。もちろん実感として分かるわけじゃないので
自信を持って理解したとはいえないが。
俺としては、「表面上」支障がなければそれで十分だと思う。
例えばライブラリを提供する/使うだけならスタイルの不一致は問題にならないし。

しかし冷静に考えると、表面上支障がないというのは誰に聞くまでもなく俺が
身を持って知っていることだった。これじゃ何が聞きたかったのか分からん。
結局聞きたかったのは「圏論ってそんなにすごいの?」だったような。
ぐだぐだ

>とりあえずfmap,liftMは便利じゃね?ということを
>最初は説明したかったんだがものすごく言葉足らずでスマン。
とんでもない。言葉の通じない相手に長々付き合ってくれたことに感謝。

281 :239:2006/12/10(日) 01:04:10
>>243
うん
それ読んでもつまらない
まだ早いようだ

282 :デフォルトの名無しさん:2006/12/10(日) 01:33:40
f `fmap` a
は後置演算子と考えればOK。
つまり
(f `fmap`) a


283 :デフォルトの名無しさん:2006/12/10(日) 11:18:22
>>280
>圏論的な考え方を身につけた人にとって考えを整理しやすい書き方、ということでいいだろうか。

まぁせっかく勉強したんだから使っていこうじゃんという気持ちも大きい。

>俺としては、「表面上」支障がなければそれで十分だと思う。
>例えばライブラリを提供する/使うだけならスタイルの不一致は問題にならないし。

その通りだと思う。ただ圏論の概念の名前を冠した射(ファンクタ、リフトetc..)は
(個人的に)理解して欲しい。
ちゃんとそういう名前がついているわけだし。

>結局聞きたかったのは「圏論ってそんなにすごいの?」だったような。

実際的な利益はほとんど無いんじゃないかと思う。
一般的抽象のナンセンスといわれるようにすごくないと感じる人も
いて全然おかしくない。個人的な価値観の問題なのかな。

ただ、モナドに関する情報の中でどれが有意義な議論なのか
見分けることができるようにはなった。
あと、うまくいえないがしっくりとする。
なんかしっくりとこないなぁというひとはちょっとやってみると
いいんじゃなかろうか。

284 :デフォルトの名無しさん:2006/12/10(日) 14:48:03
>>282
スマン寝ぼけて無視してた。
Functorクラスでfmapの定義
fmap id = id
fmap (f . g) = fmap f . fmap g

とあるけどこれはまんま圏A、B間のファンクタFの定義
F( id_A ) = id_B
F( f_A ・ g_A ) = f_B・g_B
と同じ。
ただ、厄介なことにfmapがファンクタというわけではない
(ファンクタを構成するarrow functionというものにあたる)
arrow functionこと射関数っていうのは関数を圏の異なる関数に
移す関数。(関数というと語弊があるから「作用」というべきか)

うむ。そうだfmapは関数ではない。「関数」に作用する「作用素」と
見るべきだから中間演算子として使うのはダメ。
というのではどうですか。

285 :デフォルトの名無しさん:2006/12/10(日) 14:59:31
なんか変なことかいてしまったかも。

まぁfunctionって意味が広いんだよ。
それを全部functionという単語の元
素朴な関数概念で置き換えちゃうから・・・。

うーん。自分でいっててよくわからん。
真偽は自分で考えてくれ。

286 :デフォルトの名無しさん:2006/12/10(日) 16:36:52
圏論を知っても頭は整理されない、ということだけはわかった

287 :デフォルトの名無しさん:2006/12/10(日) 17:02:27
確かにね、否定できんな。
まぁグダグダだしね

288 :デフォルトの名無しさん:2006/12/11(月) 13:01:48
関数型超初心者なんですが、圏論を使うとプログラムとかでこんなにエレガントになるという例とかってありますか?

289 :デフォルトの名無しさん:2006/12/11(月) 16:39:02
すみません、こちらはもっとベタな質問なのですが、
HaskellのFunctorと、C++のファンクタって、何か関係がありますか?
C++のファンクタは、単なる呼び出し可能のオブジェクトなのですが。


290 :デフォルトの名無しさん:2006/12/11(月) 16:44:04
あと、これも非常に低レベルな質問です。
http://itpro.nikkeibp.co.jp/article/COLUMN/20061005/249933/

この連載を少しずつ読んでいるのですが、
fmapがあればmapは要らないような気がします。なぜmapが残っているのでしょ
うか?


291 :デフォルトの名無しさん:2006/12/11(月) 18:13:45
>>289
どちらも語源がfunctionである、という以上の繋がりはないと思う。

292 :デフォルトの名無しさん:2006/12/11(月) 20:02:35
じゃあHaskellのファンクタとOCamlのファンクタは関係ある?
289じゃないけど便乗。

293 :デフォルトの名無しさん:2006/12/11(月) 20:27:22
C++のファンクター、カンケネー♪
OCamlのファンクター、カンケネー♪

294 :デフォルトの名無しさん:2006/12/11(月) 21:10:57
OCaml のファンクタも Haskell のファンクタも、圏論のファンクタ(関手)を
ベースにした概念という意味では関係がある。
C++のファンクタはまた違う語源のものなので関係ないという話をどこかで読んだことがある。


295 :289:2006/12/11(月) 21:16:52
皆さん、ありがとうございます。
C++とは関係ないのですね。しきりに首をひねっておりました。

296 :デフォルトの名無しさん:2006/12/11(月) 23:01:06
俺も質問させてください。
words関数やlines関数の実装で、リストのリストを返す方法がわかりません。
"hello world" を引数に取って["hello","world"]と返す関数はどのように実装したらいいでしょうか

297 :デフォルトの名無しさん:2006/12/11(月) 23:03:54
f "hello world" = ["hello","world"]
f _ = []

298 :デフォルトの名無しさん:2006/12/11(月) 23:13:34
>>289
ttp://www.jmuk.org/d/?path=2005/08/22#d22t03

299 :デフォルトの名無しさん:2006/12/12(火) 09:22:19
>>296
http://www.sampou.org/haskell/report-revised-j/standard-prelude.html#$vlines


300 :デフォルトの名無しさん:2006/12/12(火) 12:25:47
>>290あの記事を理解できる時点で低レベルじゃない

301 :デフォルトの名無しさん:2006/12/12(火) 17:03:37
>>290
互換性のために残ってるのだと思う。
単相性制限があるから、単純にmapをfmapに置き換えることは出来ない。

302 :289:2006/12/12(火) 17:25:36
>>298
おお!向井さんの所でまとまっていたとは!

>>300
いや、私には難しいので、読むのにすごく時間がかかります。
だけど、入門Haskellのモナドまでを読めば、何とか理解できる範囲だと思います。
圏論の全く分からない私にはありがたい連載です。
何より、とても面白いと思います。

>>301
やはり過去互換性ですか。単相性制限?が分かりませんが、だからfmapという
新しい名前を作る必要があったのですね。


303 :デフォルトの名無しさん:2006/12/14(木) 11:38:37
質問です
Visual Haskellをインストールしようとしたところ、
WindowsHostScriptで「Failed to setup vs_haskell.dll」というエラーが出たのですが、
これを解決する方法はありませんか?
よろしくお願いします。

304 :デフォルトの名無しさん:2006/12/15(金) 02:29:08
使うな。

305 :デフォルトの名無しさん:2006/12/15(金) 07:20:19
ありがとうございます。
解決しました。

306 :デフォルトの名無しさん:2006/12/15(金) 10:53:23
>>304-305
自作自演乙

307 :デフォルトの名無しさん:2006/12/15(金) 22:38:25

map関数がわからん
使うだけなら簡単なんだけど、型の宣言がつじつま合わないというか
とにかく納得できない

ふつうのHaskellプログラミングみながら勉強してんだけど
ここで3〜4日停滞してる

square n = n * n
map :: (a -> b) -> [a] -> [b]
map square [1, 2, 3]

この場合の「map関数」の宣言、最初の「a」が「square関数」を指しているのか?
@(a -> b)の部分で「square 1」「square 2」「square 3」と計算して
A???


308 :デフォルトの名無しさん:2006/12/15(金) 22:51:17
>>307
a->bはaを受け取ってbを返す関数の型。
mapは「aを受け取ってbを返す関数」とaのリストを受け取って、bのリストを返す関数。
a->bにあたるのはsquareだけだよ。

309 :デフォルトの名無しさん:2006/12/15(金) 23:00:55
Haskel 全く知らんけど、それって

map :: (a -> b) -> ( [a]  -> [b] )
(map square) [1, 2, 3]

ってこと(文法も知らんが)?


310 :307:2006/12/15(金) 23:53:33
>a->bにあたるのはsquareだけだよ。
ソウイウコトカ!!!
スッキリー、スッキリ-

311 :デフォルトの名無しさん:2006/12/15(金) 23:56:33
>>309
そうそう。haskellの多変数関数は関数を値とする一変数関数。
文法もそれでもあってるはず。

312 :デフォルトの名無しさん:2006/12/16(土) 13:01:08
ところでkleisliの読み方がわからないんですがクライスリ?

313 :デフォルトの名無しさん:2006/12/16(土) 16:38:02
Hugsのcompile.cなど一部のC source fileは
-O2無しでcompileされるようにMakefileinが書かれているけど
C compilerの最適化の副作用を避けるため等のなにか理由がある?

314 :デフォルトの名無しさん:2006/12/16(土) 23:10:46
どうだろう。
変数がレジスタに乗ってしまってメモリ上から消えると、
GCを前提とした言語処理系では問題になることがあるみたいだが。

315 :デフォルトの名無しさん:2006/12/17(日) 09:47:59
>>314
それはない。
しかし、レジスタ上だろうがメモリ上だろうが、変数が元の値ではなく
加工された値でしか存在しないという状況はあり得て問題になる。

316 :デフォルトの名無しさん:2006/12/17(日) 16:10:40
>>313-315
ある特定の処理系の組み合わせで問題が起きることはあるかもしれないが、
常に問題が起きるってことはない。ソースコードが間違えていないなら、ね。
ソースコードは間違えているけど「ある処理系では問題が起きない」てのは
よくある話。

-O2の付け忘れでなければ、まずいコードになっているのかも?


317 :デフォルトの名無しさん:2006/12/17(日) 21:48:39
volatile は役に立たんのけ?

318 :デフォルトの名無しさん:2006/12/17(日) 22:17:14
>>317
役に立つ。というか必要なところにvolatileがないのはダメだろ。
スレ違いなんでこのへんで


319 :デフォルトの名無しさん:2006/12/18(月) 23:32:54

だれかHaskellの再帰について教えて
くわしく、わかりやすく、ていねいに


320 :デフォルトの名無しさん:2006/12/18(月) 23:53:40
aaa :: Int -> Int
aaa a = aaa (a+1)

321 :デフォルトの名無しさん:2006/12/19(火) 00:01:57
let
  空 = 色
  色 = 空
in Data.Set.singleton 空

322 :デフォルトの名無しさん:2006/12/19(火) 00:07:22

わからん
おまえの説明はまったくわからん大滝 秀治)


323 :デフォルトの名無しさん:2006/12/19(火) 01:01:50
再帰という概念がわからないのか、それとも Haskell における再帰の取り扱いがわからないのか、どっち?

324 :デフォルトの名無しさん:2006/12/19(火) 01:16:38
Javaの再帰はいちおう書ける
スマンがねる
良レスに期待

325 :デフォルトの名無しさん:2006/12/19(火) 09:06:05
期待されても困るよ(笑)
というか、再帰のプログラムが書けるのなら、なおさら何が疑問なのかがわからん。

http://www.shiro.dreamhost.com/scheme/docs/tailcall-j.html
とかでどうだ。Haskellじゃないけど。

326 :デフォルトの名無しさん:2006/12/19(火) 16:44:17
>>324
とりあえず、再帰を身体にしみこませる必要があると思うんだ。

Little Schemer
http://www.amazon.co.jp/exec/obidos/ASIN/0262560992

Scheme手習い(上記の本の邦訳。入手困難)
http://www.fukkan.com/fk/VoteDetail?no=6462

Haskellはそのあとでも十分。


327 :デフォルトの名無しさん:2006/12/19(火) 17:07:27
再帰を身体にしみこませるのにHaskellを使わない理由があるのか?

328 :デフォルトの名無しさん:2006/12/19(火) 17:16:33
prolog

329 :デフォルトの名無しさん:2006/12/19(火) 17:42:59
325を読んで疑問に思ったのだが、
hoge n 0 = n
hoge n c = hoge (n + 1) (c - 1)
hoge2 0 = 0
hoge2 c = 1 + hoge2 (c - 1)
hogeは末尾再帰だと思うのだが、hoge2も最後にhoge2があるから末尾再帰なのだろうか。
それとも、1 + hoge2が最後の処理だから末尾再帰じゃない、っていう解釈をするのかな?

330 :デフォルトの名無しさん:2006/12/19(火) 17:49:28
>>329 hoge2 は末尾再帰ではない.

331 :329:2006/12/19(火) 19:13:04
>>330
ありがとう。
それにしてもレスが速いな(・∀・;)

ついでだから実行速度を測ってみた。
最適化しないとhogeの方が若干速いが、-Oをつけると同じ速さになる。
なんか切ないな

332 :デフォルトの名無しさん:2006/12/19(火) 19:32:06
>>331
Haskell では末尾再帰について特に大きなメリットはない。
普通は末尾再帰は逐次計算していけるのから嬉しいのだが、
Haskell は最外簡約を取るので、逐次計算は行われない。

333 :デフォルトの名無しさん:2006/12/19(火) 19:48:33
>>332
>Haskell では末尾再帰について特に大きなメリットはない。
そんなことはないと思うが。
Haskellは常に最外簡約というわけではないし
(GHCは正格性解析の結果に基づいて簡約順序を決める)、
最外簡約の場合でも、クロージャを作って別の関数に渡す代わりに
直接呼んでしまえるのでコストが小さい。

334 :デフォルトの名無しさん:2006/12/20(水) 01:39:23
なぁなぁ、教養科目で記号論理学だけやったんだが。
推論規則の演習とかやった記憶もかすかにあるんだが。
圏論とかサパーリ。
もとが哲学寄りの文学屋なので、そっち方面の記号論は、まぁわかるんだが。
そんな俺様にお勧めのHaskell文献があったら教えてください。

335 :デフォルトの名無しさん:2006/12/20(水) 01:54:26
Haskell文献?それって言語解説書?

336 :デフォルトの名無しさん:2006/12/20(水) 01:55:04
テンプレにあると思うが。

337 :334:2006/12/20(水) 02:01:53
>335
ごめん。言語解説書ではなくて、背景の理論のほう。
とりあえず俺の勉強したなけなしの記号論理学が
どこをどう通ったらHaskellになるのか見てみたい。

338 :デフォルトの名無しさん:2006/12/20(水) 02:06:18
>>337
まず、歴史的にはMLの方が先だから、MLから入ってみたら?

339 :デフォルトの名無しさん:2006/12/20(水) 05:01:09
>>337
PierceのTAPLでも嫁
それが理解できなければどうせその先も理解できない

340 :デフォルトの名無しさん:2006/12/20(水) 06:22:58
HASKELLってほんとに綺麗だよね。
いつかみんながHASKELLを使う世の中がきたらいいな。

341 :デフォルトの名無しさん:2006/12/20(水) 07:31:12
ひとつお聞きしたいのですが、
Haskellerで元Lisperの方ってどれくらいいるんでしょうか?

元Lisperの方でHaskellに移ってきた方は、Haskellのどのあたりに惹かれました?

342 :デフォルトの名無しさん:2006/12/20(水) 08:04:58
LISPはスーパーな人が沢山いて、敵う気がしなかった。
Haskellはまだ大半が素人みたいなので鞍替えした。

343 :デフォルトの名無しさん:2006/12/20(水) 11:15:15
>>341
Haskellを知っている人ならほぼ確実にLispも知ってるよ。

344 :デフォルトの名無しさん:2006/12/20(水) 11:25:49
俺 Lisp は知ってるけど Lisper じゃないな

345 :デフォルトの名無しさん:2006/12/20(水) 11:30:54
言語の違いでプログラマが変わるわけでもあるまい

346 :デフォルトの名無しさん:2006/12/20(水) 11:54:30
用途によっていくつかの言語使い分けるから、何々erではないな

347 :デフォルトの名無しさん:2006/12/20(水) 14:37:22
>>337
Haskel は全く知らんけど、その記号論理学とはあまり関係無いんじゃないか?

Lisper 以外の大半人たちは高階の理論を記述する際に階によって用語を使い分ける。
ので集合とか射とか群とか圏とかいろんな言葉が出てくるわけだけど、
やってることはλと(暗黙の)括弧が多いか少ないか程度の違いのような気がするので、
そう大上段に構えるほどの物じゃないような・・・

348 :デフォルトの名無しさん:2006/12/20(水) 14:40:39
あまたあるプログラミング言語の一つ

349 :デフォルトの名無しさん:2006/12/21(木) 00:41:18
>>341
9割が両刀
1割は悪い人にだまされて最初の言語がHaskellというケース

350 :デフォルトの名無しさん:2006/12/21(木) 01:14:50
Lispを最初にやってたほうがいいんかな?
Haskellだけでも十分おもしろいけど。

351 :デフォルトの名無しさん:2006/12/21(木) 01:17:52
>>349
C++からLispを経由せずにHaskellをやりだした者ですが、
私をだました悪い人はどこですか?

352 :デフォルトの名無しさん:2006/12/21(木) 01:41:26
Javaだけなんとかギリギリできるけど
Haskellも勉強してるよ

オブジェクト指向しか知らない世代なわけだけど
そこに固まらないうちに関数型も慣れときたいなぁと思って

353 :デフォルトの名無しさん:2006/12/21(木) 01:58:04
先輩が Lisper で、静的型と動的型の違いを勉強するために Haskell も合わせて
勉強するように言われました。

354 :デフォルトの名無しさん:2006/12/21(木) 01:59:43
>>350
関数型言語習い始めだと、副作用なしというプログラミングスタイルは辛いと思う。
まずは副作用ありの関数型言語で慣れておくと良いと思う。

355 :デフォルトの名無しさん:2006/12/21(木) 02:50:42
>関数型言語習い始めだと、副作用なしというプログラミングスタイルは辛いと思う。
議論することじゃないが、俺はそうは思わない、という意見だけ表明しておく。

356 :ド素人:2006/12/21(木) 02:53:37

盛り上がってるとこ悪いんだけどくだらない質問
精製されたexeファイルをGHC入れてない人に実行させるにはどうすりゃいいの?

main = print $ map square [2, 5, 3, 1, 10]
square n = n * n

たとえば↑みたいなプログラムをexeにしたって実行できないよね?
どういうのならできるんだ???


357 :デフォルトの名無しさん:2006/12/21(木) 02:54:35
Lisp出来る人から見てHaskellの優れてるとこってどこ?
逆にLispのほうが優れてると思うところは?

358 :デフォルトの名無しさん:2006/12/21(木) 06:27:28
>>356
問題なく実行できる。

exeファイルをダブルクリックしたけど一瞬だけコマンドプロンプトが開いてすぐに閉じたから実行できなかったと思ったんじゃないの?
それだったらgetCharでも付けて入力待ちさせりゃいい。
main = do { print $ map square [2, 5, 3, 1, 10]; getChar }
square n = n * n

359 :デフォルトの名無しさん:2006/12/22(金) 00:46:51
低レベルな質問2
main = do cs getContents
       putStr cs

exeファイルにしてコマンドプロンプトで下のように実行しようとしてもできない
ghc out.hs -o out
out 引数(文字列)

なんで?
ふつうのHaskellプログラミングには
実行するには Ctrl - Z + Enter って書いてるけど、これどういう意味?

360 :デフォルトの名無しさん:2006/12/22(金) 01:04:25
>>359
そのぷろぐらむだと引数は関係ない。
outを実行すると入力待ちになるから、適当な文字列を何行かタイプする。
入力を終了したくなったら、まず、カーソルが行頭にある状態で
Ctrlとzを同時押しして(^Zという表示が現れるはず)、
つぎにEnterキーを押せば良い。

361 :デフォルトの名無しさん:2006/12/22(金) 08:44:55
>>357 どっちもイイね。
Haskell の優れてるところ: 型システムによる安心感、純粋関数型なところ
Lisp の優れてるところ: マルチパラダイムなところ、あんま理屈とか考えずに言語を気軽にカスタマイズできるところ

112 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)