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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2012/01/02(月) 22:19:28.26 ]
haskell.org
ttp://www.haskell.org/

日本語サイト
ttp://www.sampou.org/cgi-bin/haskell.cgi
ttp://www.shido.info/hs/

過去ログ
関数型プログラミング言語Haskell
Part1 ttp://pc.2ch.net/tech/kako/996/996131288.html
Part2 ttp://pc2.2ch.net/test/read.cgi/tech/1013846140/
Part3 ttp://pc8.2ch.net/test/read.cgi/tech/1076418993/
Part4 ttp://pc8.2ch.net/test/read.cgi/tech/1140717775/
Part5 ttp://pc8.2ch.net/test/read.cgi/tech/1149263630/
Part6 ttp://pc11.2ch.net/test/read.cgi/tech/1162902266/
Part7 ttp://pc11.2ch.net/test/read.cgi/tech/1174211797/
Part8 ttp://pc11.2ch.net/test/read.cgi/tech/1193743693/
Part9 ttp://pc11.2ch.net/test/read.cgi/tech/1211010089/
Part10 ttp://pc12.2ch.net/test/read.cgi/tech/1231861873/
Part11 ttp://pc12.2ch.net/test/read.cgi/tech/1252382593/
Part12 ttp://hibari.2ch.net/test/read.cgi/tech/1272536128/
Part13 ttp://hibari.2ch.net/test/read.cgi/tech/1286706874/
Part14 ttp://hibari.2ch.net/test/read.cgi/tech/1299385928/
Part15 ttp://hibari.2ch.net/test/read.cgi/tech/1310199414/
Part16 ttp://toro.2ch.net/test/read.cgi/tech/1317958045/

237 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 22:54:06.87 ]
つまりad-hoc polymorphismを実現する手段として型クラスは必要条件ではないと思った
型クラスはad-hoc polymorphismと型推論を両立するためにless ad-hocにする手段で
型推論を捨てるなりすれば型クラスはなくても多相はできるでしょうと

238 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 23:29:31.36 ]
モナドであることの利点と型クラスの利点を切り分けられていない人が多い。
モナド則の有難味を感じるのはIOくらい。

239 名前:デフォルトの名無しさん [2012/01/15(日) 23:54:42.51 ]
民主党には朝鮮人など外国人のなりすまし、スパイが約90名在籍している
野田内閣は過半数が帰化人

野田はどうだろうか
韓国人から賄賂を貰い、韓国人の集いに出席している野田は

首になった蓮○はシャブで逮捕歴のある人間と仲が良いな。蓮○自身はやってんの?
い-6-1
テレビが言えない民主党のスポンサー=韓国北朝鮮
あとはもうわかるよな



240 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 07:38:13.19 ]
wxHaskell でバイト配列のポインタ (Ptr Word8) から Image 型を作る方法はありませんか

241 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 07:41:22.96 ]
>>240
すいません、解決しました

Graphics.UI.WXCore.Image や Graphics.UI.WXCore.Draw 辺りばかり見ていましたが、
Graphics.UI.WXCore.WxcClassesAL に望むものがありました

242 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 08:39:44.77 ]
>>232
> Cでも構造体と関数ポインタ使えばOOPできるよ、というのと同じような話なわけ

Haskellでもモナドと型クラス使えばOOPできるよ、というのと同じような話なわけだね
OOPを簡潔に書けないからね

243 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 08:43:19.87 ]
OOPと同じ手段は使えないけどOOPで実現したいことは簡潔に書ける(ドヤ

244 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 09:33:47.83 ]
>>242
今、他の言語がtype classみたいな機能を導入検討中ですぜ?

245 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 12:01:33.44 ]
>>232
>モナドをヘビーに使い込むようなスタイルのプログラミングをするなら、Haskellを特別視する理由になるよね
「モナド」と「Haskell」を他の組み合わせにすればどんな言語についても言えることだろ。モナド(Haskell)を特別視する理由に全くなってない



246 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 12:39:05.61 ]
>>232
IOモナドをヘビーに使い込むようなスタイルのプログラミングをするなら、正格評価をする言語を特別視する理由になるよね

こういうことですか?

247 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 17:11:15.74 ]
多相=アドホック多相だと思ってるハスケル脳は
多相=サブタイプ多相だと思ってるOO脳と同類だな

248 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 17:29:56.98 ]
Haskellはadhoc多相だけではないので念の為。

249 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 19:02:10.12 ]
手続き型言語でも簡単に実装できるが、Haskellを特別視する理由、に対する返答なんだからそれはおかしいんでは
モナドの利点は>>223 >>224 >>226など(>>226はモナドというより、後付けでインスタンスを追加できる型クラスの利点?)

250 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 19:08:13.39 ]
モナドなんか使わなくたって処理系実装すればいいだろ
他パラダイムを実装する枠組みがモナドである必然性はゼロ。
参照透明である必然性もゼロ。型クラスを使う必然性もゼロ。

251 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 19:12:22.89 ]
材木を見たら釘を打ちたくなる症候群のハスケル厨が
モナドを使って他パラダイムのエミュレートができると気付いただけ

他パラダイムのエミュレートにモナドが不可欠ではないし
モナドが他パラダイムにベストな解法であるわけでもない
単に、モナドで表現すること「も」できるね、ということでしかない



252 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 22:44:00.17 ]
where や let 内で定義する関数には INLINE プラグマは付けられない?

253 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 23:07:15.68 ]
モナドは表示的意味論の種々の技法から抽出されたものだから、
計算に本質的なことはモナド的な見方が出来てしまうのですよ。
圏論バカ的な意味合いで。整理するための優れた枠組みなわけです。

254 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 00:24:32.62 ]
>>253
お前は形容詞バカだ
本質的な、モナド的な、優れたアレがあると言うが名詞が出てこない

255 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 00:24:57.94 ]
何の説明にもなってないな



256 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 00:37:55.98 ]
プラグマを処理するときにモジュールレベルよか下のスコープ見てくれるとは到底思えない

257 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 07:24:50.58 ]
>>256
モジュールレベルというのはどこまでの範囲でしょうか?

{-# LANGUAGE *** #-}
module Homu where

ここまでですか?

それとも、トップレベルの関数定義に対するプラグマも含まれますか?

258 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 12:27:54.23 ]
モナドは数学に基づくからその辺の言語とは格が違う
1+1=2が否定できないのと同じこと

259 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 12:38:09.99 ]
唯一のコンストラクタを持つ型の直和が二つのコンストラクタを持つ型と同型であることと同じかなるほどなるほど

260 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 16:14:17.74 ]
数学に基かないプログラム構成要素なんて存在する?

261 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 17:08:53.02 ]
孤高なるや否や

262 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 17:34:33.19 ]
彼にとっては圏論のみが数学なのだろう。

263 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 17:36:00.52 ]
モナドは圏論に基づくからその辺の言語とは格が違う
f.(g.h)=(f.g).hが否定できないのと同じこと

264 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 17:42:57.57 ]
で、モナドって言語なの?

265 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 17:47:59.53 ]
哲学用語



266 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 18:37:01.81 ]
>>252
付けられるよ

267 名前:デフォルトの名無しさん mailto:sage [2012/01/17(火) 19:06:57.29 ]
>>266
初め付けられなかったから訊いたみたんだが、
今再挑戦したらあっさりできた

どうもレイアウトルールに従ってなかったみたいだ
where {-# INLINE f #-} f x = ・・・
なんてのはできないのね

where
 {-# INLINE f #-}
 f x = ・・・
これならできた
ちょっと不格好になるが仕方がない

助かった、ありがと


268 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 01:16:44.99 ]



 東京にある6つのキー局の内、製作から財務まで一貫して朝鮮人が行ってるテレビ局が1つ
 中国共産党から毎年大量の反日工作費が流れているテレビ局が2つ
 もろに北朝鮮と繋がっているテレビ局が1つ  
年寄はまだまだテレビという外国人に騙され続ける


269 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 22:41:54.05 ]
Float型やDouble型などの、負方向の最大値(無限大ではない)や、
最もゼロに近い正の数などを得る方法は何かないでしょうか

270 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 23:40:17.17 ]
>>269
Hugs> 1/0::Float
inf
Hugs> -1/0::Float
-inf
Hugs> 1/(1/0)::Float
0.0
Hugs> -1/(1/0)::Float
-0.0


271 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 23:44:42.25 ]
import Numeric.IEEE
-maxFinite
succIEEE 0

272 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 23:45:01.08 ]
>>270

>>269 でも言いましたが、無限大ではないです
「計算が可能な」負方向の最大値、正方向の最大値です

あと、最もゼロに近い正の数です

273 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 23:51:23.95 ]
クラッシュするんじゃ

274 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 00:02:03.11 ]
>>271
ieee754 パッケージを使うのでしょうか

インストールして、ghci 上で使ってみましたが、
m というモジュールが見つからないというエラーが発生します

今までの経験から察するに、MinGW 用の libm.dll という
dll が必要ではないかと思いますが、合ってますか?

gnuwin32.sourceforge.net/packages/libm.htm
ここから辿れるページで探しているのですが、なかなか見つかりません

今日はもう遅いので後日探してみます

275 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 00:10:16.65 ]
>>271
ごめんなさい、環境を書き忘れていました

Windows7
GHC 7.2.2



276 名前:デフォルトの名無しさん [2012/01/20(金) 16:12:27.09 ]
「ふつうのHaskellプログラミング」ってどうですか?評判がいいですが、結構古いので
ほかのにしようかまよってます。

277 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 16:58:44.68 ]
>>276
一度手続き型言語を修得した人向けで、読後、読み返しにくい

と言うか、今はプログラミングHaskell一択だろう


278 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 17:00:08.41 ]
ちょっとでも英語読めるならlearn you(ryが初心者向けとしてはベスト

279 名前:デフォルトの名無しさん [2012/01/20(金) 17:17:06.71 ]
マセマティカのように
log 6 - log 2 を 誤差なしにlog 3 ときっちり答えてくれるようなライブラリありませんか?

280 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 19:56:42.13 ]
>>279
logfloat パッケージというものがあるみたいだ

使ったことがないから(インストールする気もない)分からんが、
LogFloat というデータ型で log x を表現するっぽいから、
もしかしたら LogFloat 6 - LogFloat 2 = LogFloat 3 となるかも知れん

281 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 19:59:20.97 ]
>>280
すまん、紛らわしい間違いをしたな

もしかしたら、logFloat 6 - logFloat 2 == logFloat 3 となるかも知れん

282 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 01:24:19.13 ]
Learn You a Haskell はもうすぐ翻訳版が出るんだっけ?
まあ英語ならただで読めるんだけど

283 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 06:03:22.00 ]
>>276
「ふつうの」は、実際に役に立つプログラムを書きながら Haskell を学ぶという
立場で、その方針はよいと思う。誤植も少ない。古いことは気にしなくていいと
思う。

ただし文法の説明はかなりはしょってあるし、網羅的でもない。モナドの説明は
(まちがってはいないが)ごく簡単で、あれじゃわからないだろうと思う。

Wiki の作りかたの話は、省略した部分が多すぎて、本を読んだだけではさっぱり
わからなかった。


284 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 09:54:12.35 ]
Haskellerがtailコマンドを実装すると
ファイルを全部読み込むクソコードを書くと
教えてくれる良書 > ふつける

285 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 13:53:02.40 ]
【プログラミング部】 PHPが100倍速で動くようになったぞー
awabi.2ch.net/test/read.cgi/poverty/1327050821/



286 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 11:23:48.95 ]
>>284
> ファイルを全部読み込むクソコードを書く

Haskellが綺麗に書けるって言ってるときは
大抵こんなのばかりだな

287 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 13:46:53.61 ]
数値リテラルの範囲をコンパイル時に指定できるGHC拡張はないでしょうか

たとえば

newtype NumPadKey = NPKey Integer -- 0 から 9 に限定したい

let a = NPKey 8 -- ok
  b = NPKey 21 -- コンパイルエラー

こういう事をしたい場合は、
0 から 9 までの 10 個の数値が入った NumPadKey 型の値を返す
10 個の関数(num0 :: NumKeyPad など)を作るなどするしかないでしょうか

288 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 14:19:09.91 ]
TemplateHaskellというGHC拡張を使えばできるよ!

289 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 14:27:24.57 ]
>>286
コード上は全部読み込んでるように見えて、遅延評価で必要な分しか読み込まれないわけですが・・・


290 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 14:29:48.48 ]
>>289
headはそれでいけるけどtailだと全部読むよ

291 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 14:36:41.48 ]
>>290
tail も弱頭部正規形の形までにしか評価されないんじゃないのか?

292 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 15:10:57.18 ]
なるほど>>284は真実だな
>>289>>291は馬鹿すぎwww
クソ遅せえコードまき散らすなよw

293 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 15:25:22.29 ]
ハッシュテーブルが確率に依存するみたいに
遅延評価も木構造のバランスが取れている確率に依存するんだよな

294 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 15:45:23.45 ]
>>291
UnixコマンドのtailはHaskellでいうlastみたいなもん

295 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 15:58:12.71 ]
>>290
take 10 $ tail [1..]



296 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 16:06:01.08 ]
>>295
tail"コマンド"だって書いてるだろアホか

297 名前:295 mailto:sage [2012/01/22(日) 16:08:14.13 ]
ほんとだ、ごめん

298 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 16:37:21.25 ]
>>292
俺(>>291)も完全に Haskell の Data.List.tail 関数の事だと勘違いしてた

馬鹿すぎで申し訳ない

299 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 16:43:56.55 ]
何が問題になってるのか、よくわからん。

メモリに全部読みこむのは「ふつうのHaskell」が getContents を
使ってるからで、Haskell 自体の問題ではないよね。

速度の問題なら、後ろからシークしていくのでないかぎり、どうせ全部
読むんだから問題ないはず。これも Haskell とは無関係。


300 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 16:52:34.31 ]
>>299
どうしてシーク禁止なんて前提にするんだい?
そこを笑われているのに、わかってないんだなw

301 名前:デフォルトの名無しさん [2012/01/22(日) 16:54:23.14 ]
もうちょっと冷静に議論したまえ

302 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 16:59:54.18 ]
処理速度や使用メモリ量を気にするなら、
Haskell でも結局のところやることは変わらないような気がする

System.IO.hSeek で後ろから一バイトずつ戻りながら、改行コードで区切ってく

遅延評価がほとんど活かせず、手続きっぽい実装になるが、
これ以外に良い実装方法が思いつかん

303 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 17:14:45.72 ]
そんなDQN本だったっけと思って自分も見返してみた

p.50より引用
> tailコマンドの作りかたにもいろいろありますが、今回は次のような方針で実装しました。
> 1. 行のリストを逆順にする
> 2. 先頭からn行を取る
> 3. 取った部分リストをまた逆順にする

実際のコード、同ページのリスト2.9
> main = do cs <- getContents
> putStr $ lastNLines 10 cs
> lastNLines n cs = unlines $ takeLast n $ lines cs
> takeLast n ss = reverse $ take n $ reverse ss

ここまでに使った関数は putsStr, putStrLn, print, length, take, reverse, lines, unlines
アクションが getContents

入門書の序盤のリスト処理の例題としてはこんなもんじゃないだろうかと思う
ふつける擁護とかしても仕方ないので俺ならこう実装するってのがあれば見てみたい

304 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 17:17:14.40 ]
コードのインデントが崩れたけど見逃して

305 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 17:26:38.48 ]
>>303
そうだよね。

おそらく「ふつうの」のネタ元と思われる「Software Tools」(ソフトウェア作法、
Fortran 版)にも tail を作る演習問題があって、解答は書いてないけどランダム
アクセスの話よりずっと前に出てくるので、頭から読むことが期待されていると思う。






306 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 17:26:50.51 ]
>>290
そりゃ、reverse使ってるからな
Haskellは、アルゴリズムを考えないと本当に遅いし、同じアルゴリズムなら、LLなんて比較にならないくらい早いコードが簡単に書ける
(ただし、ghci/runghcではなく、ghcで実行ファイルになったときに限る)


307 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 17:34:33.10 ]
>>306
じゃあ tail コマンドを実装するにはどういうアルゴリズムが良いんだろ
という話に若干移りかけている

308 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 17:41:39.84 ]
>>307
うーむ・・・
自分もアルゴリズムにそんなに詳しくないんだけど、10行と言う縛り固定だったり、何行表示するかコマンド引数で取れるなら、last関数を複数回使ったほうが速そうではある
(EOF見つけるまで関数適用の必要ないと推測)



309 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 18:18:22.72 ]
こういうのもIterateeがもっと整備されてくれば過去の笑い話になるんだろうな。

310 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 20:17:33.21 ]
必要な行数だけバッファリングしといて、
EOFきたらバッファを全部出力するのが、
メモリ効率的に有利だろう。O(1)で済むので。
getContentsしたらO(n)になってしまう。
常に「指定した行数 >≒ ファイルの行数」ならどっちも同じだが。

311 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 20:35:54.39 ]
必要な行に辿りつくまでの計算量はどこへ行ったんだ

312 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 20:45:16.49 ]
unsafePerformIO使っていいんなら、普通にファイルの後ろから読んでできるな。

使わんかったら無理っぽい。俺には無理。

313 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 20:46:42.49 ]
空間計算量だよ。

seek可能なら後ろから舐めることもできるが、
泥臭いコードになるからチュートリアル向けのコードじゃないな。

314 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 20:57:18.53 ]
>>313
ああ、必要なメモリの量もO記法で表すのか。ごめん

315 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 20:58:16.55 ]
seekが制限されると、他の言語でもパフォーマンス出せないと思うが。





316 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 21:06:37.77 ]
そんなこといちいち書きこむなよ。

317 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 21:09:34.27 ]
>>312
君の考えた方法で、unsafePerformIO はどこに使うの?

318 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 22:32:20.73 ]
unsafePerformIOとかhSeekとか出てるんだから、ちょっと考えれば
わからない?

大したコードじゃないよ。5行くらいで終わる。

319 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 23:01:59.53 ]
>>310

空間計算量なら

takeLast n xs = diff x (drop n xs) where
 diff xs [] = xs
 diff (x:xs) (y:ys) = diff xs ys

みたいなの使えばgetContents使ってもO(1)で済むよ


320 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 23:04:16.00 ]
>>318
unsafePerformIO って要らなくない?

321 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 23:08:59.31 ]
unsafeでなくてはならない意味がわからないんですけど。

322 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 23:18:32.67 ]
>>320
要らない。さっきようやく気づいた。
まだ、Haskellになれてないもので、、、

でも、Haskellっぽく遅延評価で取り出そうと思うと、
unsafe使わざるをえんね。

まぁ、それを意図してるんだろうけど。

323 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 23:32:52.07 ]
>>319
モナらないと無理。
getContentsの中身はunsafePerformIOなんで。

324 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 00:13:13.59 ]
unix の tail コマンドなどを Haskell で実装する場合、
もし hSeek 使って逆から読み取ることをするとなると、
読み込むファイルが utf-8 とかだったらどうするの?

今試しに hSeek で戻りながら hGetChar で1文字ずつ取ろうとしたら、
戻るバイト数が分からんかった

325 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 00:14:23.33 ]
あ、すまん
バイナリモードで読み取れば良いのか



326 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 02:32:36.04 ]
>>323

ghc7.0.2で試してみたけど最適化なしでも空間使用量は一定だったよ


327 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 07:08:50.63 ]
>>323
getContentsの中身ってunsafeInterleaveIOじゃないの?

328 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 07:31:08.49 ]
iterateeやcondoit使っときなさいって

329 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 10:13:37.62 ]
tailをHaskellで実装する意義が判らん。
初学者でも出来るような事は、Cみたいな言語で充分じゃないの?

330 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 10:19:33.95 ]
そういう台詞は実際にコード貼ってから言えよ
負け惜しみにしか見えん

331 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 11:02:10.67 ]
意外と人多いのね、ここ。

実際に役に立つプログラムにすることを考えると、tail コマンドって
$ bzcat backup.bz2 | tail -10
みたいにパイプで使うことが多いから、結局頭から読む版も作る必要があるよ。

教科書でやるなら、素直に頭から読む版を紹介して、ランダムアクセス版は
練習問題にするのがいいだろうね。

332 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 11:21:41.80 ]
>>329
HaskellでできることをわざわざCでやる必要がないだろ

333 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 11:52:08.14 ]
わざわざ泥臭いことをやってはいけないという空気に従うのが逆に面倒だな

334 名前:デフォルトの名無しさん [2012/01/23(月) 14:22:10.66 ]
具体化できない奴がやたら抽象化にこだわるみたいな

335 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 19:22:03.97 ]
>>334
そのできない具体化とやたら拘る抽象化の例を挙げてみて

もしかして具体例もなく、なんとなく抽象的にレスしてるだけとか?



336 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 20:32:55.92 ]
盛り上がってきたね。

別にプログラムなんて好きなんで作ればいいんじゃない?


337 名前:デフォルトの名無しさん [2012/01/23(月) 21:10:58.12 ]
>>335
読解力が爆発してますね
>>333へのレスです






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

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

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