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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 20:28:13 ]
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/

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

231 名前:228 mailto:sage [2007/11/19(月) 10:59:03 ]
うーん、難しい
>>=が一つだけならなんとか頭で理解できるんですが>>=が二つ以上ならんでいたり
do式で表されていたりすると脳味噌が追い付きませんorz

232 名前:143 mailto:sage [2007/11/19(月) 23:12:23 ]
*GHC-6.6.1のクロスコンパイルについて公式ページのwikiに書いてない部分*

<ターゲット、ホストに共通>
デフォルトサーチパスにGNU MPがない場合は--with-gmp-{includes,libraries}で指定する必要があるが、
途中からこの指定(ライブラリサーチパス)を見てくれなくなる上、
できあがったGHCでも-Lオプションを指定しなければいけなくなるので
(少なくともlibgmp.so.*かlibgmp.aファイルのどちらかを)デフォルトサーチパスにシンボリックリンクしておくほうがいい。

<ホスト>
ghc-6.6.1/Makefileの
echo ghc-$(ProjectVersion)/libraries/haskell-src/Language/Haskell/Parser.hs >> hc-files-to-go
という行を削除またはコメントアウトする必要がある。

libraries/Cabal/cabal-setup/CabalSetup.hsが作られないので、
cd compiler && make boot && makeの後、
cd libraries/Cabal/cabal-setup
rm CabalSetup.{o,hi} cabalsetup
../../../compiler/ghc-inplace -H16m -O -H32m -package Cabal -c CabalSetup.hs -o CabalSetup.o -ohi CabalSetup.hi -keep-hc-files
../../../compiler/ghc-inplace -o cabal-setup -H16m -O -H32m -package Cabal CabalSetup.o
する必要がある。

make hc-file-bundle Project=Ghcの前に、
make -C rts AutoApply_thr.hc AutoApply_thr_p.hc AutoApply_debug.hc AutoApply_thr_debug.hc
する必要がある。

続く

233 名前:143 mailto:sage [2007/11/19(月) 23:14:33 ]
*GHC-6.6.1のクロスコンパイルについて公式ページのwikiに書いてない部分* 続き

<ターゲット>
いきなり/usr/localにインストールするのではなく、stage1のためのディレクトリにインストールして、
それを利用してもう一度ghcをビルドしたほうがいいと思われる。

*-hc-tar.gzをソースツリーにコピーするのではなく、展開されるghc-6.6.1を手動でソースツリーに上書きする必要がある。

distrib以下のスクリプトに実行権限を与える必要がある。

hc-buildが完了した後、
cd compiler
rm -f *.hs-incl
make primop-can-fail.hs-incl primop-commutable.hs-incl primop-data-decl.hs-incl
primop-has-side-effects.hs-incl primop-list.hs-incl primop-needs-wrapper.hs-inc
l primop-out-of-line.hs-incl primop-primop-info.hs-incl primop-strictness.hs-inc
l primop-tag.hs-incl primop-usage.hs-incl
find . -name \*.o -exec rm {} \;
make boot stage=1 && gmake stage=1
cd ..
make install stage=1
で完了。

ちなみにザウルスのOpenBSD上では16MB以上のテキストセグメントがある実行ファイルは実行できないので
テキストセグメントを32MBに拡張したカーネルを使用しなければビルドできませんでした。
GNU makeがmakeという名前以外(gmakeなど)でインストールされている場合は、適宜読み替えてください。
かなり効率の悪い方法なので、Makefile等をちゃんと読めばもっと最適化できると思います。

古いGHCで新しいGHCをビルドするのはうまくいきますが、
新しいGHCで古いGHCをビルドするのはなかなかうまくいきませんね。

234 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 08:39:00 ]
一度評価された式をもう一度評価しようとする場合って、再度最初から評価しなおすんですか?

例えば
add x y = x + y
という関数があって、一度
add 1 2
という式を評価した後もう一度
add 1 2
を評価しようとするとき、内部では律儀に 1 + 2 を行うんでしょうか?それとも
add 1 2 = 3
みたいな式が内部で作られてたりするんでしょうか?

235 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 09:30:04 ]
↑の場合は俺も知りたいです

俺が知ってるのは
f x a b c = a*x*x + b*x * c
という関数に対して
f (1+2) 3 4 5
と呼び出した場合に1+2が1度しか評価されないことくらい…

236 名前:デフォルトの名無しさん [2007/11/20(火) 10:20:01 ]
>>234
Haskellの規格では規定されてないけど、普通は評価しなおす。
関数を全部メモ化していたら、救いようのないメモリリークが起こるはず。ただし、
map (\x -> x * add 1 2) xs
のようなコードが最適化されて
let _z = add 1 2 in map (\x -> x * _z) xs
になって、add 1 2が一回しか計算されない、という場合はある。

237 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 11:41:31 ]
>>234-235
コンパイラのコンパイルオプションによっても動作が違うかな

import System.IO.Unsafe
f n=seq (unsafePerformIO $ putStrLn "hello") n

a=f 1+f 1

main=print a

のようなコードだとGHC6.6.1の場合で最適化なしの場合とありの場合でhelloの表示回数が違ったりする。


238 名前:237 mailto:sage [2007/11/20(火) 11:44:46 ]
追記

a=f 1+f 2

でも最適化ありで1回表示、 無しで2回表示でした。


239 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 18:31:21 ]
質問なのですが、
ドラキュラとかが眠ってそうな感じの、棺おけ型のベッドというのは市販されているのでしょうか?
冬の暖房の時期に、部屋ごと暖めるのでは効率が悪いので、棺おけの中だけ温度調節できれば
コスト安になると思ったのです。
また、フタをつけるので静かですし、明かりもシャットアウトできてよいと思うのです。



240 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 19:04:23 ]
ドラキュラとかが眠ってそうな感じの、棺おけ型のベッドというのは市販されているのでしょうか?
(計算をデフォルトで遅延させる機能のある、関数型のプログラム言語は市販されているのでしょうか?)
冬の暖房の時期に、部屋ごと暖めるのでは効率が悪いので、
(評価されない可能性のある式を正格に評価するのは効率が悪いので)
棺おけの中だけ温度調節できればコスト安になると思ったのです。
(必要になってから評価できれば計算コストを削減できると思ったのです。)
また、フタをつけるので静かですし、明かりもシャットアウトできてよいと思うのです。
(一度評価されればメモ化されるので計算量が少なくなりますし、バグの混入もシャットアウトできてよいと思うのです。)

答え:Haskellは無料で公開されています

こうですか!? わかりません!


241 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 19:27:37 ]
感動した

242 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 04:31:54 ]
質問です

GHC6.8.1にはHGL入ってないんですか?

243 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 01:59:38 ]
Windowsアプリ作っていて気づいたんだが、
Win32モジュールにはSetLayeredWindowAttributesのラッパは入ってないんだな・・
自作するしかないんだろうか。

244 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 07:26:41 ]
書いてパッチを送るんだ!

245 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 12:20:00 ]
>>244
>書いてパッチを送るんだ!
いや、これってwindows2000以降の機能で、Win32モジュールに入れるべきかどうか正直迷うんだよね。

246 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 23:16:48 ]
Windows2000以降のラッパをまとめたWin32exモジュールを作ったので公開しました。
ツッコミなどよろしく。

247 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 09:58:22 ]
>>245
Windowsに詳しくないので間違ってたら済まんが、2000以降のみの関数も
普通にwin32パッケージに入ってないか?setConsoleCPとかfindFirstChangeNotificationとか。

>>246
どこに置いたかも書けよw

248 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 10:06:51 ]
246はPeyton Jonesだ。

場所は、わかるだろ。

249 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 23:05:20 ]
関数型言語はマルチコア時代にフィットしているという話を聞いたことがあります。
既存の流行している言語は対応できてないと。

これはどういう理由でしょうか?遅延評価とか、その辺のことを指しているんでしょうか。



250 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 23:13:40 ]
知らんけどミュータブルな値があるとスレッドセーフにならないとかそういうへんの話じゃね?

251 名前:デフォルトの名無しさん [2007/11/26(月) 23:23:18 ]
MapReduce の「副作用が無ければ無限にスケールする」というのが
一人歩きしてるだけじゃないかな。実際には何をするにも副作用は
あるし、MapReduce だって Reduce の作業はスケーラビリティが
殆ど無いか少ない。関数型言語には副作用が無いというのと同じ様な
勘違い。ただ副作用が無い=スケールする部分を奇麗に切り出せる
のであれば有用ではある。

252 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 11:43:41 ]
ああいう大規模データパラレルとマルチコアはあんまり関係ないじゃん。
>>249の話は伝聞なんで雲を掴むような話だけど。


253 名前:249 mailto:sage [2007/11/27(火) 11:48:13 ]
ありがとうございます。透過参照性がスレッドセーフというのはよく分かります。

遅延評価っていうのは、別に関係ないんでしょうか。何かそっちの話を聞いた
ことがあるんです。自分の初心者脳では、正格では無限のリソースを前提に
した関数を書けないが、Haskellのような言語だと記述可能、とか思ったのですが、
ちょっと頭悪いですか?w

254 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 12:16:38 ]
遅延評価や投機実行をうまく使えば、
CPUコアの利用効率を上げられますが、
それには頭のいいスケジューラが必要なわけで。

例えば、
www.fixstars.com/Grid/pukiwiki/index.php?MapReduce
にプチ解説があるようなstragglersの問題。

ただ実行順序が規定されてないので、
工夫する余地がまだまだ残されているとは言えると思う。
Erlangのような言語が、あまりpure functionalじゃないとはいえ、
一通りの実績を上げていますし。

また、プログラマがスケジューラに自由を与えるような
プログラミングスタイルを強制されているという見方もあると思う。



255 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 10:41:19 ]
F#のスレは毎日更新されてますが、こちらは静かですね・・・

関数型で今イチバン売れ筋なのはF#なんですかね。

256 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 17:36:48 ]
Haskell始めてから3週間目の今の感想。
・概念的にはMonadよりArrowのほうが分かりやすいんじゃないか?とか。
・Monadって何?って聞かれるとなんと答えていいかわからないが、
  Arrowなら『矢印をカプセル化したようなもの』と言える。
  あとは適当に結合演算とか普通の関数をアロー化する演算とか実装していけばおk。
  脳内のイメージも矢印をつないでいくだけだし。
  Monadをイメージしようとしてもなんかいまいちピンとこない……。
  bindにやる夫関数とか適当に名前を付けて無理矢理イメージしたけど。
・Monadのbind演算子(>>=)はm a -> (a -> m b) -> m bで非対称的。
  Arrowの(>>>)はa b c -> a c d -> a b dで比較的対称性があって気持ちよい。
・Arrowは『計算を結合』しているのが自明的に表現されてる。
  Monadは別にそうは見えない。……値と計算を結合なのか?意味わかんね。
・そもそも非対称な二項中置演算子はイマイチ気に入らない。
  リスト結合演算子とか`elem`とかは仕方ないけど、せめてあまり高階にしてほしくない
・Monadの計算部(a -> m b)は結構重要なパーツの一つなのに、名前が付いてない。
  だから『モナドを返す関数』としかいえねえ。
  しかもbindした後にはその返り値とは(型は同じだけど)別の奴が帰ってくる。無駄に混乱。
  その点Arrowは計算部がずばり『Arrow』。カプセル化されていて美しい。
・Monadは(>>=)は左から右へ流すように使えるが
  普通の関数は右から左。もちろんliftMとかも右から左。
  (=<<)も右から左。しかし関数を拡張して適用するという見方で見るとこっちが自然という謎さ。
  結局どっちからどっちへ読むべきか迷う場所が多く、思考停止してしまう。
  ArrowだったらArrowとして結合されている部分は左から右。
  普通の関数は右から左で思考が自然に切り分けられる。

257 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 17:37:32 ]
・Monadでポイントフリースタイルをやろうとするとかなりキモくなるよね。
  Arrowはまあ基本的にポイントフリーな感じがするし、普通の関数と分けられていいんじゃない?
・Arrowの構造を作ったりする関数は基本的にArrowだけを返す。
  Monadの関数はなんかリストとかに入ってたりして気味が悪い。モナドのリストって、最中十個入りじゃないんだから。
・Arrowの構造を作る関数はキチンと構造を作ってるように見える。
  Monadの場合は解読に時間がかかる。なんのためにこんな書き方をしてるんだろうとか……。
・ArrowでStateを自作してみたら比較的分かりやすかった。
  Monadのは今見ても訳が分からん。というかMonadの対象が関数って何だよ。
・Monadに慣れ親しんでる人はMonadを扱うのに苦労しないだろうから、
  簡単なものなら短い表記が出来るMonadのほうがいいんだろう。
  しかし、初心者にいきなり教えるのならArrowのほうが直感的。
  ポイントフリースタイルを使いまくってムツカシイことさえしなければ。
・Arrow講座みたいな入門編とかでArrowを書くとき、
  関数がそのままアローになるからってやたら省略しないでいただきたい。
  アローな部分と普通の関数の部分が綺麗に分かれてるのがいいんだから……
  それにarrってやっておけばその部分は一般のArrowでも使えるし。
  SF f >>> SF g = SF (f >>> g)とか出来るからそういう書き方が出来ること自体はありがたいが。
・arr.uncurryとかarr.constってよく出てくるけどそういう関数はないのか……
・Arrow関係ないけどデータ構築子と型構築子が同じ名前って混乱するな。時々イラっとくる。
・aとかbとか何を表してんのか直感的じゃねえよ。型変数だったり、引数だったり……
  fって名前だから関数かと思いきやArrowだったり。
  ネーミング規約みたいなものはないのか……
  Arrowが引数で来たときの名前の付け方とかおもいつかねえけど。
・そろそろふつける買おうかな……。
・初心者のくせに身の程をわきまえない長文失礼しました……

258 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 17:42:34 ]
>>257
> ・Monadでポイントフリースタイルをやろうとするとかなりキモくなるよね。
もう少し他人のコードを読んでいくと感覚がつかめてくると思いますよ

259 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 18:11:18 ]
モナドのリストを返す関数なんてそんなに使うか?

しかし「モナドのリスト」って言い方は何か違和感あるな。
[IO]みたいなのを想像してしまう。



260 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 18:16:50 ]
俺のポリシーではIOはmain内でしか使わない

261 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 18:25:06 ]
>>258
把握。

>>259
ライブラリを見返してるけどそこまではなかったかも……。
初めて見たときに比べればそこまで疲れないし。
やっぱり慣れの問題なんだろうか。『モナドを返す関数』が普通の関数と同じ地位にいるのがイマイチだけど。
引数の数でバージョンがいくつもあったりするのもなんかいただけない。
でもやっぱり慣れれば気にならなくなるんだろうな……。
なんかJavaやったらCのポインタが理解できた時の気持ちを思い出した。(違うか)

262 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 18:30:02 ]
モナドなんてステートとIOとリストとMaybe以外はほとんどつかわねーぜ

263 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 18:30:44 ]
IORefもつかうか。

264 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 18:38:36 ]
a0 -> a1 -> ... -> m bの形の関数を呼ぶのにはmonadic functionという名前が使えるはず。
日本語だと「モナドな関数」か。

俺のコードの大部分はモナドな関数になってるな。
普通の関数より書きにくいから嫌なんだが、変更に強いコードにするために仕方なく。

265 名前:デフォルトの名無しさん [2007/12/08(土) 12:05:09 ]
やさしいHaskell入門での質問です。

www.sampou.org/haskell/tutorial-j/classes.html
> (ここで、同値性といっているのは、「値同値性」のことです。
> 対照的な概念としては、「ポインタ同値性」というのがあります。
> たとえば、Java 言語の == です。
> ポインタ同値性は参照透明性を持ちません。
> それゆえに純粋な関数型言語とは相性がよくありません。)

なぜポインタ同値性は参照透明性を持たないのですか?

266 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 12:26:42 ]
>>265
ポインタ同値をテストする関数eqがあったとすると、
let v = [1,2] in eq v v
はTrue。一方、vを展開して
eq [1,2] [1,2]
とするとFalseになるかもしれない。
参照透過って言うのはそもそも、こういう展開をしても
プログラムの意味が変わらないってことだから、
eqによって参照透過性が破られたと言える。

267 名前:265 mailto:sage [2007/12/08(土) 12:37:55 ]
>>266
おー!なるほど。わかりやすい説明ありがとう。
[1,2] が複数箇所に出現する場合、メモリ上に別々に配置されるかもしれないわけですね。
勉強になりました。

268 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 15:29:39 ]
『A a』っていう表記が使われる場所によって
Aは型構築子、全体は多相型、aはパラメータ
Aはデータ構築子、全体はデータ構造、aはその中身
aは型クラスAのインスタンス、何かの型の一部
って変わるのがちょっとわかりにくいね。もうちっとなんとかならんか。

269 名前:デフォルトの名無しさん [2007/12/09(日) 21:35:19 ]
Haskell勉強してなくてよくわからないんですが、
乱数生成器をsplitしていくつかにしてseed固定で乱数を作れといわれました。
どう作ればいいんでしょうか?
初歩的な質問だったらすみません。



270 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 00:51:19 ]
日本語でおk

271 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 15:07:15 ]
無限リストって便利だけど、末尾を正格に要求する関数について型安全じゃないよね。
でも無限リスト型を再定義するとリストに関して作ったすべての関数について委譲関数を作んなきゃいけなくて現実的じゃない。
結局これは妥協するしかないのか?それともなんらかのテクニックで回避できる?

272 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 10:46:48 ]
>>271
日本語でおk

273 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 10:52:25 ]
>>271
俺の知る限り、妥協するしかない

274 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 12:46:45 ]
>>271
評価がとまらないだけで型安全だよ。

275 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 13:17:06 ]
そう言えば、厳密に言うと無限ループでも型安全なんだな
でも全域関数でない関数が厄介なことは事実だから、何か呼び名が欲しい

276 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 17:14:07 ]
>>275
よくわかんないけど、チューリングの停止問題のこと言ってるの?

277 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 17:30:25 ]
>>276
いや、Haskellには失敗し得る関数があるじゃん
例えば、headはリストが空の時例外を飛ばすし、
lengthは無限リストに適用されたら終わらない
一方で、例えばdropみたいに、引数に未定義値が含まれない限り、
あらゆる引数に対してちゃんと値をもどす関数もある
だからこの二つを区別できるように、短い呼び名があれば便利だな、ということ
「型安全」という言葉を使いたくなるけど、これは>>274の言う通り誤用だし

278 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 17:40:12 ]
>>277
そういう一般的な関数のことを部分関数というんじゃないかね

279 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 18:03:01 ]
>>278
全域関数も部分関数の一種だから、とか考えてたけどカジュアルに使う分には問題ないか
グダグダですまん



280 名前:271 mailto:sage [2007/12/11(火) 19:46:50 ]
いや、同じ構造のデータ型でも、
型システムで『無限リストかそうでないか』をカッキリ分けられたら、
そっちのほうが型安全にならないかな?と思って271を書いたんだけど。

たとえば幽霊型とか使ってそういうのが解決できないかとか思ったんだけど、
それじゃ現行の関数を活かせないし、あんまり意味ないなあ、と。

281 名前:デフォルトの名無しさん [2007/12/12(水) 01:00:18 ]
>>280
言いたいのは、型システムを使って、
無限リストのフロー解析をして、
プログラムの停止性、正当性などを知ることができないかってこと?
それならリストの有限性の抽象解釈をやるってことになると思うけれど。

282 名前:271 mailto:sage [2007/12/12(水) 01:16:01 ]
>>281
違う。返り値が無限リストの関数で、その関数の型を明示しておけば、
無限リストに対して使ってはいけない関数の引数にした時に型エラーになるようにしたい。
まあ無理っぽいのでもう諦めてるけどな。

283 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 02:43:32 ]



※起こりえる全てのリストのうちどれが有限リストかを確かめることは
 無限に長いリストに対して演算を行うことと同じ


ってだれかが言ってた

284 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 07:57:59 ]
だから誰も自動チェックしてくれって言ってるわけじゃないじゃない……
静的に型推論してくれるんだから、
enumFromにInt a => a -> [a] Inf
って書けるとして
lengthに[a] Ltd -> Int
みたいに指定したらコンパイルエラーになって欲しいとかそういう問題だって。無理だけど。

285 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 08:17:31 ]
enumFromよりrepeatのほうが良かったな(repeat :: a -> [a] Inf)
あとコンパイルエラーになって欲しいのは『length.repeat x』みたいな文脈な。

286 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 09:39:03 ]
strictな言語なら、force/delayみたいに陽に指定するんだろうから、
>>281の言うような方法も効果を挙げるだろうが、
lazyな言語だと、リストを生成する全ての関数が、
無限リストを返す可能性があるので>>276でFAだが。

[1..]が無限リストであることも、解析が必要になるし。
うまくできるケースもあるが、希少すぎる。

287 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 11:18:26 ]
>>271が見事に無視されててワラタ

288 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 11:39:59 ]
言葉の使い方間違ってるよな。

289 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 17:16:57 ]
なんというか残念賞な言語だな。
関数言語としてのおいしいところは全てC#3.0に持っていかれてしまった。



290 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 17:26:09 ]
それはギャグのつもりでいっているのか

291 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 17:27:04 ]
>>289
関数言語?w
C#3.0?w

292 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 18:12:14 ]
>>289
F#じゃなくて、C#かよ・・・

293 名前:Wadler [2007/12/12(水) 22:26:38 ]
Haskell初心者です。
a->[a]という(型の)monad(仮にDとしましょう)をつりたくて困っています。
どなたか教えてください。
とくにDのmapFにあたる関数も教えていただけれありがたいです。

294 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 23:11:10 ]
>>293
はい?

295 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 23:12:01 ]
とりあえず、日本語でおkと言ってほしいのですか?

296 名前:デフォルトの名無しさん [2007/12/12(水) 23:13:50 ]
>>295
日本語でおk

297 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 00:02:02 ]
よくわからんが
data D a = mkD (a -> [a])
instance Monad D where ...
ってことか?
あとmapFってなんだ?fmap?

298 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 01:20:15 ]
>>293
よくわからんが、釣りってことか?

299 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 01:23:14 ]
>>297
mkDはなぜ先頭が大文字になってないんだ?
受理されないだろ。



300 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 01:25:29 ]
なんなんだ?
近頃Haskellerの質の低下が激しすぎるぞ

301 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 02:15:06 ]
昔からです


302 名前:デフォルトの名無しさん [2007/12/13(木) 02:20:10 ]
割と玉石混淆なイメージだね

303 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 02:23:35 ]
暇つぶしで弄ってる学生がここで暇を潰しているイメージ

304 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 08:17:19 ]
>>299
>>303
そのとうりですすいません……

305 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 11:07:28 ]
>>268-304
この辺からおかしくなってきてる

306 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 11:49:46 ]
なんにしてもHaskellerが増えるのは喜ばしいことだ

307 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 11:51:12 ]
rubyみたいになるぐらいなら少なくてもいい

308 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 16:58:02 ]
少数精鋭投入ならこれでいいだろうけど
大人数投入用にコードもデータもブラックボックスにできる仕組み(命令型のオブジェクト指向同等?)誰か作らないのかな

309 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 17:07:09 ]
大人数投入っていまどき流行らないよ
人海戦術でプログラミングする時代は終わった



310 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 17:23:49 ]
>>308
ブラックボックス化ってどんなの?
カプセル化なら標準のモジュールシステムがあるけど

311 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 17:28:42 ]
>>308
そんなにオブジェクト指向がやりたいなら
つ O'Haskell

312 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 17:30:17 ]
でも、そもそもオブジェクト指向は型理論に包含されるものだから・・・

313 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 17:31:50 ]
デバドラ屋と少数のhaskellerがいればたいていのプロジェクトは成功する
・・・夢を見た

314 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 18:14:01 ]
>>308
そもそもhaskellにはオブジェクト指向は不要なんですよ。
というのも、関数の再利用できる範囲がCやらjavaやらとは桁違いに大きいのが特徴だからです。


315 名前:デフォルトの名無しさん [2007/12/13(木) 21:20:25 ]
Haskellでモジュールつかってカプセル化してコード書いている人あまりいないような気がするんだけど気のせいかな。


316 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 21:22:03 ]
なにを根拠に?

317 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 21:35:09 ]
>>315
そもそもhaskellを使って実用アプリを公開してる人があんまりいないんだから
仕方ないだろ。

318 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 22:49:47 ]
Haskellって関数型言語の勉強用じゃないの?

319 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 23:10:30 ]
それだけのための言語だとどうして思うのですか?



320 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 00:39:15 ]
GHC 6.8.2が出てるね。
GHCiの機能追加がメインっぽい。

321 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 00:53:25 ]
HaskellはOOじゃなくて、
generic programing指向だからなあ。
Genericsの世界では最強認定を受けてる。

322 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 01:21:07 ]
OfficeがHaskellで書きなおされるまで俺はその有用性を認めない。

323 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 02:29:17 ]
スケーリングのための言語じゃないんだよな
工場制手工業ならOOであることやポピュラリティ(みんなが使ってること)は必須だ。

324 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 13:26:48 ]
別に必須じゃないし。
今流行ってること取り入れたってどうせちぐはぐになるだけ。

325 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 13:28:05 ]
っていうかさ、人海戦術の奴隷商売に慣れすぎていて、理性的な考え方を失ったお猿さんですか?

326 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 14:15:06 ]
ポピュラリティが必須というのは分かるけど、OOが必須というのはおかしくね?
OOは一手法に過ぎないんだから、もっと良いものが知られればそっちが使われるようになるだろ

327 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 14:21:57 ]
OOは現時点でのポピュラリティの1つって事ならわからなくもないけど、
わざわざ分けて必須って言うほどのものではないな。

328 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 14:54:59 ]
つーか、OOはstableなlibrary構築にはいいんだけど、
意外とreusabilityが悪いから、
generic programmingが注目されているのが現状です。
Haskellのtype classとかC++のconceptみたいなやつ。

C++はtemplate/traitsでやってましたが、ちょっと非力なので、
Haskellのtype classそっくりの"concept"が入る事になりました。


329 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 14:59:18 ]
実際これはOOと比べてどうなんだとか思ってたんだけど
実際使ってみたら意外とオブジェクト指向のメリット包含しててSUGEEとか思った



330 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 14:59:57 ]
>>328
日本語でおk

331 名前:328 mailto:sage [2007/12/14(金) 15:35:51 ]
日本語ですよ?






[ 続きを読む ] / [ 携帯版 ]

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

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