関数型プログラミング言語Haskell Part6
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/11/07(火) 21:24:26http://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の仕様により、行頭の半角スペースは表示されません。
コードをインデントしたいときは、代わりに または全角スペースを使うことができます。
0263デフォルトの名無しさん
2006/12/09(土) 20:03:31圏論を理解していなくても使える。
0264デフォルトの名無しさん
2006/12/09(土) 20:12:140265デフォルトの名無しさん
2006/12/09(土) 20:20:000266デフォルトの名無しさん
2006/12/09(土) 20:41:36ふおん
0267デフォルトの名無しさん
2006/12/09(土) 20:53:03使い方を間違えるって言うのはおかしかったな、すまん。
0268デフォルトの名無しさん
2006/12/09(土) 21:06:54使ってますって人ってどれくらいいるもんなんかな?
連載では多用しているけど。
0269デフォルトの名無しさん
2006/12/09(土) 21:09:28読みづらい書き方になる、ってことか。
どっちにしても例が欲しい。
>>268
fmapは使わないけどliftMは日常的に使う。
0270デフォルトの名無しさん
2006/12/09(土) 21:20:16`fmap`,`liftM`みたいに中間演算子的に使われると
どういう意図でそれをつかっているのか意味がとれない。
あとは、できるだけ
たとえば
calc :: a -> a
という関数があったらIOモナド用に
calcIO :: IO a -> IO a
calcIO = fmap calc
みたいに使ってもらったほうが構造だけは同一で元となっている
カテゴリーだけが違うということが明確になっていいんじゃないかと
思っている。
うーん。うまく伝わっただろうか・・・。
というかあまりいい方法じゃないのかなとか思ってきた・・・。
0271デフォルトの名無しさん
2006/12/09(土) 21:29:28やってしまって後はカテゴリーごとにfmapするなりliftさせるなり
したほうが再利用できるようになるし。
sample :: a -> IO a
なKleisli射はなるべく作らない方向性でいくべきなんじゃないかって。
モジュール化も損なわれるんじゃないかと。
でもそこまでいってしまうと作れなくなってしまうというジレンマに陥って
しまうから・・・。どうなんだろうねぇ。。
0272デフォルトの名無しさん
2006/12/09(土) 21:47:36レスありがとう。
>`fmap`,`liftM`みたいに中間演算子的に使われると
>どういう意図でそれをつかっているのか意味がとれない。
これは俺も時々やるんだが、気持ち悪いと感じるのはたぶん分かった。
圏論の観点からはfmapは(射に作用する)単項演算であって
二引数関数のように使うのは不自然だ、ということか。(素人なので間違ってたら教えてくれ)
このスタイルを弁護しておくと、Haskellではあらゆる場合について
(g f) x
と
f `g` x
が等しいので、後者を見た読者は前者を見たのと同じように理解することが期待されている。
だから、両者を単純に字面上のおさまりに基づいて使い分けることができる、という考え方が
あり得ると思う。例えば f x の代わりに f `id` xと書くのがそんなに変だろうか。
加えて、それを言い出すと(>>=)だって圏論的には一引数の演算なんじゃないか、とか。
calcの例は理解できなかった。せっかく説明してもらったのにすまん。
0273デフォルトの名無しさん
2006/12/09(土) 22:01:34それは例えば標準入力からCSV形式のデータを読みたいときに、
getCSV :: IO [String]
のようなものをgetChar/getLine/getContentsを使って書くよりも、
parseCSV :: String -> [String]
を用意してユーザ側でfmap parseCSV getContentsとさせた方が良い、
という理解でおk?
それなら多くのHaskellユーザが経験的にやってることだと思うんだが。
0274デフォルトの名無しさん
2006/12/09(土) 22:19:06>圏論の観点からはfmapは(射に作用する)単項演算であって
>二引数関数のように使うのは不自然だ、ということか。(素人なので間違ってたら教えてくれ)
その通り。というかそう自分としては解釈している、というほうが適切かな。
人によっては他の翻訳もありうると思う。
>このスタイルを弁護しておくと...
そういうスタイルがあることは最近知った。
前スレで出てきたLaw and Order in Algorithmicsってpdf内が
そういう流儀だったしおかしくはない。
でも、個人的に同一カテゴリー内の射(a -> a, IO a -> IO a)
なら「有り」だとは思うけど、fmapとliftMの場合そうやっちゃうと
ファンクタとかリフトって概念を持ち出す意味がなくなる。
>加えて、それを言い出すと(>>=)だって圏論的には一引数の演算なんじゃないか、とか。
圏論的には(>>=)は概念的にfmap,liftMの持つ概念と別種。
(といいつつそこらへんはよくわかっていないからどうともいえない
というのが本音。別種であるのは確か)
0275デフォルトの名無しさん
2006/12/09(土) 22:23:20>圏論の観点からは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
そういうこと。そしてそれがファンクタの概念。
経験的にわかっていることならこの際明確にしてしまおう。
0276デフォルトの名無しさん
2006/12/09(土) 22:25:37これはすべて個人的な勝手な解釈だ。
0277デフォルトの名無しさん
2006/12/09(土) 22:41:300278デフォルトの名無しさん
2006/12/09(土) 23:04:44>みたいなかんじに使えないかと。
つまり、IOならIOについて(fmap calc)をひとかたまりとみなすべきであり、
そういうスタイルを奨励するためにcalcIOという名前を付ける、ということか。逆に
do x <- a; b (calc x)
のようにcalcの適用をdo式中に散逸させたりすると、
この構造がわかりにくくなるので良くない、と。
ただ、相変わらずこのように書くことの現実的利益がわからない。
>構造だけは同一で元となっている
>カテゴリーだけが違うということが明確になっていいんじゃないかと
>思っている。
の部分。
>経験的にわかっていることならこの際明確にしてしまおう。
もちろん明確にするのは価値があると思うし、そういうのは
個人的に好きな方向性だけど、もともとの議論に関して
「圏論を知らないとHaskellを使うのにどれくらい支障があるか」という点については、
はっきりさせておきたかった。俺としてはHaskelll(のような言語)が
真に一般に普及してほしいと思っているので、経験だけではカバーできない
重大な困難があるかどうかが気になった。
0279デフォルトの名無しさん
2006/12/09(土) 23:52:51>つまり、IOならIOについて(fmap calc)をひとかたまりとみなすべきであり、
>そういうスタイルを奨励するためにcalcIOという名前を付ける、ということか。
いや、そこまで強くは言っていない。名前付けたのはわかりやすくするためで
>>273みたいな名前付けない使い方が一般的だと思う。
というか経験的にすでにわかってることなんだと思う。
>ただ、相変わらずこのように書くことの現実的利益がわからない。
考えを整理できるとかそういう部類で現実的利益といわれると無いね・・・。
>「圏論を知らないとHaskellを使うのにどれくらい支障があるか」という点については、
>はっきりさせておきたかった。俺としてはHaskelll(のような言語)が
>真に一般に普及してほしいと思っているので、経験だけではカバーできない
>重大な困難があるかどうかが気になった。
Haskell使用するというレベルでは圏論の知識の有無による
困難は表面的には無い。が根源的には結構困難があると思う。
おそらく人のコードを読むという段階であらわに出てくるハズ。
fmapにしたってファンクタの概念をつかって圏論チックな考え方で
使おう思っている人と、そうじゃない人だと使い方が違う。
そういうのが積み重なって人によってはその書き方の意図が
読めないコードというのが出てくると思う。
そういう意味では結構困難がある。
まぁ要するにコーディングスタイルの問題。
圏論的なものを取り入れたHaskellコーディングスタイルを確立する
のかあくまで経験的なコーディングスタイルを確立するのか。
うーむ。なんだかグダグだになってしまった。
とりあえずfmap,liftMは便利じゃね?ということを
最初は説明したかったんだがものすごく言葉足らずでスマン。
0280デフォルトの名無しさん
2006/12/10(日) 00:39:38「現実的利益」なんて嫌らしい言い方をしたが、ようするに
「それで何がうれしいのか」を聞きたかっただけだった。
「考えを整理できる」というので十分。
>考えを整理できるとかそういう部類で現実的利益といわれると無いね・・・。
圏論的な考え方を身につけた人にとって考えを整理しやすい書き方、ということでいいだろうか。
>Haskell使用するというレベルでは圏論の知識の有無による
>困難は表面的には無い。が根源的には結構困難があると思う。
>おそらく人のコードを読むという段階であらわに出てくるハズ。
いいたいことはたぶん分かった。もちろん実感として分かるわけじゃないので
自信を持って理解したとはいえないが。
俺としては、「表面上」支障がなければそれで十分だと思う。
例えばライブラリを提供する/使うだけならスタイルの不一致は問題にならないし。
しかし冷静に考えると、表面上支障がないというのは誰に聞くまでもなく俺が
身を持って知っていることだった。これじゃ何が聞きたかったのか分からん。
結局聞きたかったのは「圏論ってそんなにすごいの?」だったような。
ぐだぐだ
>とりあえずfmap,liftMは便利じゃね?ということを
>最初は説明したかったんだがものすごく言葉足らずでスマン。
とんでもない。言葉の通じない相手に長々付き合ってくれたことに感謝。
0282デフォルトの名無しさん
2006/12/10(日) 01:33:40は後置演算子と考えればOK。
つまり
(f `fmap`) a
。
0283デフォルトの名無しさん
2006/12/10(日) 11:18:22>圏論的な考え方を身につけた人にとって考えを整理しやすい書き方、ということでいいだろうか。
まぁせっかく勉強したんだから使っていこうじゃんという気持ちも大きい。
>俺としては、「表面上」支障がなければそれで十分だと思う。
>例えばライブラリを提供する/使うだけならスタイルの不一致は問題にならないし。
その通りだと思う。ただ圏論の概念の名前を冠した射(ファンクタ、リフトetc..)は
(個人的に)理解して欲しい。
ちゃんとそういう名前がついているわけだし。
>結局聞きたかったのは「圏論ってそんなにすごいの?」だったような。
実際的な利益はほとんど無いんじゃないかと思う。
一般的抽象のナンセンスといわれるようにすごくないと感じる人も
いて全然おかしくない。個人的な価値観の問題なのかな。
ただ、モナドに関する情報の中でどれが有意義な議論なのか
見分けることができるようにはなった。
あと、うまくいえないがしっくりとする。
なんかしっくりとこないなぁというひとはちょっとやってみると
いいんじゃなかろうか。
0284デフォルトの名無しさん
2006/12/10(日) 14:48:03スマン寝ぼけて無視してた。
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は関数ではない。「関数」に作用する「作用素」と
見るべきだから中間演算子として使うのはダメ。
というのではどうですか。
0285デフォルトの名無しさん
2006/12/10(日) 14:59:31まぁfunctionって意味が広いんだよ。
それを全部functionという単語の元
素朴な関数概念で置き換えちゃうから・・・。
うーん。自分でいっててよくわからん。
真偽は自分で考えてくれ。
0286デフォルトの名無しさん
2006/12/10(日) 16:36:520287デフォルトの名無しさん
2006/12/10(日) 17:02:27まぁグダグダだしね
0288デフォルトの名無しさん
2006/12/11(月) 13:01:480289デフォルトの名無しさん
2006/12/11(月) 16:39:02HaskellのFunctorと、C++のファンクタって、何か関係がありますか?
C++のファンクタは、単なる呼び出し可能のオブジェクトなのですが。
0290デフォルトの名無しさん
2006/12/11(月) 16:44:04http://itpro.nikkeibp.co.jp/article/COLUMN/20061005/249933/
この連載を少しずつ読んでいるのですが、
fmapがあればmapは要らないような気がします。なぜmapが残っているのでしょ
うか?
0291デフォルトの名無しさん
2006/12/11(月) 18:13:45どちらも語源がfunctionである、という以上の繋がりはないと思う。
0292デフォルトの名無しさん
2006/12/11(月) 20:02:35289じゃないけど便乗。
0293デフォルトの名無しさん
2006/12/11(月) 20:27:22OCamlのファンクター、カンケネー♪
0294デフォルトの名無しさん
2006/12/11(月) 21:10:57ベースにした概念という意味では関係がある。
C++のファンクタはまた違う語源のものなので関係ないという話をどこかで読んだことがある。
0295289
2006/12/11(月) 21:16:52C++とは関係ないのですね。しきりに首をひねっておりました。
0296デフォルトの名無しさん
2006/12/11(月) 23:01:06words関数やlines関数の実装で、リストのリストを返す方法がわかりません。
"hello world" を引数に取って["hello","world"]と返す関数はどのように実装したらいいでしょうか
0297デフォルトの名無しさん
2006/12/11(月) 23:03:54f _ = []
0298デフォルトの名無しさん
2006/12/11(月) 23:13:34ttp://www.jmuk.org/d/?path=2005/08/22#d22t03
0299デフォルトの名無しさん
2006/12/12(火) 09:22:19http://www.sampou.org/haskell/report-revised-j/standard-prelude.html#$vlines
0300デフォルトの名無しさん
2006/12/12(火) 12:25:470301デフォルトの名無しさん
2006/12/12(火) 17:03:37互換性のために残ってるのだと思う。
単相性制限があるから、単純にmapをfmapに置き換えることは出来ない。
0302289
2006/12/12(火) 17:25:36おお!向井さんの所でまとまっていたとは!
>>300
いや、私には難しいので、読むのにすごく時間がかかります。
だけど、入門Haskellのモナドまでを読めば、何とか理解できる範囲だと思います。
圏論の全く分からない私にはありがたい連載です。
何より、とても面白いと思います。
>>301
やはり過去互換性ですか。単相性制限?が分かりませんが、だからfmapという
新しい名前を作る必要があったのですね。
0303デフォルトの名無しさん
2006/12/14(木) 11:38:37Visual Haskellをインストールしようとしたところ、
WindowsHostScriptで「Failed to setup vs_haskell.dll」というエラーが出たのですが、
これを解決する方法はありませんか?
よろしくお願いします。
0304デフォルトの名無しさん
2006/12/15(金) 02:29:080305デフォルトの名無しさん
2006/12/15(金) 07:20:19解決しました。
0306デフォルトの名無しさん
2006/12/15(金) 10:53:23自作自演乙
0307デフォルトの名無しさん
2006/12/15(金) 22:38:25map関数がわからん
使うだけなら簡単なんだけど、型の宣言がつじつま合わないというか
とにかく納得できない
ふつうの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???
0308デフォルトの名無しさん
2006/12/15(金) 22:51:17a->bはaを受け取ってbを返す関数の型。
mapは「aを受け取ってbを返す関数」とaのリストを受け取って、bのリストを返す関数。
a->bにあたるのはsquareだけだよ。
0309デフォルトの名無しさん
2006/12/15(金) 23:00:55map :: (a -> b) -> ( [a] -> [b] )
(map square) [1, 2, 3]
ってこと(文法も知らんが)?
0310307
2006/12/15(金) 23:53:33ソウイウコトカ!!!
スッキリー、スッキリ-
0311デフォルトの名無しさん
2006/12/15(金) 23:56:33そうそう。haskellの多変数関数は関数を値とする一変数関数。
文法もそれでもあってるはず。
0312デフォルトの名無しさん
2006/12/16(土) 13:01:080313デフォルトの名無しさん
2006/12/16(土) 16:38:02-O2無しでcompileされるようにMakefileinが書かれているけど
C compilerの最適化の副作用を避けるため等のなにか理由がある?
0314デフォルトの名無しさん
2006/12/16(土) 23:10:46変数がレジスタに乗ってしまってメモリ上から消えると、
GCを前提とした言語処理系では問題になることがあるみたいだが。
0315デフォルトの名無しさん
2006/12/17(日) 09:47:59それはない。
しかし、レジスタ上だろうがメモリ上だろうが、変数が元の値ではなく
加工された値でしか存在しないという状況はあり得て問題になる。
0316デフォルトの名無しさん
2006/12/17(日) 16:10:40ある特定の処理系の組み合わせで問題が起きることはあるかもしれないが、
常に問題が起きるってことはない。ソースコードが間違えていないなら、ね。
ソースコードは間違えているけど「ある処理系では問題が起きない」てのは
よくある話。
-O2の付け忘れでなければ、まずいコードになっているのかも?
0317デフォルトの名無しさん
2006/12/17(日) 21:48:390318デフォルトの名無しさん
2006/12/17(日) 22:17:14役に立つ。というか必要なところにvolatileがないのはダメだろ。
スレ違いなんでこのへんで
0319デフォルトの名無しさん
2006/12/18(月) 23:32:54だれかHaskellの再帰について教えて
くわしく、わかりやすく、ていねいに
0320デフォルトの名無しさん
2006/12/18(月) 23:53:40aaa a = aaa (a+1)
0321デフォルトの名無しさん
2006/12/19(火) 00:01:57空 = 色
色 = 空
in Data.Set.singleton 空
0322デフォルトの名無しさん
2006/12/19(火) 00:07:22わからん
おまえの説明はまったくわからん大滝 秀治)
0323デフォルトの名無しさん
2006/12/19(火) 01:01:500324デフォルトの名無しさん
2006/12/19(火) 01:16:38スマンがねる
良レスに期待
0325デフォルトの名無しさん
2006/12/19(火) 09:06:05というか、再帰のプログラムが書けるのなら、なおさら何が疑問なのかがわからん。
http://www.shiro.dreamhost.com/scheme/docs/tailcall-j.html
とかでどうだ。Haskellじゃないけど。
0326デフォルトの名無しさん
2006/12/19(火) 16:44:17とりあえず、再帰を身体にしみこませる必要があると思うんだ。
Little Schemer
http://www.amazon.co.jp/exec/obidos/ASIN/0262560992
Scheme手習い(上記の本の邦訳。入手困難)
http://www.fukkan.com/fk/VoteDetail?no=6462
Haskellはそのあとでも十分。
0327デフォルトの名無しさん
2006/12/19(火) 17:07:270328デフォルトの名無しさん
2006/12/19(火) 17:16:330329デフォルトの名無しさん
2006/12/19(火) 17:42:59hoge 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が最後の処理だから末尾再帰じゃない、っていう解釈をするのかな?
0330デフォルトの名無しさん
2006/12/19(火) 17:49:280331329
2006/12/19(火) 19:13:04ありがとう。
それにしてもレスが速いな(・∀・;)
ついでだから実行速度を測ってみた。
最適化しないとhogeの方が若干速いが、-Oをつけると同じ速さになる。
なんか切ないな
0332デフォルトの名無しさん
2006/12/19(火) 19:32:06Haskell では末尾再帰について特に大きなメリットはない。
普通は末尾再帰は逐次計算していけるのから嬉しいのだが、
Haskell は最外簡約を取るので、逐次計算は行われない。
0333デフォルトの名無しさん
2006/12/19(火) 19:48:33>Haskell では末尾再帰について特に大きなメリットはない。
そんなことはないと思うが。
Haskellは常に最外簡約というわけではないし
(GHCは正格性解析の結果に基づいて簡約順序を決める)、
最外簡約の場合でも、クロージャを作って別の関数に渡す代わりに
直接呼んでしまえるのでコストが小さい。
0334デフォルトの名無しさん
2006/12/20(水) 01:39:23推論規則の演習とかやった記憶もかすかにあるんだが。
圏論とかサパーリ。
もとが哲学寄りの文学屋なので、そっち方面の記号論は、まぁわかるんだが。
そんな俺様にお勧めのHaskell文献があったら教えてください。
0335デフォルトの名無しさん
2006/12/20(水) 01:54:260336デフォルトの名無しさん
2006/12/20(水) 01:55:040337334
2006/12/20(水) 02:01:53ごめん。言語解説書ではなくて、背景の理論のほう。
とりあえず俺の勉強したなけなしの記号論理学が
どこをどう通ったらHaskellになるのか見てみたい。
0338デフォルトの名無しさん
2006/12/20(水) 02:06:18まず、歴史的にはMLの方が先だから、MLから入ってみたら?
0339デフォルトの名無しさん
2006/12/20(水) 05:01:09PierceのTAPLでも嫁
それが理解できなければどうせその先も理解できない
0340デフォルトの名無しさん
2006/12/20(水) 06:22:58いつかみんながHASKELLを使う世の中がきたらいいな。
0341デフォルトの名無しさん
2006/12/20(水) 07:31:12Haskellerで元Lisperの方ってどれくらいいるんでしょうか?
元Lisperの方でHaskellに移ってきた方は、Haskellのどのあたりに惹かれました?
0342デフォルトの名無しさん
2006/12/20(水) 08:04:58Haskellはまだ大半が素人みたいなので鞍替えした。
0343デフォルトの名無しさん
2006/12/20(水) 11:15:15Haskellを知っている人ならほぼ確実にLispも知ってるよ。
0344デフォルトの名無しさん
2006/12/20(水) 11:25:490345デフォルトの名無しさん
2006/12/20(水) 11:30:540346デフォルトの名無しさん
2006/12/20(水) 11:54:300347デフォルトの名無しさん
2006/12/20(水) 14:37:22Haskel は全く知らんけど、その記号論理学とはあまり関係無いんじゃないか?
Lisper 以外の大半人たちは高階の理論を記述する際に階によって用語を使い分ける。
ので集合とか射とか群とか圏とかいろんな言葉が出てくるわけだけど、
やってることはλと(暗黙の)括弧が多いか少ないか程度の違いのような気がするので、
そう大上段に構えるほどの物じゃないような・・・
0348デフォルトの名無しさん
2006/12/20(水) 14:40:390349デフォルトの名無しさん
2006/12/21(木) 00:41:189割が両刀
1割は悪い人にだまされて最初の言語がHaskellというケース
0350デフォルトの名無しさん
2006/12/21(木) 01:14:50Haskellだけでも十分おもしろいけど。
0351デフォルトの名無しさん
2006/12/21(木) 01:17:52C++からLispを経由せずにHaskellをやりだした者ですが、
私をだました悪い人はどこですか?
0352デフォルトの名無しさん
2006/12/21(木) 01:41:26Haskellも勉強してるよ
オブジェクト指向しか知らない世代なわけだけど
そこに固まらないうちに関数型も慣れときたいなぁと思って
0353デフォルトの名無しさん
2006/12/21(木) 01:58:04勉強するように言われました。
0354デフォルトの名無しさん
2006/12/21(木) 01:59:43関数型言語習い始めだと、副作用なしというプログラミングスタイルは辛いと思う。
まずは副作用ありの関数型言語で慣れておくと良いと思う。
0355デフォルトの名無しさん
2006/12/21(木) 02:50:42議論することじゃないが、俺はそうは思わない、という意見だけ表明しておく。
0356ド素人
2006/12/21(木) 02:53:37盛り上がってるとこ悪いんだけどくだらない質問
精製されたexeファイルをGHC入れてない人に実行させるにはどうすりゃいいの?
main = print $ map square [2, 5, 3, 1, 10]
square n = n * n
たとえば↑みたいなプログラムをexeにしたって実行できないよね?
どういうのならできるんだ???
0357デフォルトの名無しさん
2006/12/21(木) 02:54:35逆にLispのほうが優れてると思うところは?
0358デフォルトの名無しさん
2006/12/21(木) 06:27:28問題なく実行できる。
exeファイルをダブルクリックしたけど一瞬だけコマンドプロンプトが開いてすぐに閉じたから実行できなかったと思ったんじゃないの?
それだったらgetCharでも付けて入力待ちさせりゃいい。
main = do { print $ map square [2, 5, 3, 1, 10]; getChar }
square n = n * n
0359デフォルトの名無しさん
2006/12/22(金) 00:46:51main = do cs getContents
putStr cs
exeファイルにしてコマンドプロンプトで下のように実行しようとしてもできない
ghc out.hs -o out
out 引数(文字列)
なんで?
ふつうのHaskellプログラミングには
実行するには Ctrl - Z + Enter って書いてるけど、これどういう意味?
0360デフォルトの名無しさん
2006/12/22(金) 01:04:25そのぷろぐらむだと引数は関係ない。
outを実行すると入力待ちになるから、適当な文字列を何行かタイプする。
入力を終了したくなったら、まず、カーソルが行頭にある状態で
Ctrlとzを同時押しして(^Zという表示が現れるはず)、
つぎにEnterキーを押せば良い。
0361デフォルトの名無しさん
2006/12/22(金) 08:44:55Haskell の優れてるところ: 型システムによる安心感、純粋関数型なところ
Lisp の優れてるところ: マルチパラダイムなところ、あんま理屈とか考えずに言語を気軽にカスタマイズできるところ
0362デフォルトの名無しさん
2006/12/25(月) 11:44:14使い方次第
■ このスレッドは過去ログ倉庫に格納されています