[表示 : 全て 最新50 1-99 101- 201- 301- 2chのread.cgiへ]
Update time : 06/13 19:39 / Filesize : 96 KB / Number-of Response : 378
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

【アンチ】関数型言語は使えない【玩具】 2



1 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 20:45:47.95 ]
前スレ
toro.2ch.net/test/read.cgi/tech/1320743217/

2 名前:デフォルトの名無しさん [2012/02/28(火) 21:08:37.06 ]
オブジェクト指向言語で関数型風味(?)に書いたらこんな感じ?
ideone.com/CXMrq

要素数と実行時間が何の関係無くなるけど
そもそも何を比較してたんだっけ

3 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 21:38:51.34 ]
今時の技術についていけなくなったら辞めてくださいね

4 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 22:28:08.33 ]
前スレで関数型言語は玩具にすぎないと結論出たからスレは不要

5 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 23:03:54.55 ]
>>1

前スレ>>992-993
なら、Haskellもコンパイラの進歩でpythonに並ぶ余地はあるって事か

元々、length関数や、++演算子(リストの連結演算子)が初心者にも簡単に作れるってのが気に入ってるだけだから、体感できない速度差は気にならんけど・・・
Haskellに惹かれるのは、defとか、forとか、(モナド使わない限りはifも)そう言うキーワードをなるべく見ないで済むってのが、一番大きい気がする
(というか、forとifが一番見たくない)

あと、基本的に右辺と左辺が=(等しい)なのも気に入ってる

コンパイラのmain=...と言うのも、あながち間違ってない

速度こそpythonに劣るだろうけど、自作のmap関数や、++演算子などの":"で区切られて、状態を次の再帰に引き摺らないものは、単純再帰でも、ループとして扱われる
(だからこそ、末尾再帰は、次の再帰に状態を引き摺らないのでループになる)
結局、アセンブラに実現できることは、関数型言語でも、命令型言語でも、最終的な最適化の形は同じになるだろうけど、それは時間が解決する話

関数型言語の最終的な最適化の形は
ideone.com/SaMJe と ideone.com/kzkty が同じ速度になる事

これは、参照透明性が確保されて無いと、最適化できない事の一つ
(まだ実現されてないけし、逆に言えば、参照透明性が確保された関数に限れば、命令型言語でも理論的には最適化可能なはず)


6 名前:デフォルトの名無しさん [2012/02/28(火) 23:24:52.82 ]
>>5 最後の行について
Fortran95には、純粋関数/手続きというのがあって、これは副作用を持たない
ということなのたが、ベクトル演算ができるようになる。
が、write文が使えなくなるとか、グローバル変数が使えないとかいろいろ
制約があって非常に使いにくい。

7 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 00:07:48.89 ]
●過去スレ
関数型言語は何故普及しないのかを考える
hibari.2ch.net/test/read.cgi/tech/1277215506/
関数型言語は何故普及しないのかを考える
hibari.2ch.net/test/read.cgi/tech/1286791669/
【アンチ】関数型言語は使えない【玩具】
toro.2ch.net/test/read.cgi/tech/1320743217/

●関連スレ
関数型言語Part5
toro.2ch.net/test/read.cgi/tech/1252470706/

8 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 00:20:49.11 ]
速度比較は、よくネタになるけど、最も抽象度の低い言語でも出来る例での比較→言語自体の優劣の流れは無意味だろ。
VBとアセンブラを比べるようなもんだけど、単純作業での比較にこだわる人が多いのはなんでだろう?


9 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 00:25:12.28 ]
なぜ関数型言語は普及しないか - プログラミング日記
d.hatena.ne.jp/morchin/20110614/p1
「なぜ関数型言語は普及しないか」に対する言及
togetter.com/li/149656
関数型言語が普及しない理由 - mizon dev
d.hatena.ne.jp/mizon9/20111112/1321046483
関数型言語が普及しない理由その2 - mizon dev
d.hatena.ne.jp/mizon9/20111112/1321128525
関数型言語が普及しない理由 - 偏見プログラマの語り!
d.hatena.ne.jp/kura-replace/20111114/1321236695
関数型言語が普及しない理由 - より良い環境を求めて
d.hatena.ne.jp/n314/20111114/1321290502

10 名前:デフォルトの名無しさん [2012/02/29(水) 01:47:42.56 ]
>>8 パッと見て、いろいろ言えるからではないだろうか。
そこそこ重たい数値計算をやりだすと、関数型言語が謳う理想通りにいかない
場面はいろいろあるのだが、2chのように限られた字数でしかも関係者外にも
わかるように問題点を説明するのはなかなかうまくいかない。



11 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 02:30:51.04 ]
個人的にはHaskell、lispはアプリ言語が欲しい時によく使うし、C、Javaはインフラで使ってる。
各言語には目的によって向き不向きがあるから、用途を論じるとか、用途拡大方法を考えるならまだ判る。
同じような単純作業の比較で何を得たいのか判らないんだよね。

12 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 06:20:45.06 ]
>>8
抽象度が低くてもチューリング完全なら最終的にできることは一緒
どれだけ簡潔に書けるかという意味でいうなら、reverseという簡単な例ですら
CとHaskellには大きな差がちゃんと在った

つーか前スレの配列版HaskellはCの次に速かったぞ
コード量もC並みだが

13 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 08:54:55.81 ]
>>12
>reverseという簡単な例ですら

そういう単純な例で実行時間が違うのはわかるけどさ、それを言語全体の優劣判定に短絡するのが無意味だと思うんだが。

コンピュータの利用範囲が広がるに連れて、アセンブラだけでは実現に手間がかかるから色んな言語が開発された訳だから。
例えば金融商品企画のようなアプリを、リソースを大量に使えばCでも開発は理屈上は可能だが、
それはもはやHaskellのインタープリターをCで再発明するくらいの問題になる。
だから疑問は、リソースには色々あるのに、なぜ単純な例で時間だけに拘るのか?という事。

単純例しか経験がなくて、時間以外のリソースは微々たるものだと考えてる者なら必然だけどね。

14 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 11:44:51.88 ]
誰かHaskellが遅いから言語として劣ってるって書いてたっけ?

事実としては「Haskellは遅い」それだけ
言語の優劣は各自で判断すべき

15 名前:デフォルトの名無しさん [2012/02/29(水) 11:56:48.77 ]
はっきり数字出ましたし。

16 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 12:14:19.99 ]
関数型のリファレンス言語と見られる言語が遅かったら
そりゃ価値を見出せないよ


17 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 13:22:34.34 ]
速さならOCamlがC並ってのは良く聞く
自分はdefとかrecとか関数定義にプログラミング言語特有のキーワード使う機会が少ないのが気に入ってhaskell使ってるけど


18 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 14:33:26.94 ]
>>13
>単純例しか経験がなくて、時間以外のリソースは微々たるものだと考えてる者なら必然だけどね。

このスレは、既存のHaskellコンパイラより早いHaskellインタープリターを自作出来る猛者が集う場所ですよ?

19 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 14:33:56.41 ]
遅い遅いって一生言ってろ、でいいんじゃね?

シートベルトって窮屈じゃん、って言ってるバカと同じなんだから。

20 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 14:40:32.02 ]
>>14
>事実としては「Haskellは遅い」それだけ

そのとおり。
Haskellでできる事は全部、C、Pythonならもっと早く出来る。
時間は重要なリソースだという事は学生にはわからんだろうな。



21 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 15:16:18.78 ]
>>20
えっ。Haskellの遅延評価のようなことがC、Pythonなら
もっと速くできるなんていっていいのですか。
少なくとも「早く」はできませんよね。

22 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 15:29:25.53 ]
>>21
そういうときは、コードを書いて「これを書いてみろ」って言うくらいじゃないとね

ていうか、遅延評価は手段のひとつであって、それ自体が目的であることは滅多に無い

23 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 16:21:54.03 ]
時間という点では開発時間も重要だね

でも長いコードと、それと同性能で短いコードで
前者の方が早く作れたりするのは良くあることだから
コード量と開発時間の相関も割りと微妙なんだよね

学習コストだとか、命令型と関数型の両方を扱える人のうち
関数型の方が早く開発出来る人の割合とかも気になるところ

24 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 17:05:05.52 ]
haskellが遅いってのは、
c/c++より遅い、あるいは静的言語の中では平均的に遅い、という意味なんだが、
時々文脈を(意図的に?)混同して、スクリプト言語よりも遅いとか言い出す輩が後を絶たない。
前スレで可変長配列と片方向連結リストを混同して勝利宣言してる馬鹿を見た時はまたかと思ったよ。

25 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 17:06:08.59 ]
>>17
夢を壊して申し訳ないが...

OCaml

ideone.com/MqIzH  (リスト)
ideone.com/LH93F  (配列)

26 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 17:06:10.29 ]
藁人形製作乙です。。。

27 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 17:34:45.71 ]
>>24
Haskellは可変長配列に代表されるような速いデータ構造を
扱おうと思ったら途端に面倒になるのが問題なんだろ

悔しかったらPythonより速いコードをPython並みに簡潔に書いてみろ

28 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 17:37:02.40 ]
Haskell並みに安全で機械語にコンパイルされたコードをPythonから生成してから言え

29 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 17:44:34.78 ]
>>28
Haskellが安全?www

xs = head []

30 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 17:46:18.05 ]
実行速度の比較をしているときに安全とか抽象力とかいうから
虫ケラ、じゃなかった、ハスケラはコミュ障だっていわれんの!



31 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 17:47:33.28 ]
>>28
Pythonより速いコードをPython並みに簡潔に書けないという
ギブアップ宣言か

もう「Haskell = 遅い」が定着しそうな勢いだな

32 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 17:54:26.32 ]
pythonは永続データと破壊操作を巧みに両立させて速度稼いでいるからな。
どっかでhaskellの人が永続=透明性と書かない人は理解してない人と断定してたけど、
どうしてhaskellの有名人はみんなアレなんだ?

33 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 18:20:19.50 ]
おまえの脳内の勢いがすごい勢いで加速中ということはよくわかった

34 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 18:58:08.72 ]
vectorパッケージが見つからない、と思ったらGHC6.8とはね・・・
古すぎるだろ・・・・
ふふふ残念ながらMPが足りないようだ・・・


・・・とするのは悔しいので前スレのSTUArray版(お借りします)とVector版を手持ちの環境で走らせて計測してみましたよ
STUArray版(コードは省略)
結果(+RTS -sオプションから抜粋)

9 MB total memory in use (0 MB lost due to fragmentation)

Total time 0.12s ( 0.10s elapsed)

次はVector版
コード
module Main where
import qualified Data.Vector.Unboxed as V

main :: IO ()
main = print $ V.head $ V.reverse $ V.iterateN 1000000 (+1) (1 :: Int)

結果

5 MB total memory in use (0 MB lost due to fragmentation)

Total time 0.05s ( 0.04s elapsed)

まあこんなところですね

35 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 19:34:46.13 ]
隔離スレとして、ちゃんと機能してるようで何より。

36 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 19:37:34.53 ]
「なんで時間だけに拘るの?」
「遅いのは事実だ!!」
凄いコミュ力だなw

37 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 19:46:13.50 ]
>>23
>コード量と開発時間の相関も割りと微妙なんだよね

その言語に慣れている者が書くという前提で、一日に書けるコード量は言語による大差は無いというのをどっかで見た。


38 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 19:55:58.80 ]
コード書いてる時間より
ビルド, 実行, ソースとにらめっこ, ウロウロしながら思考
してる時間の方が長い希ガス

39 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 19:57:15.64 ]
コード量が同じなら抽象度の高い言語の方が多くの事が出来るだろうな。

40 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 20:13:38.52 ]
>>39
一般に低水準の言語の方がワード単位の入力時間が短くなる。
極端な場合、倍位にはなる。だから、よほど難しい問題でないかぎり、
>>37がいうように一日に書けるコード量は同じに、近い。
しかし、それだけ体力もいるから、プログラマの定年が若くなる。
高水準な言語だと60歳でも十分。この差は大きい。



41 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 20:28:55.82 ]
高水準な言語とはもしかしてCOBOLのことを言っているのだろうか。

42 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 21:33:07.14 ]
リスト操作の速度を比較しようって決まって、
ベンチマークも決まって実装計測して結果が揃ったところで
どうして時間だけとか言い出すのは完全にコミュ障だろw

43 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 21:38:19.97 ]
数行の「リスト操作」って、何を比較したことにもならんぞw

44 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 22:18:59.01 ]
>>43 くやしいのうw

45 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 22:59:57.73 ]
gccがhaskellになったら考える
なったらなったでメンテする人がいなくなりそうだけど

46 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 23:38:01.82 ]
>>43
まあ元々、アッカーマンとか無視してる時点で、無意味だから。

47 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 00:21:41.07 ]
haskellが一行で配列を高速にreverseしたのがそんなに悔しいんですか?


48 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 06:12:44.47 ]
reverse関数「を」どれくらい簡潔に実装できるかって話してたのに
(しかも言い出したのはHaskeller)
ライブラリのreverse関数呼び出してドヤ顔して馬鹿じゃないの?

49 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 06:19:26.14 ]
>>31を「1行」とかいう人は
目か頭のいずれかもしくは両方とも悪い。

50 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 06:23:35.74 ]
>>49
???

ああ、自分の頭が悪いって告白ですか
そういうのはパパやママに言ってください
我々の所為じゃないので



51 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 06:48:15.28 ]
>>46
アッカーマンを無視するってどういうこと?

52 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 08:08:18.25 ]
>>48
ん、ああそういう流れだっけ?
じゃこれで
module Main where
import Prelude hiding (length, head)
import Data.Vector.Unboxed

rev :: Vector Int -> Vector Int
rev v = generate (length v) $ \ i -> v ! (length v - 1 - i)

main :: IO ()
main = print $ head $ rev $ iterateN 1000000 (+1) (1 :: Int)

9 MB total memory in use (0 MB lost due to fragmentation)
Total time 0.06s ( 0.05s elapsed)

今度はgenerate自作しろって言い出すんでしょうかね(笑)

53 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 08:26:52.95 ]
っていうか『プリミティブなアルゴリズムが簡潔に書ける!』とか言って
車輪の再発明繰り返して喜んでるだけのhaskellerに問題があるよねえ
(どういう意味にせよ)少しは実用的な話をしようぜ?

54 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 09:13:52.23 ]
>>50
ああ、43のtypoだと解らない程度の頭なんだね。
カワイソス

55 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 09:17:06.03 ]
>>52
おそ!

56 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 10:16:55.81 ]
2chで”流れ”を感じ始めたら、少なくとも二重の意味でヤバイな。

57 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 11:00:27.41 ]
>>51
関数型が得意なベンチマークでなきゃヤダヤダ


ってこと。

58 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 12:27:42.50 ]
Rは関数型に入りますか?

59 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 12:38:56.07 ]
C言語プリプロセッサは関数型に入りますか?

60 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 16:28:17.22 ]
バナナの皮は関数型言語に入りますか?
λ
形が似てるんですが



61 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 16:39:32.31 ]
お前、先生が許可したら人も殺すのか
関数型言語を殺すつもりか!

62 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 19:44:58.10 ]
haskellの遅延評価は、元々先行評価よりも遅い傾向にあるんだけどな・・・
(一部のみ、先行評価より速い)

そもそも、reverseが単方向リストに不利なわけだが・・・
とりあえず、main/print(IOモナド使った関数)以外の関数を自作してみた

ideone.com/15yhM

自分がHaskellに惚れたのは、IO関連以外は言葉遊びみたいな感じで自作出来るのが楽しいから
(rangeはもうちょっと作りこめたかも・・・)
速さよりも、その構造を調べるのが楽しい

data Natural = Zero | Succ (Natural) deraiving (Eq,Ord,Show,Read)

自然数の定義と、リストの定義が似ているのが分かる。
自然数は、その長さそのものが数字としての意味を持ち、リストは長さにも長さと言う意味はあるが、自然数との決定的な違いは、要素自体も値を持っているか?だけだと言うのが分かる


遅延評価生かしたプログラムなら、ファイル処理とかだろうけど、ideoneでファイルの読み込ませ方知らん(と言うか、在るのか?)
ので、一応、こんなのも作ってみた(1から1000000までの足し算の合計のリストを作って、先頭の10要素を表示)

ideone.com/insk7

簡約の様子を見てみると関数同士が絡み合って、一番外側の関数の終了条件のみで、他の関数の終了条件を満たして無くても、関数が終わるのが自然と理解できる

もちろん、最初から無駄の無い処理を書かれると負ける。foldllやmapみたいな、状態を次の再帰に引き摺らない様に書けば、スタック消費が抑えられるって言うだけで、Haskell自体の最適化は弱い



63 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 22:13:10.07 ]
不覚にも>>60-61の流れに

64 名前:デフォルトの名無しさん [2012/03/01(木) 22:56:48.12 ]
なんで、list reverseだけでここまで引っ張ってるんだ!?
>>11を受けて関数型言語/命令型言語の適材適所の話題になると期待したのだが。

65 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 23:19:04.92 ]
>>64
まあここは隔離スレだし、目的が互いに異なる言語同士を単純作業で比較したがる人が集まる場所でもある。
鳥と魚を比較するのに、共通項目だからといって体重や肺活量で比較するようなもんで、最重要と言えるほどの意味は無いと思うが。

比較するなら、計算モデルからのアプローチ(CTMCPなど)も有るので、該当スレが宜しいかと。

66 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 10:52:02.59 ]
本スレで煽り質問しかできないバカは回線切って吊れ

67 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 11:57:42.38 ]
>>62
>haskellの遅延評価は、元々先行評価よりも遅い傾向にあるんだけどな・・・
>(一部のみ、先行評価より速い)

評価する際の処理時間が先行評価より速い遅延評価って尊えば何だっけ?
遅延評価を使ったプログラムの総時間と混同してないか?

68 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 11:58:15.19 ]
>>67
X 尊えば
O 例えば

69 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 13:03:35.88 ]
>>67
>評価する際の処理時間が先行評価より速い遅延評価って尊えば何だっけ?

遅延評価とか先行評価とかいうのは評価『戦略』であって、『評価するかどうか』を決めるだけだ。
実際に『評価する際』には評価戦略の段階は通り過ぎてるからその問は無意味だろう。

そして遅延評価は評価するまでに猶予を置く意味合いしか無いから、
無駄な計算をしないという仮定のもとでは、遅延評価戦略が先行評価戦略よりも速くなることは有り得ない。
>>62のいう『一部』というのはたらい回し関数みたいなもののことを言ってるんだろうが、
あれはグラフ簡約がたまたまメモ化の役割を果たし無駄が省けているためであって遅延評価だからではない。

そもそも速度で評価戦略を語ることがナンセンスだよ。
あれは(たらい回しみたいな)一部の計算を無駄なく書くのを簡単にするためのものだ。
無駄なく書くのが難しくなってる計算の方が多くね、ってのが遅延評価に対して意味のある批判だろうよ。

70 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 13:11:35.99 ]
>>69
>そもそも速度で評価戦略を語ることがナンセンスだよ。

別にそんな話はしてなくて、「先行評価より早いものがある」について具体例が知りたいだけ。
だから、総時間と混同してないか?って書いたんだがなあ。
どっかでの、Haskell=遅いって話のことなら俺は無関係。



71 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 13:15:22.81 ]
だからさ、評価戦略によって『評価するかどうか』が決まってからは遅延評価も先行評価も同じ道を辿るんだから、
評価戦略に対して「aはbより早い」とかいうのは論理的に間違ってるってこと。

72 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 13:20:50.03 ]
>そもそも速度で評価戦略を語ることがナンセンスだよ。
これはhaskellerの負け惜しみとかそう言うんじゃなくてさ、
速度と評価戦略が別次元の問題だってことを言いたいだけ。
haskellのたらい回しとcのたらい回しは記述が似てても、
『そもそもやってることが違う』んだから。

73 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 13:37:52.45 ]
遅延評価は計算量を減らす目的もあるけどそれが全てじゃないよね
それに同じ計算量、無駄を省いたCの処理とかに敵うわけないし

割と手軽に計算量を減らせる(処理系にお任せ出来る)ってくらいだろう

無限リストとかを評価しちゃうと氏ぬのは言語に関係無いから
その辺はCでも配列でなく関数とかで仮想化するし

74 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 13:45:42.93 ]
>それに同じ計算量、無駄を省いたCの処理とかに敵うわけないし
いや、まったく同じ計算をするなら同じ処理時間になるよ。
ならないとしてもそれは遅延評価のせいではない。

75 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 13:47:20.92 ]
>遅延評価戦略が先行評価戦略よりも速くなることは有り得ない。
よくみると俺もこんな発言をしていた。
俺も論理的に間違っているということだな(キリッ

76 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 13:51:12.30 ]
>>64
ネタの投下も無しに贅沢な
それに、>>62はプリミティブな関数が自作出来るのが楽しいって言ってるだろ
python版出すなり、新しいネタ出すなりすれば良い


77 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 13:54:12.03 ]
>それに同じ計算量、無駄を省いたCの処理とかに敵うわけないし
というか『適うわけない』と思った根拠はなんなのだ?
論理的に同じ計算をするならあとはなんというか、言語の基礎体力だけの問題になるはずだが。
あれか、haskellではIntがボックス化されているからとかなんかそういうのか。

78 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 13:56:34.33 ]
>>74
>まったく同じ計算をするなら同じ処理時間になる
同じロジック書いても
遅延評価を実装するために発生するオーバーヘッドとかの影響で
まったく同じ計算(機械語レベルで)にはならないんじゃないの?

79 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 14:03:36.00 ]
>>77
>言語の基礎体力だけの問題
そうだよ、そういう話
例え同じロジックでもインタプリタ方式の方が遅いとかそういうの

Cは安全性を犠牲にしてでも速度優先するってコンセプトがあるわけだし

80 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 14:11:15.32 ]
>>-79までの中に、62が居るとのお告げがあった。



81 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 14:18:12.44 ]
>>78
遅延させることに意味がある場合、それはオーバーヘッドとは言わないんでは?
計算結果を明示的にキャッシュするのだってもちろんスペース喰うわけで。
そういうことじゃなくてGHCの実装の深いところに基づくオーバーヘッドだというなら、
俺にもよく分からないが、お前にはそれが有意な差であると合理的に説明できるのか?

82 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 14:20:45.94 ]
>>80
そのレスバグだろ
開始インデックスの指定漏れてんぞ

83 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 14:35:31.40 ]
>>81
意味有る無しに関わらずオーバーヘッドと言うよ
機械語レベルでの違いによるものなら大小に関わらず有意だよ

84 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 14:38:40.45 ]
>>83
呼ぶのか。なるほど。
それは明示的に計算結果をキャッシュするコストと比べてどうなの?


85 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 14:39:21.82 ]
このコストっては手間的な意味じゃなくてね

86 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 14:41:06.81 ]
あと機械語レベルで差が出るというソースは?
簡易なものなら是非見てみたい。

87 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 14:44:46.65 ]
無いと思うならそれでいいよ
haskellはcと同じ速度ってことでさ

88 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 14:45:35.68 ]
まあ説明できないことは最初から分かってたさ

89 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 14:49:53.34 ]
オーバーヘッドがあったとしても遅延評価には利点があるという話だったんだけど
ここまで速度に拘るとは思わなかったからね

90 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 14:53:17.52 ]
あるかどうかもよく分からないオーバーヘッドの話を持ち出したのはそちらではなくって?
まあね。実際俺もあるとおもうよ。オーバーヘッド。
話として持ち出すからには根拠を持っていてほしいなと思っただけさ。



91 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 14:56:03.90 ]
ちなみに俺がオーバーヘッドがあると思ったのは
単にゼロオーバーヘッドでの実装は無理だろうと思ったのと
「c言語 haskell 速度比較」とかでググッた結果を見たというだけ
流石に個々の速度比較の詳細までは知らない

逆にオーバーヘッドが無いってのを示してくれたらもちろん前言撤回するよ

92 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 14:59:04.52 ]
こんなスレにいる駄民がそんなことを示せるわけ無いじゃないか!俺のことだよ!

ていうかよくよく読み返すと>>78は疑問文だねえ。
俺が謝ったほうがいいのかも知れない。
だがわたしは(ry

93 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 16:34:36.45 ]
遅延評価って、一見全部読み込んでから一部だけ出力するって処理で、必要な分しか読み込まないってので、>>62の上のmyreverseはリストを反転する必要があるから、全部読み込んでるけど、下のaddlistをmytake 10 してる方は、最初の10要素分しか読み込まない
先行評価だと、全部読み込んでから始まるか、最初の10要素だけ読み込む様に書き分ける

ファイル処理とかで、書き分ける必要が無い事になる

とは言え、最近の言語なら、オブジェクトにその辺の処理を押し込んでそうだが


94 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 16:37:16.86 ]
オーバーヘッドつーか、評価機構の構造自体が違うのに、
全体の処理時間が同じなわけがないだろjk

95 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 17:43:05.82 ]
正格評価でもありとあらゆるところにdelayとforceを忍ばせれば
遅延評価になると思うんだけど
計算量が減るところだけ遅延評価にした方がやっぱりいいと思うんだよね

96 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 20:31:03.15 ]
>>93
そのかわり、ファイル読み込んで同じファイルに書き出すときとか
「あー、この辺で正格評価するべ」的なこと考えんといかんけどな

97 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 23:50:52.90 ]
配列のreverseくらいならC++でも一行だな
std::copy(in.rbegin(), in.rend(), std::back_inserter(out));


98 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 00:36:28.38 ]
最近の関数型って実装まで気にするような段階なんだな
はてなあたりの選民気取りが「haskellはCより速い(キリッ」とか言い始めたら俺もそろそろ関数型始めようかな

99 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 05:11:01.91 ]
速度稼ぐ必要があるコードだと結局はモナド頼りなんだろ?

関数型言語って名前捨てて”モナド型言語”とでも呼べばいいんじゃね?

100 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 06:46:14.07 ]
おめえらhaskell以外の話もしろよ



101 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 06:54:33.70 ]
遅延評価のコストについては、コンパイラの本とかに載ってることあるよ

102 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 07:59:28.26 ]
>>98 大学の研究のレベルから、一般はてな民が話題にするまで10年ぐらいだから、
おまえは常に10年遅れだけど、好きにすればいいと思うよwwww

103 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 08:12:49.54 ]
xmonadの影響で今になってX11プログラミングを始めた漏れが
8時(10分以上遅れ)をお知らせしますね

104 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 09:12:49.53 ]
10年遅れどころかMLなら40年遅れHaskell直系のMirandaからでも30年遅れだろ


105 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 10:58:06.61 ]
作ればあるもん

106 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 13:05:49.24 ]
>>104
登場時期が基準とかおもちゃじゃあるまいし

107 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 13:19:05.21 ]
ギークやらアルファブロガーやら呼ばれる人が話題する時点ではまだ玩具

それを使用する企業やそれなりの規模のオープンソースプロジェクトが
出始めるくらいから実用品だな

108 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 14:01:18.50 ]
Javaと心中するのは自由ですから、他人を巻き込もうと必死にならないでねw

109 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 14:10:19.50 ]
定番の必死認定

110 名前:デフォルトの名無しさん [2012/03/03(土) 14:43:35.56 ]
このスレでの関数型言語って純粋関数型言語(Haskell,Mirandaとか)だけ?
非純粋関数型言語(Lisp,R,OCamlとか)も含むの?

Haskellはよく知らないけどCommon Lispは実用かなって思って



111 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 15:00:07.62 ]
アンチの脳内の都合で、その場により変わりますw

112 名前:デフォルトの名無しさん [2012/03/03(土) 15:05:20.65 ]
>>111
あなたの認識ではどっちですか?

113 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 15:07:01.59 ]
関数型言語に定義なんてないし的当だよ

一般的な定義は

・関数を実行時に生成できる
・関数を引数として渡せる
・関数を関数の戻り値として返せる

だと思うけど、最近は勝手に

・変数に一度しか代入できない

とかルールを付け加えたり好きかっていう人が増えたから

114 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 15:14:52.67 ]
昔は、関数型言語と比べて手続き型言語は原始的で貧弱に思えたけど、
最近は手続き型言語もクロージャを取り込んで関数的にも書けるから、
そうなると実用上は手続き型言語で十分だと感じるけどな。

基本は手続き的に処理を書きつつ、コレクションの操作だけ map や filter,
reduce を使って関数的に書く。他人にも読みやすいコードを書こうとすれば
最終的にはそのくらいのところに落ち着くと思うけど。

>>108 みたいな「仮想ドカタ」を煽るのは現実が見えていないと思うなあ。
今時、職業プログラマだって C, Java だけじゃなくて JavaScript も Ruby も使うよ。
JavaScript で言えば、JQuery なんて発想がかなり関数的だと思うけど。
XML を対象に XPath でパターンマッチかけて filter やら map やら。
ほとんどそういう処理。

115 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 15:19:10.49 ]
>>113
上の3つだとJavaScriptやC++(functor)、C#(delegate)あたりも含まれるな
初代スレの1はむしろ参照透過性、変数に一度しか代入できないことの方を嫌ってるように見える

116 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 15:19:35.75 ]
>>113
そうなんだよね。僕もそのくらいが「関数型言語」だと思うんだけど、
逆に、そのくらいはもう、手続き型言語にも取り込まれてるんだよね。

だから、そんなのはもう関数型言語「ならでは」の長所になってない。
逆に、末尾再帰除去とかカリー化とかになってくると、まだ差がある。

とはいえ >>114 くらいのスタイルだと、
別に末尾再帰除去やカリー化がなくても、そこまで困らないけどね。

117 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 15:27:07.99 ]
javascriptはschemeをC言語っぽい文法に直したものだろ
昔から関数型言語と言われているよ

118 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 15:27:17.91 ]
Haskellなどで言う「関数」は、集合・写像ベースの概念だから、変数の書き換えに依存しないやり方のほうが関数を率直に表現出来るってだけの話だ。
Cにも同じ字面の「関数」があるが、関数型言語の関数と区別したい時は、サブルーチンと呼んだ方が実態に近い。

119 名前:デフォルトの名無しさん [2012/03/03(土) 15:33:16.95 ]
良い所とか取り込んで明確な境界が無くなくなってる面があるんですね

研究目的の言語の成果が実用目的の言語に適用されたと考えたら
必ずしも実用である必要は無いのかもしれませんね

120 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 15:33:41.38 ]
>>117
それは違うかな。
「言われている」ではなく、
関数型言語を知っている人たちが JavaScript は関数型言語っぽいと
「言っている」が正しい表現じゃないかな。

少なくとも、
Ecma-262 の 4 Overview には
www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf

ECMAScript is an object-oriented programming language for performing computations and manipulating computational objects within a host environment.

と書いてあるんだから、何言語かと一つに決めるなら、
明らかにオブジェクト指向言語でしょ。



121 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 15:40:05.10 ]
>>119
「何ができるか」って意味なら差はどんどん無くなってる
だが、他人のコードを読むときには「何ができないか」ってのも重要で、
そこが手続き型言語と関数型言語では違う

わざわざコードを読んで副作用が無いか目でチェックしなくても
言語仕様で保証されてるなら読むのが楽になる
OOPのアクセス修飾子なんかと同じだな

122 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 15:42:52.61 ]
>>120
www.ecmascript.org/es4/spec/overview.pdf
ここの4ページにはこうある

ECMAScript 4th Edition (ES4) is a multi-paradigm programming language that is evolved from the
3rd Edition2 (ES3), which in turn is based on JavaScript3, a programming language for the web developed at
Netscape Communications Corporation starting in 1995.

ES3 is a simple, highly dynamic, object-based language that takes its major ideas from the languages Self
and Scheme.

123 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 15:49:23.32 ]
ja.wikipedia.org/wiki/ECMAScript

ECMAScript 4 は過去2回仕様作成が挑戦されたが、仕様がまとまらず、失敗に終わっている。

124 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 17:26:19.51 ]
何でも関数型言語にしたがる香具師がいるな…

125 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 20:52:56.07 ]
関数型言語の判断基準について、整理してみた。大きく3つのグループに分類できる。
・関数型言語(誰も文句無し)
・関数型プログラミングが可能な言語
・それ以外の手続き型言語

 FP
  ---- 壁0. 変数の壁 ----
 Haskell
  ---- 壁1. 純粋性(副作用)の壁 ----
 SML/OCaml
  ---- 壁2. 型推論の壁 ----
 Scheme
  ---- 壁3. 末尾再帰最適化の壁 ----
 ========<< 越えられない壁 >>========
 Smalltalk/Ruby
  ---- 壁4. 条件判定式/局所宣言式の壁 ----
 Perl/Python/JavaScript
  ---- 壁5. クロージャ/ラムダ式の壁 ----
 ========<< 越えられない壁 >>========
 C/C++/Java...etc

なお、このカキコは「関数型言語Part5」スレの過去カキコ(283-335)を編集したもの
議論の参考になればと思う

126 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 21:14:44.32 ]
末尾再帰最適化とか、マジ関係無いだろ
実装上の話だろ

127 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 21:47:46.75 ]
GCC(C/C++) → 末尾再帰最適化あり

あとC++のboost::lambda(ラムダ式)とはどうなんだろうか
言語自体に直接ラムダ式があるわけじゃないけど

boost::lambdaとスマートポインタでクロージャも作れるらしい

壁4はよく分からない

128 名前:125 mailto:sage [2012/03/03(土) 22:07:55.69 ]
>>126
関数型言語にとってリストが最も基本的な複合データ型であることは、
誰もが認めることだろう
でも末尾再帰最適化が実装されていない言語の多くでは、
可変長配列(RubyであればArrayクラス)でリストを代用している
もしも、これを真面目に「ドット対の連なり」としてリストを定義して
その操作を再帰関数で定義した場合、ちょっとしたデータ量であっても
簡単にスタックオーバーフローが発生してしまう

だから、関数型言語で書かれたコードを末尾再帰最適化が実装されていない言語へ
移植しようとした場合、再帰ではなくfor/while文のような手続き型構文を使わざるをえない
これは(末尾再帰最適化という)実装がプログラミングスタイルに大きな影響を与えるという
典型的な一例であると思う

129 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 22:11:49.10 ]
>>128
>関数型言語にとってリストが最も基本的な複合データ型であることは、
>誰もが認めることだろう

認めねーよ。
それも実装上の話だろ。


130 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 22:12:39.97 ]
>>128
でも、機械を上手く動かすためのコンパイラの技術だろ
関数型言語の定義に含めることには違和感がある



131 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 22:41:56.15 ]
リストは副作用を嫌う関数的プログラミングがLISPから借りてきた実装上の「逃げ」。
末尾再帰最適化でループの代用にしたのと根っこは同じ。

132 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 22:56:45.86 ]
ま、実用を目指したコンピュータ言語なんてものは
全てが実装上の話になってしまうんだけどな。


133 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 01:14:03.00 ]
末尾再帰なんてC言語の教科書で知ったから
関数型言語と結びつけるイメージが全く沸かない

134 名前:デフォルトの名無しさん [2012/03/04(日) 03:15:06.28 ]
128は本質をついている。
リストは再帰的データ構造を持つので、
再帰を反復の記述にとる関数型とは相性がいい。


135 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 03:45:32.27 ]
関数型言語にとって副作用が無いことは
本質的なことなの?
そうだと言える根拠とかあるの?

MLやHaskellが設計された頃の流行りだった
だけじゃないの?
”副作用は悪”っていう思想は、古いアルゴリズムの
教科書にはよく載ってる

136 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 05:47:41.38 ]
>>134
反復もリストも、圏論の抽象力の前では、単なる実装上の都合だよ


137 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 05:50:20.88 ]
>>125
壁3は本質的じゃないね。それよりも

--- 壁3'. 宣言性(記述順序に左右されない)の壁

を入れたほうが関数プログラミングの本質に近づくと思うのだが。

138 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 09:08:06.01 ]
>>137
宣言という言葉をあまり狭義に使うのはどうかな。
IBMの簡易言語RPG(現在バージョンはIVかな)は
Decision Tableを使って制御を行っているので、
昔は宣言型言語に分類されていた。同じ宣言でも
こうまで異なると問題だ。

139 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 09:23:41.58 ]
定義のことを宣言って言ってるだけじゃね?

英語でどうなんだか知らんけど。

140 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 10:33:53.88 ]
CTMCPすら知らずに妄想する隔離スレか。



141 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 10:43:48.80 ]
抽象度が高いことを示すコードが出てないんだが
pythonに作れなくて、Haskellに作れるものって何がある?
とりあえずHaskellでif関数自作できるとかはよく見かけるが


142 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 11:05:05.88 ]
if関数ったって組み込みの(型クラスを含む)条件分岐機構を使わずには書けんだろ。

143 名前:デフォルトの名無しさん [2012/03/04(日) 11:39:11.04 ]
>>140知らなかったので、検索して目次を眺めてみたが、スレタイのような議論をするなら読むべきかと思った。

144 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 11:44:07.10 ]
>>142 ARMなら条件分岐なしのコードにコンパイルできるんでね?

145 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 11:48:48.15 ]
>>142
へ?
パターンマッチとガードでごく普通の関数として書けるけど
型クラスなんて大仰なもん使わんよ
と言うか、ifが普通に書けるのが遅延評価と関数もファーストクラスの値っていう特徴の賜物じゃないか

if flg t f | flg == True = t
      | flg == False = f

関数型言語は必ず値を返すって性質上、if elseしか許されないが

先行評価のだと、両方とも関数を受け取った時点で評価前に実行されちゃうから正しく動かない
(評価前に両方実行されて、評価後にどちらかが実行される)



146 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 12:02:53.04 ]
つーか、関数型言語の利点と言えば、バグが無いことを保障できるって事じゃね?
数学の証明で公式が永遠に正しいことを保障するのと同じで、関数にバグが無いこと保証できれば、その関数の使い方を間違わなければ、その関数が原因のバグは無いと保証できる



147 名前:デフォルトの名無しさん [2012/03/04(日) 12:08:56.91 ]
分岐を関数で表現するのは難しくない。
T(x,y)=x
F(x,y)=y
IF(c,x,y)=c(x,y)
最後のは糖衣構文で、cはTかFが入る。

問題はこれを先行評価すると、
xの評価、yの評価、どっちかの選択と
進行してしまい、無駄な評価またはやっては
ならない評価をしてしまうことになる。

遅延評価では必要になるまで引数は評価されず、
c(x,y)にはxかyの一方しか含まれないので、
上記の問題は起こらない。

148 名前:デフォルトの名無しさん [2012/03/04(日) 12:10:17.75 ]
すでにコメントされていたか。

149 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 13:14:45.06 ]
元ネタ書いたの誰か知らんが >>125 は酷すぎる。
上下に並べている壁が、それぞれ軸が違う。
壁2は型システムの問題だろ。
壁4も意味不明。
末尾再帰最適化の有無を越えられない壁とか書いてるのもアホ丸出し。
末尾再帰になるような処理は手続き型なら最初からループで書く方が自然。
だから要らないだけ。

150 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 13:24:51.24 ]
型推論とオブジェクトの相性の悪さが問題だな
誤解を恐れずざっくり切るなら、
オブジェクト指向が適している分野に関数型言語は不適。



151 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 14:09:20.29 ]
せんせー、OCamlさんが泣いてます

152 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 14:12:58.24 ]
>>145
パターンマッチがすでに条件分岐機構なんだが…
条件分岐機構使って条件分岐書き換えてドヤ顔されてもな。

153 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 15:30:46.23 ]
>>147
Smalltalkの宣伝乙w

154 名前:デフォルトの名無しさん [2012/03/04(日) 16:33:15.37 ]
一般論を書いたつもりだがどの部分がsmalltalk?


155 名前:デフォルトの名無しさん [2012/03/04(日) 16:34:41.05 ]
一般論を書いたつもりだがどの部分がsmalltalk?


156 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 17:05:02.03 ]
T(x,y)=xがTrueクラスの定義
F(x,y)=yがTrueクラスの定義
IF(c,x,y)=c(x,y)がメソッドの動的束縛に相当した実装になっている。

具体的には、if式はifTrue:ifFalse:というメソッドで実装されている。
これがTrueクラスでは、第1引数のクロージャを評価するよう定義されていて、
Falseクラスでは、第2引数のクロージャを評価するよう定義されている。

クライアントコードでは例えば
x = y ifTrue: [do something] ifFalse: [ do something else]
というメッセージ式を評価する時に、
x=yがtrueならTrueクラスのifTrue:ifFalse:が束縛されて
第1引数の[do something]が評価される。([ ]で囲まれたものはクロージャ)
x=yがfalseならFalseクラスのifTrue:ifFalse:が束縛されて
第2引数の[do something else]が評価される。


157 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 17:09:34.66 ]
>>154
Smalltalkで勉強したからそう言っただけだろ
プログラム言語が開発される以前に、ラムダ理論で
既に知られていたなんて知らなんだろ

158 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 17:15:42.28 ]
>>157
いや、知ってたよ。
つーか、俺自身がSmalltalkより先に型なしラムダ計算やってたし。

現代の実用言語では>>147の定義の実装がSmalltalkに色濃く残っている
というだけの話にそこまで突っかかるかね?
関数型の人(特にLISP系とHaskell系)ってそうやって上から目線で小馬鹿にするから
逆に相手から冷笑されるんだよ。

159 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 17:58:15.02 ]
悪いけどJava屋の俺からするとSmalltalkの人も同じだよ。
>上から目線で小馬鹿にする


160 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 18:26:49.16 ]
どっちも原理主義者で純血主義者ですもんね



161 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 18:31:16.56 ]
ハスケラやSmallTalkはわかるがLISPerは純血主義の対極だろw


162 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 18:32:18.55 ]
LispもHaskellも習得のコストさえ無視できれば
言語自体には使う価値があるけど
Smalltalkには何も無い

163 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 18:35:31.08 ]
よほどSmallTalkに叩かれた暗い過去があるんだねw
もしかしてIDEスレじゃね?ぷぷぷ あのスレのジャバ厨は悲惨だったww

164 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 18:38:27.75 ]
そんなにスモールトーク叩きたければ別スレ立てれば?

スレ違いウザw よほど悔しかったんだねww

165 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 18:52:32.40 ]
Smalltalkを頭ごなしに馬鹿にする奴でSmalltalkをまともに使ったことある奴を見たことがない。

166 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 18:52:47.01 ]
Pharoがゴミ過ぎて笑える
玩具で喜んでて滑稽

167 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 19:25:33.87 ]
負け犬>>166の遠吠え

168 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 19:31:38.94 ]
「俺は世間の奴らとは違う」という自尊心を満たすために
マイナーなものを選択するという変な層がいるから性質が悪い。

そういう人にとっては「世間はJava」でなければ困るわけだ。
「RubyでもJavaScriptでも普通に関数的にも書ける」と言われると

「中には手続き型言語で関数的に書いている人もいるだろうが、
それは(俺と同じ)一部の先進的な層で、世間一般はJavaだろ」

という主張をしてくる。自分が特殊でありさえすれば何でもいいというね。


169 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 19:32:43.55 ]
自己紹介乙としか言いようがないw

170 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 19:36:03.72 ]
関数型言語由来の機能で便利なところってのはクロージャとラムダ。
それはもう手続き型言語で普通に使える。

関数型言語の便利な機能は、
既にメインストリームである手続き型言語に取り込まれ、
今では世間一般のプログラマも当たり前に関数的な書き方をするようになっている。
めでたしめでたし。

現実的には、もうこれで終了してる話だろ。



171 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 19:40:26.99 ]
パターンマッチは便利なので手続き型言語にも取り込んでほしい

で、パターンマッチは再帰と相性良いので、
ついでに末尾再帰最適化も取り込んでほしい

汎用的な関数から具体的な関数を定義するのに
カリー化は便利なので是非とりこんで欲しい

172 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 19:44:07.49 ]
>>171
末尾再帰最適化はC/C++でやってるし
上でも出てるけど関数型とは無関係

173 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 19:45:55.21 ]
>汎用的な関数から具体的な関数を定義するのに
>カリー化は便利なので是非とりこんで欲しい

こういう奴にカリー化という包丁を渡すと
オレオレ高階関数ライブラリを作り始めて
メンテナンス不可能なコードを量産されるのがオチ。

174 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 19:46:26.79 ]
逆にダックタイピングは便利なので関数型言語にも取り込んでほしい


175 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 19:46:46.00 ]
あ、型推論できないから取り込めませんね。失礼

176 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 20:08:21.74 ]
>>175
構造的部分型で良ければOCamlで出来るけどな > ダックタイピング
もちろん型推論もできる

177 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 20:09:50.08 ]
>>174はダックタイピングの誤用だな

178 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 20:10:17.57 ]
>>172
パターンマッチ無いのに末尾再帰最適化だけ出来ても
正直そんなに嬉しくない

179 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 20:13:10.92 ]
パターンマッチと再帰は無関係だし
視野が狭すぎ

180 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 20:13:25.44 ]
代数的データ型使わないのにパターンマッチがあっても何も嬉しくない



181 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 20:34:02.85 ]
代数データ型と再帰構造は直交する概念だろw
どこまで視野が狭いんだかw

182 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 20:41:34.43 ]
>代数データ型と再帰構造は直交する概念だろw
>どこまで視野が狭いんだかw

何それ?
代数データ型を使って
再帰構造を表現することはできないって事?


183 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 20:52:20.17 ]
便利な機能が全部ある言語を選んだらHaskellになった

184 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 20:56:43.28 ]
いらない機能を全部つめこんだらSmalltalkになった

185 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 21:41:23.88 ]
>>181
パターンマッチと再帰は直交する
代数的データ構造と再帰は直交する
パターンマッチと代数的データ構造は直交しない


186 名前:デフォルトの名無しさん [2012/03/04(日) 21:48:35.10 ]
>>156
ありがとうございます。
Smalltalkって、C++やJavaの先祖くらいにしか思っていなかったけれども、
結構おもしろいですね。FPとOOPはレイヤーを積み重ねると互いに相手を
模倣できるという話を聞いたことがあるが、Smalltalkを学習すると
その意味がわかるのではないかという気がした。

187 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 21:58:32.05 ]
あちこちのスレを読んでいると、
Smalltalkの説明に対してだけ、丁寧な言葉でお礼が書き込まれることが多い。
この傾向が、とても面白いと思う。

188 名前:デフォルトの名無しさん [2012/03/04(日) 22:04:24.12 ]
> 関数型言語由来の機能で便利なところってのはクロージャとラムダ。
> それはもう手続き型言語で普通に使える。
体験するにはどういう言語がいい?知っている範囲では、
C++11: lambdaはあるが、スコープにかんするオプションがいっぱいあって
 頭痛がしてきた。
Fortran: Intel拡張に限り、内部手続きが渡せるのでクロージャが部分的に
 はあるといえる。うっかり使ってしまうとSparcマシンに移したときに
 がっくりくる。




189 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 22:25:37.67 ]
結局はどの言語を使うかではなく、関数型的な考え方書き方が出来るかどうか、が問題になってくんだろうかね?

190 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 22:39:54.94 ]
できなくても、ほとんど問題がないのが現実



191 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 00:18:07.30 ]
>>166
Smalltalkといっても、実験的要素の多いSqueakやPharoとかばかりじゃなく、
VisualWorksとかDolphinみたいに商用志向の比較的作り込んである処理系もあるよ。

192 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 01:21:20.77 ]
マルチスレッドでオブジェクト指向型言語の限界が見えてきたから、関数型言語が注目されだしたんじゃなかったっけ
まあ、遅延評価とマルチスレッドプログラミングは相性が悪いらしいので、最適化でマルチスレッドの時だけ正格評価にしようかという話はどっかで見た気がするが

それでも、純粋な関数に関しては


hoge リスト1 リスト2 = (force リスト1) `par`
               (force リスト2) `par`
以下は普通のhoge関数と同じ

force [] = ()
force (x:xs) = x `pseq` force xs

これでおk
※ghcバージョンによって、par/pseq関数を読み込むモジュールの場所がまちまち・・・

マルチスレッドの時だけ正格評価になるなら、force関数書かなくて良くなるだけで、たいした手間でもない
同期もデッドロックも気にしなくて良いのが楽
(スレッド数は実行ファイルにランタイムへの指示として指定する)



193 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 08:59:09.17 ]
>>192
実行ファイル単位でしかスレッド数を決められないのか
イマイチだな…

194 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 10:15:45.33 ]
一応増やせはするんだけど、
一度増やすと今度は減らせないんだよねえ・・・
そのうち改善はされるかもしれないのだけど

195 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 11:03:41.23 ]
一般に一旦プロセスに割り当てたリソースをひっぺがすのは難しい

196 名前:デフォルトの名無しさん [2012/03/06(火) 00:05:57.69 ]
並列計算でスレッド数をcpuのコア数以外にすることがあまりないので、
よくわからないのだが、OpenMPのようにいったんスレッドを畳んで、
スレッド数を指定して再度スレッドを起動するのは難しいのかな。

リストなので単純にはいかないとおもうが、
!$omp parallel map
ys = map f xs
!$omp end parallel map
とかできるようになると結構うれしい。

197 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 12:16:08.90 ]
ユーザスレッドを駆動するネイティブスレッド数の話だろ?
なら、動的な変更はそれほど必要ないんじゃ?

198 名前:デフォルトの名無しさん [2012/03/21(水) 18:05:47.79 ]
不毛だな

199 名前:デフォルトの名無しさん mailto:sage [2012/03/21(水) 18:25:40.67 ]
ふもっふ

200 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 18:21:07.48 ]
catコマンドって、意外と奥が深いんだな・・・
こんなの見つけたんだけど(haskell)、他の言語だとどう書くの?

A cat in Haskell
madscientist.jp/~ikegami/diary/20050728.html#p01

ちなみに、このページはここからリンクされてた
Haskell
pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=view;name=Haskell

cat(オプション付き)って所




201 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 22:41:57.77 ]
>>200
オプション無しの、単純に引数のファイルを繋いで出力するだけのものなら
AWK、Perl、Ruby辺りはアホみたいに短いな
(コマンド名含めて数バイト)
流石に複雑なオプション含むとそこまで差は出ないかも知れんが


202 名前:デフォルトの名無しさん mailto:sage [2012/03/23(金) 09:05:32.57 ]
>>200

正規表現を並べただけだけど、Perl だとこんなかんじ。
ideone.com/BCiGc

とりあえず -u と -v のメタ表示以外サポート(もとの Haskell でも
サポートしてなかったので)。



203 名前:デフォルトの名無しさん mailto:sage [2012/03/23(金) 12:57:34.26 ]
ちなみに Snow Leopard の cat には -A -E -T が存在しなかった。
Lion 以降?


204 名前:デフォルトの名無しさん mailto:sage [2012/03/23(金) 13:38:23.23 ]
>>201
オプション無しだとスクリプト言語よりは長いものの、静的型言語としては短いだろうな
と言うか、ここの一番上のruby版catは短すぎてなにやってるのか分からん
下2つのcatコードの方がコードの意図を読み易いな

www2.atwiki.jp/kmo2/m/pages/17.html


import System.Environment

main = getArgs >>= mapM readFile >>= putStrLn.unlines

奇しくも、do構文で見えにくい状態移管が見えやすい形になった



205 名前:デフォルトの名無しさん mailto:sage [2012/03/23(金) 14:00:00.76 ]
とりあえず >>200 のバグ。

1. -v と -t の結果が同じになる。本物の cat は -v では TAB を変更しない。
2. 入力が改行で終わっていないときに、勝手に改行を追加してしまう。
3. -e をつけたときに、入力が改行で終わっていなくても最後に $ をつける。


206 名前:デフォルトの名無しさん mailto:sage [2012/03/23(金) 14:18:13.40 ]
>>204
いや、静的だろうが何だろうが、この半分の長さで書けるでしょ。
もともとの >>200 が、シンプルに書く気がないみたいだし。


207 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 00:35:00.64 ]
>>204
> while gets do puts $_ end
これのことか?Perlじみた動きをするコードだね

getsは一行入力する
EOFならnil、入力があればそれを文字列型として
グローバル変数 $_ に突っ込むと共に、戻り値としても返す

Rubyの文字列型は必ず真であり、逆にnilは必ず偽なので
while gets は「EOFになるまで毎行を $_ として繰り返す」イディオムになる
あとはそれをputsで出力してるだけ

208 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 02:18:53.77 ]
>>207
それ自体は分かるよ
スクリプトだからなんだろうけど、標準入力とファイル読み込みの区別が無くて戸惑う
どこでファイル読んでるの?って


209 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 03:35:25.94 ]
昔はプログラム側でファイルを開いたりしないものだったので、
たんに伝統的なやり方とも言える。


210 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 13:41:01.22 ]
>>208
? 標準入力とファイル読み込みの区別はむしろしっかりされてるコードだと思うけど…
ファイルからの読み込みならいきなりgetsなんて書かないよ
その場合はファイルを開いて、それに対してメソッド呼ぶのが基本
標準入力から読むからこそいきなりgetsを書く
まあ確かにgetsの読み先をファイルに繋ぎかえることも出来るし
逆に標準入力をIOオブジェクトとしてメソッド呼ぶとかも出来るけど
このコードではそんなことしてないっしょ?



211 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 13:43:10.83 ]
ああ、ごめんそゆことか
標準入力じゃなくてARGFからの読み込みの話だったね

ええとgetsは既定ではARGFから読む
んで、その内容はファイルを渡していないなら標準入力、渡されればそのファイルを全て繋いだものになる

212 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 13:45:09.34 ]
多分Perlの<>辺りがARGFの由来だろうなあ

213 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 14:39:52.21 ]
>>211
HPに説明があったから良かったものの、所見であのコードだけ見てたら混乱してた
個人的には、>>204のページ探してるときに見つけた

uch-x40.seesaa.net/article/22908221.html
こっちのページのやり方の方が好きかな

このページのprintをputsにするだけで問題解決するんじゃないか?と思ったので、久しぶりにruby入れて試してみたら、
予想通り解決した

puts ARGF.read

これで、

>ruby cat.rb mycat.hs myecho.hs
import System.Environment
import System.IO

main = getArgs >>= mapM readFile >>= putStrLn.unlines
import System.Environment

main = getArgs >>= putStrLn.unwords

Haskell版と、ちょっと挙動が違うけど・・・
(Haskell版のputStrLnをputStrに変えれば同じになるけど、どっちが正しい挙動なんだろ)


214 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 14:55:21.83 ]
あー・・・ごめん
ruby版、問題解決してないや
EOFで改行されないから、
import System.Environment
import System.IO

main = getArgs >>= mapM readFile >>= putStrLn.unlines[EOF]<-ここにEOFがある

この条件だと下のような表示になる

import System.Environment
import System.IO
↓ここから次のファイルが始まる
main = getArgs >>= mapM readFile >>= putStrLn.unlinesimport System.Environment

main = getArgs >>= putStrLn.unwords


215 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 14:57:07.40 ]
実行結果の書き直し・・・半角スペースは消えるんだった・・・orz

import System.Environment
import System.IO
                                   ↓ここから次のファイルが始まる
main = getArgs >>= mapM readFile >>= putStrLn.unlinesimport System.Environment

main = getArgs >>= putStrLn.unwords



216 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 18:31:27.36 ]
>>213-215
率直に言う

 関数型言語が使える使えないうんぬんの前に、常識的な(日本語の)文章表現を使えるようになれ

単にコードをコピペしただけで、自分の意図が相手に通じると考えるな
まともなヤシなら以下のような推論を自然に行って、それを文章で表現できる

・.... を期待して ..... という条件で (* 仮説1 *)
・..... というコードを試したが.....となり、期待にそぐわなかった -- (* 実験1 *)
・おそらく ..... が原因ではないかと思う (* 帰納1 *)
・そこで、新たに .... を期待して ..... という条件で (* 仮説2 *)
・..... というコードを試したところ .....となり、期待どおりの結果を得た -- (* 実験2 *)

ここまで言って分からなければ、お前さんは重症の「ハスケラ症」患者であり、
本人には自覚できない深刻なコミュニケーション不全の状態にある
とっとと隔離病棟(=Haskell本スレ)に戻ってオナニーでもしてるのがお似合い

217 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 19:37:53.91 ]
このスレが隔離病棟だという認識がない、ってあたりが重症だなw

218 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 06:31:27.90 ]
型は制約 #プログラミング初心者のミス


Zermeloを初心者呼ばわり、ワロスw

219 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 08:06:51.40 ]
型付集合論自体がラッセルの逆説を回避するための制約ですし.

220 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 10:42:27.74 ]
disることでしかアイデンティティを保てない可哀相な奴なんだよ。



221 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 10:47:08.52 ]
オブジェクト指向 #プログラミング初心者のミス ←これとか

222 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 20:07:43.04 ]
いやオブジェクト指向は糞

223 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 15:50:23.80 ]
そうそうクラスとかインスタンスとかメソッドとかの用語を使う言語は100%糞!

224 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 17:07:26.99 ]
いまどきは、組み込みみたいなリソースの厳しい案件でも使うけどな。

225 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 17:35:45.66 ]
オブジェクト指向言語は使わなくても、設計では使うだろ

226 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 21:01:50.69 ]
制御系やっているけど、OSはRedHatなのに、言語はCとアセンブラだ。

227 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 18:56:13.23 ]
俺はよく知らんのだが、関数言語アンチとんの連中なの?
twitterやブログでも写真でもいいから見せてくれないか?

228 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 18:56:55.71 ]
オブジェクト指向とは別名スパゲティ指向だと言われてる。

229 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 19:07:51.16 ]
ねーよ

オブジェクト指向でスパゲティにするような奴は、ループ構文使おうが、例外を使おうが
スパゲティを作るんだよ。馬鹿は何を使っても同じ。

230 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 19:34:44.70 ]
gotoやグローバル変数全盛時代、スパゲティコード生産しまくってた連中は
自分達がスパゲティ製造者だという自覚がなかったという

gotoでスパゲティにするような奴は、関数呼び出しを使おうが
スパゲティを作るんだよ、とか言ってね



231 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 21:02:29.24 ]
お前ら立派なスパゲティ職人になれよ。
一芸に秀でりゃ食っていける。

232 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 05:53:15.86 ]
関数型言語は別名ゴルフ指向言語と言われているなw

233 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 07:10:20.20 ]
>>230
>gotoでスパゲティにするような奴は、関数呼び出しを使おうが
>スパゲティを作るんだよ、とか言ってね

いや、まさにその通りだろ。


234 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 07:20:22.37 ]
スパゲティで塩やきそばを作ると結構いける

235 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 13:11:51.33 ]
>>230
スパゲッティ・コードというのは、ウケ狙いの後付表現に過ぎないからな。

gotoを使ったからスパゲッティになった、なんていう理屈だと、
あと10年くらいして改善された手法が一般的になったら、
今コード書いてる連中は殆どスパゲッティメーカーになってしまう。

236 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 19:28:12.79 ]
スゲパティシエ

237 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 20:05:39.34 ]
>>235
いや、だから関数型言語使ってる連中がOOP使ってる連中に
「お前等スパゲティコード書いてるぜ」って言ってるんだろ?

238 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/03(火) 12:58:40.32 ]
スパゲティコードは読み辛く、読み解ける人は限られていた
一方、関数型言語のコードはそもそも読める人が限られていた

広まるといいですね関数型言語

239 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/03(火) 13:30:15.51 ]
関数型だって普通にスパゲッティになるしw

240 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/05(木) 12:51:22.26 ]
haskellのdo内はなぁ。。。 関数型スパゲティの宝庫だね。
ナポリタンにしますか?ミートソースにしますか?それとも、カルボナーラにします?



241 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/05(木) 20:19:43.36 ]
何故Haskellのdo内でスパゲティになるか
理由を>>240は説明できないだろう

242 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/05(木) 21:01:04.36 ]
関数型言語に馴染まないものを無理に突っ込んだ悪足掻きだからさ
生まれ付いての汚れ役だね

243 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/05(木) 21:07:23.34 ]
doはただの関数合成の構文糖なんだが
関数の合成が関数型言語に馴染まないとは面白いことを言うなぁ

まあ、>>242はdo構文を普通の関数合成の表記に
書き直す事すらできないだろうけど

244 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/05(木) 21:14:39.14 ]
流石は関数型言語ユーザー様
上から目線が板に付いてますねw

245 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/05(木) 21:35:11.51 ]
永遠に学習しない態度が板に付いている奴はほんとカスだな

246 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/05(木) 21:43:45.64 ]
>理由を>>240は説明できないだろう
>書き直す事すらできないだろうけど
>永遠に学習しない態度が

決め付けも大好きみたいすねw

247 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/07(土) 01:09:28.66 ]
構文糖衣が必要なのは相性が悪いからじゃないの?

248 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/07(土) 01:20:29.83 ]
良く使うから構文糖が用意されるって話は分かるが
相性が悪いから?なにそれ?

じゃあ何か。C言語で x=x+1 を x++ と書けたり
*(x+1) を x[1] と書ける構文糖が用意されてるのは、
C言語がインクリメントや配列と相性悪いからか?

249 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/07(土) 05:35:33.68 ]
>>248
> じゃあ何か。C言語で x=x+1 を x++ と書けたり

その2つが同じセマンティクスだと思っているのなら
もう二度とコードを書かないほうがいいぞw

250 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/07(土) 06:01:26.63 ]
x86ならおんなじじゃないの?



251 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/07(土) 07:41:13.84 ]
>>249
ああごめん。++xだったね

252 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 14:07:02.39 ]
>>251
大分近くなったが、まだセマンティクスは完全に一致してないのだが…
マジでプログラマやめたら?

253 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 20:12:07.88 ]
xが整数かポインタかで細かいところは変わるし、そこまでこだわる理由も無いように思うがw

254 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 06:27:34.64 ]
Cリファレンスマニュアル5th edition読む限りでは ++x と x+=1 と x=x+1 は
等しいと読めるし、今手元に無いから記憶だけど規格書でもそうだった気がするが...
xが整数かポインタかで変わる?ありえんだろ

255 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 06:53:56.48 ]
整数ならインクリメント命令にできるが、ポインタだとそうはいかない。

>>249 は x=x+1 において x の評価が 2 回起きる、と言いたいらしいが、
ここでは x は任意の式ではなくて、ただの変数なので、その違いは無い。

結論。>>249 は今すぐプログラマをやめて、一生 2 ちゃんねるもプログラムも書くな。

256 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 06:55:53.83 ]
>>255
ポインタでもできるよ?何言ってんの?

257 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 07:23:12.98 ]
そりゃ 4 増える「インクリメント命令」がありゃ、int を指してるポインタでもできるが。

258 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 07:50:03.25 ]
ん?今は x=x+1と++xの違いの話だろ?
どっちもxがポインタなら sizeof(*x) だけ増加する

259 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 08:51:18.39 ]
>>255
> ここでは x は任意の式ではなくて、ただの変数なので、
なにか鬼畜なマクロかもしれませんよ。小文字一字なマクロは私の好みではありませんが。

260 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 11:46:04.65 ]
仮に (1+1) に展開されたら ++ なんてできない。以上



261 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 12:12:40.99 ]
>>255
ねえ、君、本当にプログラマ?
プログラミングで給料取れるレベルじゃないよ。

262 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 12:14:47.94 ]
>>259
マクロの引数だったりすると、小文字一文字はよくある話だなw

263 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 12:14:53.18 ]
結局具体的には全く反論できないんだなw >>261

264 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 12:27:04.25 ]
セマンティクスの話してるときに
字句レベルの置き換えであるCマクロ持ち出す馬鹿は
プログラマに向いてないから辞めた方が良い
まともに言語規格書読めないだろ

例えば
#define double int
とされてたら double x; でも x はdouble型とは言えない、
とか言い出すレベルでバカなわけで

265 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 13:07:24.91 ]
セマンティクスとしては x の評価を 2 度する、というのは変わらんじゃないのかな。
その評価が状態に対して idempotent かどうかという違いであって。

266 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 19:21:01.18 ]
>>249
その2つのセマンティクスの違いって何なの?
そろそろ答え教えてくだしあ

267 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/11(水) 17:15:34.44 ]
結論: 教えてクレクレ君は二度とコード書かないほうがいい馬鹿

268 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/11(水) 17:17:35.36 ]
>>264
> セマンティクスの話してるときに

ダウトw
構文の話をしていた>>248にセマンティクスを持ちだしたのが>>249だwww
あまりにも馬鹿すぎるww

269 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/11(水) 17:33:12.97 ]
>>248
> 良く使うから構文糖が用意されるって話は分かるが
> 相性が悪いから?なにそれ?
> じゃあ何か。C言語で x=x+1 を x++ と書けたり

↓これがいつのまにか

>>264
> セマンティクスの話してるときに
> 字句レベルの置き換えであるCマクロ持ち出す馬鹿は
> プログラマに向いてないから辞めた方が良い

構文糖って「字句レベルの置換え」だよねw

> プログラマに向いてないから辞めた方が良い
> プログラマに向いてないから辞めた方が良い
> プログラマに向いてないから辞めた方が良い
> プログラマに向いてないから辞めた方が良い
> プログラマに向いてないから辞めた方が良い
> プログラマに向いてないから辞めた方が良い
> プログラマに向いてないから辞めた方が良い
> プログラマに向いてないから辞めた方が良い
> プログラマに向いてないから辞めた方が良い


270 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/11(水) 18:16:56.64 ]
構文(syntax)と字句(lexical)の違いも分からないとか
マジ終わってんな
yaccとlexも知らんのか



271 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/11(水) 18:38:20.37 ]
>>267
じゃあ僕が良いこと教えてあげる
>>249のようなレスしても論理的な説明しなかったら説得力0なんだよ^^

272 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/11(水) 19:55:55.38 ]
教えてクレクレ君とバカにすれば、どんな間違いを言っても逃げきれると思っているバカが一人w

273 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 10:24:22.23 ]
>>270
へー、字句解析に手を入れずに構文糖衣かw
馬鹿が考えることは壮大だねえww

お前、完全にプログラマー失格。

274 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 11:33:51.80 ]
プログラマ失格のバカはどう見てもおまえだw

275 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 18:21:18.92 ]
>>274
いいから涙を拭けよ

見ていて痛々しすぎる
そうやって涙目で必死に弁解するぐらいなら
本当にプログラマー辞めればいいのに

276 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 18:41:52.91 ]
その言葉が自分にあてはまってると気付かないあたり、完全に重篤の患者ですなw

277 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 20:32:23.55 ]
>>276
どうしてプログラマーになろうなんて思っちゃったの?
間違いを正すのは恥ずかしいことじゃないよ。
だから今すぐ辞表を書きなさい。

278 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 20:34:51.24 ]
>>277 >>277

279 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 20:35:37.79 ]
最近の関数型言語は辞表も書けない

280 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 20:37:18.68 ]
そうやって無限退行することしかできないんだな



281 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 20:38:49.61 ]
なんか気持ち悪いのに粘着されてんな

つーか書き込みから漂うドカタ臭で鼻が曲がるから
もうちょっとマトモな職に就いてから書き込んでくれ

282 名前:デフォルトの名無しさん mailto:sage [2012/04/13(金) 00:56:17.28 ]
pythonpython言ってた人はどこ行ったの?

283 名前:デフォルトの名無しさん mailto:sage [2012/04/13(金) 01:08:26.21 ]
人口が少ない言語。一人減っただけでとたんに静になる。

284 名前:デフォルトの名無しさん mailto:sage [2012/04/13(金) 08:48:11.97 ]
結局、蓮ケラはx=x+1とx++の区別がつかないのねwかわいそww

285 名前:デフォルトの名無しさん mailto:sage [2012/04/13(金) 08:55:01.56 ]
>>265 が理解できないならプログラマやめたほうがいいよ

286 名前:デフォルトの名無しさん mailto:sage [2012/04/13(金) 17:58:38.11 ]
ところで何故にセマンティクスの話をし始めたの?

287 名前:デフォルトの名無しさん mailto:sage [2012/04/13(金) 18:47:51.14 ]
構文糖って言葉を聞きかじって、使ってみたかったんだろ。察してやれw

288 名前:デフォルトの名無しさん mailto:sage [2012/04/13(金) 19:39:06.58 ]
検索してみたらセマンティクスって言い出したのは
>>249のアホじゃん

289 名前:デフォルトの名無しさん mailto:sage [2012/04/13(金) 22:40:41.13 ]
x=x++++++1

290 名前:デフォルトの名無しさん mailto:sage [2012/04/13(金) 22:41:46.36 ]
>>289はこう解釈されます

x=((x++)++) + +1




291 名前:デフォルトの名無しさん mailto:sage [2012/04/14(土) 01:50:55.06 ]
出来るやつならどっちも使える上に、C++のほうを好むと思うがね。

どっちもできるけどC言語のが良いってヤツ存在してんの?

292 名前:デフォルトの名無しさん mailto:sage [2012/04/14(土) 04:41:53.92 ]
Linus

293 名前:デフォルトの名無しさん mailto:sage [2012/04/14(土) 05:21:54.94 ]
お前らプログラマなの?

294 名前:デフォルトの名無しさん mailto:sage [2012/04/14(土) 08:23:34.17 ]
>>290
x++はsequence pointじゃない
ひとつのsequence pointに複数のside effectsを含むのは
未定義動作

295 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 00:50:18.96 ]
>>292

レベルの低いヤツに合わせるためにあえてCを使ってるだけで、Cの方が良いってわけじゃないんでは?

296 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 01:08:19.88 ]
Cの方がいいに決まってるだろw

297 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 01:10:23.80 ]
関数型言語は遅いからね。
C言語に比べて100倍以上遅い。

298 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 01:36:54.44 ]
やっぱりx=x+1と++xは式としてのセマンティクスが違うんだね。
納得。

299 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 01:43:18.55 ]
そりゃそうだろう。

そもそも++というのはなんで存在するか。

まず1追加するというのはプログラムでよく出てくる処理。
ならばそれを高速にしようと、専用のアセンブラ命令(INC)を作った。
足し算はADD

昔のコンパイラは馬鹿だから+1を++に変換するなんてことはしない。
+1と書かれていたらADD、++と書かれていたらINCに
単純に置き換えるのみ。

300 名前: ◆QZaw55cn4c mailto:sage [2012/04/15(日) 02:04:05.23 ]
さらに、CPU によっては命令の実行ごとにレジスタが自動的にインクリメントされるアドレッシングを備えるものもあった。



301 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 06:45:54.32 ]
んで、ここ何のスレだっけ

302 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 07:05:36.02 ]
>>298>>299
Cとは何かを決めてるのは言語規格書
違うというなら規格書を引用して説明しろよ

303 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 07:31:09.89 ]
こんなトリビアルなピープホール最適化を「昔のコンパイラは馬鹿だから」だなんて
言っちゃうのは、コンパイラのことを全く知らないド素人です、と大声で宣伝するに等しい。

304 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 10:04:49.51 ]
>>302
一番最初にCが作られた時に
言語規格書なんてないよw

規格書は後から作られたものです。

305 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 10:12:53.72 ]
ピープホール最適化なんてのは
Cが一番初めに作られたときはなかったな。

306 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 10:15:32.82 ]
> 規格書は後から作られたものです。

だから何。
規格を作る時に既存の実装を無視して作ったとでも思ってるおバカさん?

307 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 10:21:42.03 ]
>>306
頭が悪いね。

(規格がない時代の)既存の実装がどうしてそうなっているか。
C言語は高級アセンブラと言われるように、
アセンブラを記述する代わりとして使えるように
コンピュータよりで仕様が作られている。ポインタとかね。

で、その一つが++という命令。CPUがインクリメントを速く実行できる
命令があるのなら、それに対応した文法をC言語に持たせるの自然な発想。

Cが作られたのは1971年だぞ。どんだけコンピュータが遅かったか。
その時代に、時間がかかる最適化処理をコンパイラにやらせるわけないじゃないか。
当時は人間が頑張ってC言語上で最適化する時代だったんだよ。


308 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 10:22:23.42 ]
1973年だった。

309 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 10:26:09.65 ]
現時点で規格書があるのに、それを無視して
昔はこうだったと言い出す奴は100%仕事できないだろうな

310 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 10:28:56.98 ]
どうしてそうなっているかという
過去の話をしているのだから、同然だろ。



311 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 10:31:31.41 ]
規格書を引用すればすむ話なのに?

312 名前: ◆QZaw55cn4c mailto:sage [2012/04/15(日) 10:31:37.81 ]
そうそう企画なんて後付け、企画?

313 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 10:34:03.15 ]
>>311
すむと思うなら自分でやってみれば?

314 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 10:35:11.26 ]
そりゃ違う言い出したほうが出すべきだろ
書いてあるんだろ?違うって

315 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 10:36:19.74 ]
「規格書に書いてある」と言い出した人はだれですか

316 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 10:37:48.97 ]
規格書がない時代から++はあるのに、
規格書で決まってるんだから〜って
言ってる奴は間抜けだなw


317 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 10:38:14.13 ]
規格書に書いてなかったら同じとも違うとも言えんだろ
馬鹿じゃないの?

318 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 10:38:42.04 ]
>>316
>>309

319 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 10:39:20.38 ]
>>317
ほう。つまり君は規格書に書いてあると言いたいわけだな?
引用して見せてよ。

320 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 10:41:39.25 ]
>>319
規格書に書いてなかったら「未定義」だ
でも「違う」と言い切ったんだろ?だったら書いてあるんだろうが



321 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 10:41:54.91 ]
>>318
だからね。規格書がない時代にどうして++が生まれたかの話をしてるんだよ。
規格書は後から作られたもの。

教科書にそう書いてあるから正しいんだとか言うなよ?
恥ずかしいからw

322 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 10:43:55.84 ]
>>320
もしかして「セマンティクス」の意味がわかってないのかな?

323 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 10:46:24.21 ]
>>321
> だからね。規格書がない時代にどうして++が生まれたかの話をしてるんだよ。

>>249から読み直したが、全然そんな話じゃなかったぞ
それとも>>249は規格書がない時代のCの話をしてたのか?

324 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 11:01:45.10 ]
とんでもない間違いを何度も晒されてしまう>>248がかわいそうすぎww



325 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 11:10:47.57 ]
> Cが作られたのは1971年だぞ。どんだけコンピュータが遅かったか。
> その時代に、時間がかかる最適化処理をコンパイラにやらせるわけないじゃないか。
> 当時は人間が頑張ってC言語上で最適化する時代だったんだよ。

嘘八百をご苦労さーんw

世界最初のFortranコンパイラが、「コンパイラなんてそんなものか」と
バカにされないために、最適化に苦心した、という話とか、最適化を
勉強していれば普通は常識。

326 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 11:41:26.16 ]
結局、シンタックスシュガーの話をしているところに
規格書がない時代のセマンティクスの話をしだして
>もう二度とコードを書かないほうがいいぞw
とかドヤ顔で言っちゃったということか

327 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 12:40:56.55 ]
よう、俺に振り回された気分はどうだい?w

328 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 17:13:44.57 ]
事の発端はこれか。確かにこれは馬鹿すぎる。

>>248
> 248 名前:営利利用に関するLR審議中@詳細は自治スレへ [sage]: 2012/04/07(土) 01:20:29.83
> 良く使うから構文糖が用意されるって話は分かるが
> 相性が悪いから?なにそれ?
>
> じゃあ何か。C言語で x=x+1 を x++ と書けたり
> *(x+1) を x[1] と書ける構文糖が用意されてるのは、
> C言語がインクリメントや配列と相性悪いからか?


329 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 08:53:23.07 ]
スレタイすら読めない奴って、他スレで負けて逃げてきた連中だろうな。

330 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 08:55:57.06 ]
自分が負け続きで逃げっぱなしなので、必死でそのように思い込もうとしているのですねわかります



331 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 02:39:26.84 ]
リーナスがこのスレに書き込みしてるのか?

332 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 10:24:30.87 ]
セマンティクスとは「データの意味」のことであり,

333 名前:デフォルトの名無しさん [2012/05/20(日) 00:55:25.53 ]
適材適所

334 名前:デフォルトの名無しさん mailto:sage [2012/05/20(日) 02:06:46.69 ]
>>328
これって、聞いた話だと、とあるCPUにレジスタの値を+1するだけの特化命令があって
その命令に対応させるためだけに作った構文なんだってね

むかしは、構文木とかもメモリがないから、一行分づつに作って、マシンコードを生成してたから
そういう命令が必要だったんだとか

335 名前:デフォルトの名無しさん mailto:sage [2012/05/20(日) 02:07:29.68 ]
>>334
最後の行訂正
命令→構文

336 名前:デフォルトの名無しさん mailto:sage [2012/05/20(日) 17:39:04.46 ]
とあるも何も、大抵のCPUにはインクリメント命令ぐらいあるだろw
しかも、x += 1はステートメントじゃないしwバカすぎw

337 名前:デフォルトの名無しさん mailto:sage [2012/05/20(日) 20:50:55.36 ]
最近のCPUは特化命令としてはないんじゃないの?
もちろん、命令デコードの段階で判断して、高速に実行するだろうけど

338 名前:デフォルトの名無しさん mailto:sage [2012/05/20(日) 22:27:28.71 ]
昔のCPUと違って、アセンブラ用コードに一対一で対応したマシン語で実行してる訳じゃないからなあ。

339 名前:デフォルトの名無しさん mailto:sage [2012/05/21(月) 10:04:58.26 ]
++とか--が用意されたのは

「アドレスレジスタが指す領域の値を参照/更新したあと、アドレスレジスタをインクリメント/デクリメントする」

「アドレスレジスタをインクリメント/デクリメントしたあと、アドレスレジスタが指す領域の値を参照/更新する」

上記あたりを1命令で実行可能なCPU向けに
最適化とか無しに上記の命令へダイレクトに解釈されるプログラムを書けるよう
用意されたものだと思ってた

340 名前:デフォルトの名無しさん mailto:sage [2012/05/22(火) 13:51:37.23 ]
大昔のPDP-11の頃はそうだったかもしれない、けど、1980年頃にはどうでもよくなって
たんじゃないかと思うけど。

後置の場合に変化前の値が式の値のなる点を除いて。



341 名前:デフォルトの名無しさん mailto:sage [2012/05/29(火) 17:23:56.80 ]
-----------まとめ----------
「馬鹿は死なねば治らないのであり、だからこそアナトール・フランスは
『愚かな者は、邪悪な者よりも忌まわしい』と言ったのだ。
 邪悪な者は休むときがあるが、愚かな者はけっして休まないからである。」
(ホセ・オルテガ・イ・ガセット 1883〜1955)

toro.2ch.net/test/read.cgi/tech/1336122899/247
>ゲームは作らんから知らんが、
224 == 247 == 704 == 717 == logsoku.com/thread/toro.2ch.net/tech/1335361193/46
口癖はコンポジション、ミサイルとホーミングミサイルの設計について1ヶ月間も考え続けてる
toro.2ch.net/test/read.cgi/tech/1336122899/772
>ゲーム作らなくてもお前よりマトモ
タスクの実行順序を意識しないとゲームが作れない(笑)
toro.2ch.net/test/read.cgi/tech/1336122899/767
敵機 → プレイヤー の順序でタスクを実行するとタスクがぶっ壊れる
OOを得意げに語っているつもりが、やっている事が20年前のC言語だったという事実
バイナリの書き換えがわからない
コンパイラ言語のことをコンパイル言語とか言っちゃう
タイプミスの数々、右手の人差し指と中指をケガしてる模様
toro.2ch.net/test/read.cgi/tech/1336122899/190
toro.2ch.net/test/read.cgi/tech/1336122899/297
toro.2ch.net/test/read.cgi/tech/1325246820/837-839
toro.2ch.net/test/read.cgi/tech/1336122899/318-320
toro.2ch.net/test/read.cgi/tech/1336122899/332-334
toro.2ch.net/test/read.cgi/tech/1336122899/818
toro.2ch.net/test/read.cgi/tech/1336122899/956


342 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 15:05:39.81 ]
なんで関数型の人は他パラダイムを全部「命令型」と呼ぶの?
こないだPrologまでリストに含めて「命令型」と呼んでる人がいて
ツナマヨ思いっきり噴いちゃったヨ

343 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 15:40:49.40 ]
そいつが素人あるいはニワカなだけだろ
実際、そのカキコは誰からも相手にされていなかったしね
例外的な馬鹿一人をつかまえて、すべてが同じと考えるのもいかがなものかと

344 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 18:22:24.14 ]
SQLは何言語になるのかね

345 名前:デフォルトの名無しさん [2012/06/11(月) 00:41:19.97 ]
ドメイン特化言語

346 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 00:54:22.31 ]
確かに関数型言語が汎用である必要は無いのかもね。
汎用言語って括りだと、コンピュータの動作原理を考えても、
やっぱ手続き型が主流になるのは目に見えてるしな。
SQLみたいに何かに特化してしまってよいのかも。

347 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 07:32:22.77 ]
関数型言語はアホには理解できないという意味で
汎用的じゃないな

348 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 10:04:14.07 ]
つまり研究用に細々と使われるのがお似合いということ

349 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 11:01:21.63 ]
>>346
と言うか手続き型で全部やることすら本来なら旧世代の考え方かと
(それが今も濃く残っちゃってるのだけど)
インラインアセンブラみたいな形で
本質的に手順を必要とする部分は手続き型、本質的に式を必要とする部分は関数型、
本質的に論理を必要とする部分は論理型、ごく低レベルな処理を必要とする部分はアセンブラ…

ってやればいいのではないかと思う

350 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 12:21:30.96 ]
普通にCとHaskellを組み合わせて使ってる



351 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 14:36:16.74 ]
バカは、他人がみんなバカということにしないと気が済まないから、
>>348 のような発想を、よくするんだよな。
80年代に、BASICさえ使えれば万全、とか言い張ってた人にそっくりだ。

352 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 14:49:12.37 ]
つまり関数型言語を理解出来ないバカは少数ということ

それなのにユーザーが少ないのは使えない玩具だから

353 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 22:01:54.26 ]
>>352
自分がその少数のバカに属する気分はどう?

354 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 00:21:53.12 ]
へたくそな煽り乙w

355 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 02:45:36.25 ]
ふむ。関数型言語が理解できるって強がり言わないだけ素直でよろしい
バカの上に嘘つきで意地っ張りとか救いようが無いからね

356 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 04:39:45.80 ]
関数型言語が理解できるって言うと、強がりになるの?

357 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 07:30:11.78 ]
理解してない奴が言ったらそうなるだろう
関数型言語に限らずOOPLでも数学でも何でも

358 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 08:07:29.48 ]
理解できない人って居るのかなぁ。
副作用がない分、簡単なんでしょ?

359 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 08:10:37.27 ]
>>358
> 副作用がない分、簡単なんでしょ?

これ疑問系で訊くってことはお前は理解できてないんだろ

だから理解できない奴は居るよ。お前のことだよ

360 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 08:14:49.30 ]
それ言ったらアセンブラだって簡単だよ
概念自体は理解できても、やりたいこと実現するとこまでいけないのが大概でしょ

手続き型でもそういう初心者が居るように
手続き型に慣れてても関数型という新たな概念に触れた人は関数型初心者になる
関数型のコードに慣れない内は「無理!わからん!」になるのは何らおかしくはない



361 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 08:26:28.97 ]
でも関数型って基本的に手続き型から副作用を取ったものだから、
手続き型が出来れば関数型も出来るよ。
むしろ手続き型のほうがあれこれ副作用に頭を悩ませなければならないから
使いこなすのは難しいと思う。
そりゃ関数型で無理に副作用っぽい物を表現しようとすると難しいけど、
それは使い所を間違っているだけだからねぇ。
副作用を狙う箇所は手続きで書けば済む話だし。

362 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 08:49:01.07 ]
ていうか OCaml 使えよ、っていう話だろ

363 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 08:57:59.08 ]
だって、関数型が難しいって論調だったから。

364 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 13:09:44.45 ]
ルーピーで関数型を気取られても

365 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 14:01:51.10 ]
関数型って気取るものなのですか?

366 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 16:42:53.55 ]
手続き型言語での状態書き換えを、「副作用」と呼ぶ事自体が迷走の始まり。
手続き型と同じアプローチで関数型言語を無理やり使おうとすると、関数型言語にとって副作用でしかないものが必要になるだけの事。

367 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 21:14:13.08 ]
おっとScalaを勘違いして採用した現場の悪口はそこまでだ

368 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 08:57:32.35 ]
勘違いして使ってりゃ、悲惨なことになるのは何でも同じだな。

369 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 11:53:02.19 ]
>>367
Twitter社のことか

370 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 15:10:03.54 ]
関数型コミュ、特にハスケラのdisり大好きっぷりを見ていると、
こいつらメジャーになったら速攻で内ゲバ始めるのが目に見えるから
距離を保つことにしたw



371 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 15:43:25.98 ]
距離を保つも何も、お前が近づけたことなど一度も無いだろ

372 名前:uy mailto:sage [2012/06/13(水) 16:52:14.22 ]
>>9

>関数型言語が普及しない理由 - 偏見プログラマの語り!
d.hatena.ne.jp/kura-replace/20111114/1321236695


これ、俺がググって偶然そいつのその記事見つけたとき
> というわけで本稿を書くわけですが(ヤメテ!そんな冷たい目で僕を見ないで!)、
>関数型言語*1についてはよく知りませんので、決して真に受ける事無く、
>オブジェクト指向言語をようやっと使っている底辺プログラマのぼやきということで了解いただければと思います。(ヤメテ!その前置きはズルイとか言わないで!)

この発言にブチギレそうになった奴の記事だわ


なんで>>9は明らかに初心者みたいな奴のブログ引用してんの?
引用に見せかけた晒し?

関数型はやっぱ流行らないな

373 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 17:11:51.61 ]
22 :uy [sage] :2012/06/13(水) 16:53:41.38
 静的言語はゴミでしかない

374 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 17:48:08.37 ]
>>366
手続き型言語には元々、「副作用」なんて無いしな。
あるのは、状態書き換え。

375 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 18:04:43.26 ]
printfが標準出力に出力するのも状態書き換えっていうの?

376 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 18:12:03.08 ]
最終的にはストレージの書き換えやパイプバッファの書き換えになるんじゃね

377 名前:デフォルトの名無しさん mailto:sage [2012/06/13(水) 18:26:43.46 ]
そこらへんひっくるめて値を返す以外のことは副作用と呼んだらすっきりしていいじゃないか
手続き型であっても有用な概念だ






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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