[過去ログ] 関数型プログラミング言語Haskell Part16 (978レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
230: 2011/10/22(土)21:42 AAS
>>228
リストは先頭からしか読めないからな
最後の数値を即座に取り出したいなら別のデータ構造を考える必要がある
231
(3): 2011/10/22(土)21:57 AAS
>>229
既にソースに書いてある。
先頭から見て行かないと判らない、というならそれはHaskellの出来の問題じゃないの?
232: 2011/10/22(土)22:02 AAS
>>231
リストのデータ構造の性質
haskellじゃなくても、リストを使えば先頭からしか辿らない
233: 2011/10/22(土)22:07 AAS
ハスケルの配列はO(1)なんだっけ?
234
(1): 2011/10/22(土)22:25 AAS
>>231
たとえば [1..3] は 1 : (2 : (3 : [])) であり、
「リストを構成するデータ型」の値だ
そして、 : や [] はこのデータ型の「値構築子」だ( : は中置値構築子)

last 関数は、last [] = errorEmptyList "last"; last (x:xs) = ・・・
という形のパターンマッチを行う関数だ

last [1..3] は last (1: (2 : (3 : []) なので、
(x:xs) にパターンマッチし、x=1、xs=(2 : (3 : [])) と束縛する

リストに限らず、データ型の値を作ってる値構築子の引数(この場合は 1 や 2 など)は、
このようにパターンマッチさせて値構築子を剥がす事でしか参照できない

で、リスト 1 : (2 : (3 : [])) がこのようなネスト構造を成している以上、
ネスト構造を「順に剥がしていく」ことでしか中の値は参照できない

ちなみに、f (_:_:x:_) = という関数で f [1..3] などとして一気に x=3 と束縛しようとしても、
内部で順に値構築子を剥がす処理をしてパターンにマッチするかを調べるから同じ事

これを 「Haskellの出来」 というのなら、そうだね、としか言いようがない
235: 2011/10/22(土)22:55 AAS
>>234
haskellの出来じゃない

配列と違って、リストはメモリ上に連続して並んでる保証はない
だから、先頭から順々に次に要素のアドレスを参照していくしかない

配列なら、連続して並んでるから、先頭から要素のサイズをステップ数として、希望の位置までアドレスの参照先をずらせば良い

c言語でも同じ事
(haskellで配列使った事ないから分からんが、配列と言うデータ構造の性質としてはO(1)になるはず)
236: 2011/10/22(土)22:56 AAS
x要素のサイズ
o要素一つのサイズ
237: SCHEME餃子 ◆8X2XSCHEME 2011/10/22(土)23:06 AAS
>>231
構文木の段階の情報と、実行時の段階のマシンコード (バイトコード) ではレイヤが違う話。
レイヤをまたいでうまいことやれば…というのは個別の実装の最適化をがんばってもらうしかない。
238
(1): 2011/10/22(土)23:15 AAS
last [1..3] くらいならコンパイル時に展開してもいい気がするけど
それでじゃあ、この最適化があれば実装の出来がいいかって言われると
うーん
239
(1): 2011/10/22(土)23:25 AAS
>>238
うん?
ghciの話じゃないのか

ghcにO2オプション付ければ積極的に最適化されるから、

last [1..3] = 3

みたいに最適化されてんじゃないの?
240: 2011/10/22(土)23:44 AAS
>>239
少なくとも GHC 7.0.3 ではされません
241
(1): 2011/10/22(土)23:47 AAS
>>186が楽しいって感覚は分からないな
Haskellや関数型プログラミングらしくなくて、むしろ気持ち悪いくらいなんだけど
242: 2011/10/22(土)23:54 AAS
>>186
俺は、楽しいかどうかというより、
そういう発想が他のどういうところに活かされるのか気になる
243
(1): 2011/10/22(土)23:56 AAS
FP的だから関数型言語的と言っていいと思う。
244: 2011/10/23(日)00:00 AAS
>>243

>>241 はFP的ではないと感じてるわけだから、
どの辺りがFP的か簡単にでも説明してあげないと堂堂回りになるよ
245: 2011/10/23(日)00:03 AAS
外部リンク:en.wikipedia.org
の事ってのは通じてる?
Bird先生の本もこの系譜になると思うけども。
246: 2011/10/23(日)00:25 AAS
通じないだろw
普通はプログラミングパラダイムの方を思い浮かべる
247: 2011/10/23(日)00:30 AAS
FPと言えばBackus先生のFP!
Function Programmingの略!
これが関数道の正しい道!
248
(1): 2011/10/23(日)00:32 AAS
どっちでもいいけど
>>186のどこが関数的?
249: 2011/10/23(日)00:41 AAS
逆にどこが違う?
250: 2011/10/23(日)01:26 AAS
>>248 じゃないけど、おれも >>186 のどこが関数的か分からん

関数的とも手続き的手も言えん、なんとも分からん代物
251
(1): 2011/10/23(日)01:42 AAS
こんなの関数的な要素は全く無いだろ
mainの最後を[2..100]と変えたらおかしくなることからして関数的でないことが分かる

それに関数的かどうかとは別に、プログラムとしても洗練されてない
fizzとbuzzの空文字列や関数fに数値を渡す設計はどうにかならなかったのかと思うし
fの中で文字列の比較をしてるのも酷い

Bird先生?難しい本を薦める前に添削してやれよと…
252
(3): 2011/10/23(日)04:25 AAS
BackusのFPはポイントフリースタイルのイメージだね。

Bird先生は別に要素レベルの演算までリストでやれと言ってるわけではないと思う。

lift n = (n,"")
fizz (n,s) = (n,s ++ if n `mod` 3 == 0 then "fizz" else "")
buzz (n,s) = (n,s ++ if n `mod` 5 == 0 then "buzz" else "")

fizzbuzz xs = map (buzz . fizz . lift) xs

くらいでも関数的と言っていいんじゃないか。
253: 2011/10/23(日)04:54 AAS
それ以前に、センスがあるとは思えないんだが。奇抜さはあるにしても。
254
(2): 2011/10/23(日)07:27 AAS
>>251
洗練されたコード早く
255: 2011/10/23(日)07:46 AAS
>>254
>>252
256: 2011/10/23(日)08:15 AAS
>>254
それはBird先生の本を薦めていた人たちに言ってくれよ
俺は剰余を使ったつまらないのしか書けないから

しかし>>252も何がしたいのかよく分からないなw
257: 2011/10/23(日)08:32 AAS
えー、>>252はないわ
258
(1): 2011/10/23(日)08:49 AAS
>>220
つListLike
259: 2011/10/23(日)11:08 AAS
>>258
うん
そういうのを使って「標準ライブラリ」を大掃除して整理してほしいんだよ
そうすれば、外部ライブラリもそれに倣う
1-
あと 719 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.015s