1 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 00:46:11 ] 大きな二つの流れである関数型と手続き型について議論・学習するスレです。 両者のメリット、デメリット、得意・不得意分野などをまなびませう。
2 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 00:59:14 ] 関数型なんて一部のマニアが趣味で使っているだけだろ。
3 名前:デフォルトの名無しさん [2006/04/16(日) 01:08:41 ] 手続き型は文系・原始人 関数型は理系・知的
4 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 01:09:18 ] エージェント指向
5 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 01:28:33 ] erlangは関数型だけど,実用的なものに使われてるよ。
6 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 06:01:15 ] 一階述語論理は?
7 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 07:30:18 ] >>2 関数型は馬鹿を切り捨てるぶん、浸透しにくいよね。
8 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 08:28:21 ] C++はSTLのあたりから結構関数型風に傾いていないか?
9 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 09:15:10 ] C#でのdelegate、Generics,インターフェースを駆使したものでの生産性と関数型の生産性は異なるの?
10 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 12:26:25 ] >>7 教育の問題だと思う。初めてプログラミングを教えるときに使う言語をPrologとかSchemeみたいなのにすれば浸透すると思う。 私は命令型の言語よりもPrologのような論理型言語を使った方がプログラムしやすい。
11 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 12:29:59 ] >>10 Prologは言語というよりも証明支援系・・・かな?
12 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 12:35:27 ] >>11 ふつうのプログラミング言語だよ。ライブラリは少ないかもしんないけど。
13 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 12:44:23 ] 手続き型→一般人 関数型→厨房・暇人
14 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 13:39:51 ] 手続き型のアホに対する優しさは異常
15 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 13:48:00 ] >>8 無い。
16 名前:デフォルトの名無しさん [2006/04/16(日) 14:16:38 ] object is poormans closer!!!!!!!!!!!!
17 名前:デフォルトの名無しさん [2006/04/16(日) 14:17:43 ] >>14 手続き型っていうか、代入型は初心者がバグを書くのを助けてくれる。
18 名前:デフォルトの名無しさん [2006/04/16(日) 14:18:13 ] >>15 使ってない人が反応しなくていいです(^^)
19 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 14:35:21 ] >>18 お前のことだろw
20 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 15:17:58 ] >>8 関数型というより静的(コンパイル時)に決められるものは 徹底的に静的に決めるということだな。 仮想関数はなるべく使わない。クラスを避ける。 自然と関数指向になる。
21 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 16:45:23 ] ここで手続き型と関数型の違いについて質問でてるけど、まともな答え返ってこないね。 ttp://pc8.2ch.net/test/read.cgi/tech/1140717775/
22 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 16:46:17 ] >>20 > 関数型というより静的(コンパイル時)に決められるものは > 徹底的に静的に決めるということだな。 >仮想関数はなるべく使わない。クラスを避ける。 という説明から > 自然と関数指向になる。 これにはならんのだが。 関数型というものを、勘違いしている人のいうセリフだな。
23 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 17:14:11 ] 手続き型と関数型の違いはプログラミングスタイルじゃないかな。 * 手続き型 状態の変化を脳内でシミュレーションし,プログラムを作成。その状態の変化というのが代入などの副作用。 * 関数型 事実を定義し,それらの事実と事実との関係を構築しプログラムを作成。
24 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 17:17:15 ] 関数型、手続き型でおのおの得意なプログラム、苦手なプログラム、出来ないプログラムってあるの?
25 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 17:18:21 ] できないプログラムはありません。実はラムダ式に帰着できちゃいます。
26 名前:デフォルトの名無しさん [2006/04/16(日) 17:19:43 ] 関数型の生産性と持続可能な発展性は美味しい
27 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 17:20:35 ] 向き不向きは? 後ラムダ式に帰着できるって言うのはマシン語に帰着できるというような極論?
28 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 17:23:12 ] 遅延評価があるとリアルタイム処理が難しくならない?
29 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 17:26:47 ] >向き不向きは? あると思う。 >後ラムダ式に帰着できるって言うのはマシン語に帰着できるというような極論? その通り。
30 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 17:29:41 ] 関数型は馴染みが無いが、説明的なところを読んで解釈して書いてみる。 間違ってたらスマソ。 関数型は参照透過性を前提としているから、 途中の「代入」などの状態変化要因がある限り本当の関数型にはなりえない。 なにせ関数型はプログラムの全てを"数学的な意味での関数"として記述するので参照透過性が保たれるのは当然。 f(a,b,c) = 3*a^3 - 5*b^2 + c こういう代数方程式をプログラムとして記述するのが関数型。 (手続き型は手順というかフローチャートをプログラムとして記述するもの) (論理型は複数の命題の組み合わせをプログラムとして記述するもの) 関数型ならこうプログラムが組める(こんな言語あるかは知らんが) hlwd(str) = strcat("Hello! ", str) main(argv) = putstr(hlwd(argv)) >main("World") Hello! World 手続き型で書くとこうなる(こっちも言語仕様は適当) main(argv){ string str="Hello! "; strcat(str,argv); //第1引数と第2引数の文字列を結合し、第1引数へ返す print(str) }
31 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 17:31:39 ] あらゆる計算モデル、つまりチューリングマシン、帰納的関数論、またはActor理論、etc..はλ計算で表現できます。
32 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 17:42:13 ] 結局さぁ・・・ 普通のプログラムだと、データ受信したとか、入力があったとか何らかの起点があるよね? そこからの流れが関数として書かれてるってこと? 状態の保持とかどうすんの? 状態持つとかだったら、オブジェクト型のほうが人の思考になじみやすいってこと? で、どこら辺で生産性があがるのよ?
33 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 17:44:02 ] んな小難しいことしなくても 手続きっぽいの kekka = nanka_no_function( nantoka kantoka ) if kekka then print ( "dekitayo!" ) else print ( "dekine-yo!" ) 関数っぽいの print ( if nanka_no_function( nantoka kantoka ) then "dekitayo!" else "dekine-yo!" )
34 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 17:47:23 ] あ、手続きのは"dekitayo!"とかをstringの変数に入れたほうがよかったか。 バカっぽくてごめん。
35 名前:30 mailto:sage [2006/04/16(日) 17:49:33 ] 関数型には if も else も存在しない。 なぜなら状態という概念が無いから状態によって変化、分岐するということが無いから。
36 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 17:50:19 ] なぁそのコンパクトに書けるっていうのじゃなくてさぁ・・・ほらこう・・・あるだろ? 関数型がこう・・・いいって言われるものがさぁ・・・あるんだよな?
37 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 17:51:21 ] 生産性は下がるんじゃねーの?関数型はマイナーなんだし。
38 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 17:58:08 ] >>35 嘘をつくな。 例えば abs x = if x > 0 then x else -x は数学的な意味で関数だ。
39 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 18:00:45 ] >>37 そういう次元の話じゃない。
40 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 18:17:12 ] 関数っていうのは基本的には、 特定の集合に特定の一つの集合を結びつける規則という縛りしかない。
41 名前:デフォルトの名無しさん [2006/04/16(日) 18:26:42 ] 確かに馬鹿文系に無理に使わせるのは却って生産性を下げるな。 使いこなせないだろうから。
42 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 18:29:41 ] ×生産性があがる ○抽象性があがる
43 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 18:34:20 ] ラムダとかクロージャとか、 最近の手続き型言語と言われてる言語にも それなりに導入されてるしな。 直接的なものでなくとも、 言語機能を使えばそれなりに簡単に実装できる、とか。 純粋な手続き型言語ってのはそのうち死滅しそうだが、 だからといって純粋な関数型言語もずっとマイナーでいつづけるだろうな。
44 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 20:00:58 ] これが手続き型、 if( ... ) { ... } else { ... } これが関数型。 ... ? ... : ... if を使わないで、三項演算子だけを使って作れば関数型っぽくなる。
45 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 20:02:32 ] 人間の考え方は、手続き型です。 だから手続き型の方が人間に分かりやすいのです。
46 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 20:11:12 ] >>44 if使う使わないの話は関数型,命令型に関係ない。 もともとCは関数型のスタイルでプログラミングするように設計されてない。Cで関数型プログラミングできないことはないけどやりにくい。
47 名前:30 mailto:sage [2006/04/16(日) 20:32:15 ] >38 ttp://ja.wikipedia.org/wiki/%E7%B5%B6%E5%AF%BE%E5%80%A4 数学上の絶対値の定義。 >abs x = if x > 0 then x else -x これ数学的な意味での関数の書き方じゃないから。 Cでかくとこうなるけどね。 double abs(double x){ if(x > 0) ; else x*=-1; return x; } そもそも条件分岐している時点で「状態」が存在しているわけだから純粋な関数型じゃない。
48 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 20:39:16 ] >>47 お前が言うところの「数学的な意味での関数の書き方」て何よ
49 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 20:44:08 ] >>48 自然言語が入っちゃマズイとか、 連続していないといけないとか、 定義域が実数じゃないといけないとか、 なんだか色々元の定義とは別のもの仮定してそう。 関数型と数学の関数は違うんじゃないのかな。
50 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 20:46:35 ] >>47 条件分岐のどこに状態がある?値を渡す時間によって帰ってくる値が変わるっていうなら状態があるっていうけど。
51 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 20:48:22 ] もうこいつら何について話してるのかわかんね。コンテキストがあってねー。
52 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 20:49:46 ] 結論:誰も分かってる奴がいない。
53 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 20:50:55 ] >>51-52 MediatorパターンとAdapterパターン使って。
54 名前:38 mailto:sage [2006/04/16(日) 21:08:29 ] >>47 数学を引き合いに出したのがまずかったなら言い直すが、 abs x = if x > 0 then x else -x は正しいHaskellの関数定義(MLでもちょっといじれば通るはず)。
55 名前:30 mailto:sage [2006/04/16(日) 21:27:18 ] >54 そういうことでなら納得。確かに参照透過性は損なわれないわけだし。
56 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 21:45:19 ] つまり、数学のための言語であって 実用的じゃないのが関数型でいいの?
57 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 21:50:40 ] >>56 よくないです
58 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 21:54:04 ] >>56 違う。 モデル化する方法が異なるだけ。 ディジタル回路を扱うときに使う言語とアナログ回路を扱うときに使う言語の違いのようなもの。 それに実用的に使える。
59 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 23:03:43 ] ビジネスというのは最初がローコストに見えることが重要。 安く導入して保守費用で儲けたりさ。そういう観点から見ると手続き型しかありえんのだわ。
60 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 23:24:44 ] つはっかーと画家
61 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 01:02:51 ] 手続き型の言語ばかりやっていると新しい言語の習得が難しくなりコストがかかる。 Schemeみたいな関数型と手続き型の両方のプログラミングスタイルが気軽に扱える言語を覚えた方がトータルで考えると低コストだと思う。
62 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 03:48:16 ] 手続き型に組み込まれた関数型は実用的だけど、 純粋関数型は実用的だとは思えない。
63 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 03:50:57 ] たとえば、Javaの総称型が関数型言語の多相型を取り入れたものだということは明らかなんだけど、 元からの言語仕様に強制的にねじ込んだものだからひどく煩雑なつくりになっている。 あれなら素直に関数型言語を使ったほうが良いとさえ思う。
64 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 03:56:53 ] >>62 純粋関数型言語で作られた実用的なアプリ。 www.wings3d.com/ 思う、思わないはどうでも良いけど、要は使いようですぜ。 頭脳が固まっちゃったら、もうお仕舞いだけどね。 ;; 予め言っておくが、他にはって聞かれたら、次は darcs 出すから聞くなよ。 ;; 際限無いからな。
65 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 04:18:01 ] >>64 英語じゃなくて日本語のやつは無いの?
66 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 10:24:28 ] >>64 正直オブジェクト指向に頭が固まってるんだが・・・関数型だとオブジェクトとかどうとらえるの? そうはとらえんのか? たとえば、ブラウザ作るとして開いてるページとその中身のhtmlとかはどんな感じに保持するの?
67 名前:デフォルトの名無しさん [2006/04/17(月) 11:29:57 ] >>66 俺も。○○指向、という点ではオブジェクト指向に 頭が固まっちゃってる。問題を解決するに当たって どんな風にクラスにモデル化するかということばかり 考えてしまう。関数型プログラミングとオブジェクト指向 プログラミングって相性悪い? ぜんぜん的はずしてるかもしれないけど、 Emacs Lisp いじってるときはオブジェクト指向の頭が取れてる気がする。
68 名前:67 [2006/04/17(月) 11:43:11 ] で、なんで相性悪いって気になるのか 仕事中にもかかわらずぼーっと考えてみたんだけど、 オブジェクトの内部状態って関数型プログラミング ではどうやってあらわすのよ?ってオモタ。
69 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 11:49:23 ] >>68 純粋な関数型ではないけどSchemeだったらクロージャと代入を使ってオブジェクトを作る。 純粋な関数型の場合,詳しくはないけど,クロージャとモナドを使うんじゃない?
70 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 11:52:43 ] >>69 挿すっと今度は逆にオブジェクト指向を関数型で実現するのに無理してる。最初からオブジェクト指向言語使えばいいのにって感じになるのか?
71 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 12:05:02 ] >>70 うん。オブジェクト指向で考えた方が楽なら無理して関数型を使う必要はないと思う。SmalltalkとかRubyみたいな言語を使った方がいいと思う。
72 名前:67 mailto:sage [2006/04/17(月) 12:07:44 ] >>71 それが混在してるのが悩ましいところなんだよな。
73 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 12:34:49 ] 逆に手続き型の言語なのに、マシンの状態をイメージしないで プログラミングするのはカンベンしてホスイ。人の能力に限りはあるけど、 できるだけそうするように努めるべき。
74 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 12:37:20 ] >>71 そうすると、関数型で作るときはオブジェクト的な考え方はしないの? 例であげた、ブラウザ作るときに複数ページを保持するようなものはどうするの?
75 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 12:56:54 ] つStateT
76 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 12:59:16 ] ストリームとか使うんでない?
77 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 13:07:42 ] 結局状態を保存しないと無理なんじゃ
78 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 14:57:57 ] 実際の動作は状態を保存するようなことになるけど、 形式的にはステップごとに状態をバケツリレーしていく感じ。 手続き型 [状態0] -処理1-> [状態1] -処理2-> [状態2] -> ... 関数型 関数x(.. 関数2( 関数1(状態0) ) .. )
79 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 15:02:09 ] >>78 処理と処理の間に空白があるときは?たとえば入力してしばらくしてから修正するときとか。 その間はどっかに状態保持するよね?
80 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 15:23:44 ] Lispいじるときは関数=クロージャだから あまり「手続き型と真っ向対立」みたいなことは思わないなぁ 各関数が各環境を持っているわけで
81 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 15:29:31 ] >>79 引数として状態が渡される。 関数nは状態を変更する処理と思えばよい。 入力してしばらくしてからと言う場合はその間に状態を変更する関数が実行されていないか、 もしくは恒等関数( f(x) = x )が実行されていると考えてもよい。
82 名前:81 mailto:sage [2006/04/17(月) 15:34:24 ] >関数nは状態を変更する処理と思えばよい。 正確には関数nは状態を受け取って次の状態を返す関数。
83 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 15:37:35 ] >>81 状態を変更する処理が実行されない間は住所録?どこかに保持されるんじゃないんですか? オブジェクト指向なら普通 class AddressBook{ void Add(Address addr); void Delete(string key); } 見たいなクラスでシングルトンかなんかでアクセスされてインスタンスはひとつがずっと保持されるんだが。
84 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 15:40:18 ] >>83 引数として状態が渡されて、引数はその関数を計算する間定数として保持される。
85 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 15:46:00 ] >>84 いやだから、入力処理があるよね?で削除処理があるよね?その間どこに保持されるんですか?
86 名前:67 mailto:sage [2006/04/17(月) 15:50:05 ] >>85 そういうのは副作用で系外に・・・ って、そういうのは反則?
87 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 15:50:36 ] >>83 純粋でない関数型言語の場合は、普通にローカル変数を使う。 x = add_address(empty_address_book, "a"); print(x); // ここで何か別のことをやる。 x' = add_address(x, "b"); print(x'); 純粋な関数型言語ではいろいろ妙なことをやるけど、 結果的に似たようなコードになる。 そもそも、逐次処理は手続的に書くのが最善の事が多いから、 関数型言語でも手続的に書けるようになっている。
88 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 15:51:53 ] 純粋じゃない関数的プログラミングっつったら↓みたいなイメージあるけど間違ってる? AddressBookって変数を用意して AddressBook = CreateAddressBook(); AddressBook = AddAddress( AddressBook "Tokyo"); AddressBook = AddAddress( AddressBook "Osaka"); AddressBook = DeleteAddress( AddressBook "Tokyo"); みたいにしていくイメージがあるけどこれでいいの?
89 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 15:52:53 ] 「状態」っていうのを変数と値の組を記録したデータベースと考えて、 状態0はそれが空のものと考えると、 状態1 = {(住所録, {})} = 新しい住所録作成(状態0) 状態2 = {(住所録, {Aさんの住所})} = Aさんの住所追加(状態1) 状態3 = {(住所録, {Aさんの住所, Bさんの住所})} = Bさんの住所追加(状態2) 状態4 = {(住所録, {Bさんの住所})} = Aさんの住所削除(状態3) といった感じ。
90 名前:88 mailto:sage [2006/04/17(月) 15:53:03 ] リロードし忘れましたごめんなさい
91 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 15:55:12 ] >>89 結局そのいずれかの状態にあたるものはグローバル変数なり何なりアクセスできるところにおいてあるということ?
92 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 15:57:51 ] >>91 いや、その状態にアクセスする関数間を全部引数として引きまわすのが原則。
93 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 15:59:10 ] >>92 だとしたら、入力とか削除とかなにされるかわからないときはどんなコードになるんです?
94 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 16:01:31 ] >>93 >入力とか削除とかなにされるかわからない 意味が分からん。もうちょっと詳しく。
95 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 16:05:22 ] >>94 んーたとえばさっきの住所録みたいなやつ。 >>89 みたいなやつでおのおのの作業(A追加、B追加、A削除)の間にユーザーが行うまでに間がある場合
96 名前:92 mailto:sage [2006/04/17(月) 16:07:15 ] ごめん。>>92 は俺の勘違い。 >>89 にあるような「状態」はグローバルにあると考えていい。
97 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 16:11:32 ] オブジェクト指向だとデータとメソッドを一体化させるけど、関数型はそれをしないということ? あと>>96 のようにするならば、関数型の状態を変えないからバグが出にくいとかというのはそのばあいには適用されないということ?
98 名前:96 mailto:sage [2006/04/17(月) 16:15:47 ] 混乱させてすまん。>>89 の話は(俺が正しく理解してるなら)どちらかというと概念上の話 (あるいは実装の詳細)で、 「関数型言語のインタプリタを作る際にグローバルな状態を活用できる」位の意味に取ってくれればいい。 実際の関数プログラミングでは、データは全部関数間を引きまわす。
99 名前:96 mailto:sage [2006/04/17(月) 16:17:57 ] で、 >おのおのの作業(A追加、B追加、A削除)の間にユーザーが行うまでに間がある場合 だけど、>>87 の説明で分からないところはあるか?
100 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 16:23:28 ] >>95 要するに並列処理の場合でしょ。 ちょいややこしいけど、処理のリストを2つ考えてそれを適当に混ぜて1つのリストにしてしまうものを考える。 処理A : abcdef 処理B : ABCDEF 混ぜたやつ : aAbBCcDdeEfF そして混ざったやつを先頭から順に、 状態1 = a(状態0) 状態2 = A(状態1) ... 状態n = F(状態n-1) のような感じに計算する。
101 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 16:24:03 ] >>99 >>87 でわからないところは特にないです。 が、プログラム全体の構造がやっぱりいまいち理解できてないかな・・・
102 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 16:28:31 ] 自分はハッカーと画家で言われてたようなLISPのきわめて高い生産性に興味があったんだがそれは>>9 でいわれてるようなもので可能なものとはまったく異なるものなの?
103 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 16:30:07 ] LISPはプログラミング言語じゃありません
104 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 16:40:14 ] >>103 LISPがプログラミング言語って書いてあるのはどのへんですか?
105 名前:96 mailto:sage [2006/04/17(月) 16:46:54 ] >>101 例えば、対話的に追加と削除が出来る住所録のCUIあぷりはこういう感じに書ける。 void loop(address_book book) { command c = get_command(); if(is_remove_command(c)) loop(remove_address(book, command_value(c))); else if(is_add_command(c)) loop(add_address(book, command_value(c))); else if(is_show_command(c)) { print_address_book(book); loop(book); } } int main() { loop(empty_address_book()); }
106 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 16:59:29 ] >>105 そうかくと手続き型と何もかわらんねぇ。
107 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 17:20:02 ] >>105 最後のifに対応するelseがないのはまずくない? まぁ、 else loop(book); でもつければいいだけのことだけど。
108 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 20:20:54 ] >>66 レコード型で表現可能 関数型言語でオブジェクト指向はできるかどうか、という質問は非常に多いね。 関数型言語のスレには是非テンプレに入れておいてもらいたいな。
109 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 22:59:13 ] ステートマシンみたいな状態の保存必須の事を関数型言語でどうやって表現するの? 結局(setq hoge (func fuga))なの? というか状態の保存って概念は関数型とか以前な話でFA?
110 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 23:11:09 ] >>109 普通に表現できる。 type StateMachine = Input -> (Output, StateMachine) 言い替えると、 「ステートマシンとは、Inputを引数に取って、Outputとステートマシンを返す関数である」 とする。
111 名前:デフォルトの名無しさん mailto:sage [2006/04/17(月) 23:57:30 ] >>109 だから、チューリングマシンでできることはλ計算でできるんだって。 C言語やJavaのような代入型言語でできて関数型言語でできないことはないの。
112 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 00:16:06 ] 保守性とか可読性とかまったく違うところ目指してる?
113 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 02:54:34 ] はい
114 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 03:25:07 ] 関数型の利点 www.sampou.org/haskell/article/whyfp.html
115 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 10:49:46 ] 代入型言語でプログラミングするなら、レジスタ、CPUキャッシュ、物理メモリの状態を 把握できるようになるべき。それをして初めて関数が多言語並みの厳密なプログラミングができるようになる。 代入型言語でプログラミングしてるやつはやってることがいい加減なくせにそのことにあまりにも無頓着すぎ。
116 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 10:52:02 ] >>115 > 代入型言語でプログラミングするなら、レジスタ、CPUキャッシュ、物理メモリの状態を > 把握できるようになるべき。 それはアセンブリ言語やらC言語などの比較的低級言語の場合だけ。 高級なプログラミング言語では、そういった低レベルなことを忘れても良いように作られるべきなんだよね。
117 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 10:58:46 ] >>116 >高級なプログラミング言語では、そういった低レベルなことを忘れても良いように作られるべきなんだよね。 これはドキュンコーダー向けの愚民化コピーだろう。こんなの真に受けてどうするw
118 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 11:01:20 ] >>115 >関数が多言語並みの厳密なプログラミング 具体的にはどういう事? 「物理メモリの状態」というのも具体的に何を指しているの?
119 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 11:03:51 ] >>115 日本語でおk
120 名前:無知蒙昧 [2006/04/18(火) 11:07:22 ] www.sampou.org/haskell/article/whyfp.html この文章では、説得力ゼロじゃんとか感じた無知蒙昧なオイラにだれかご教授いただけると幸いです。 ここに書いてあるメリットは、最近はC#でもJavaでもPerlでも容易かつスムーズにできると思うんですが。 high-orderはC#の匿名メソッドで。 遅延評価はデザインパターンで。 もちろん、シンタックスは、関数型のが美しいし、可読性もよいけど、 この文章からだと、そんな劇的に生産性が異なるほどとは、ぜんぜんピンときません。 自分でdynamic arrayのクラスを切って、それでLISPのmap関数やapplyに ラムダ式を渡すような感じで匿名メソッド(クロージャっぽい機能もある)を 渡すように記述することで、極力foreachやforを使わないように書く癖がついてますし。 つまり、それらをデータ構造定義と数式で書き直したとしても、 大して違いはないようなやたらと宣言的に「見える」コーディングスタイルなわけなんですが。 状態云々とか、宗教じゃなくって、関数型言語だと、具体的に、どうしてこれよりも ずっとソースコード量が減るのか、そこを教えて欲しいです。
121 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 11:07:34 ] >>117 曰く、「俺は凄いコーダなんだぜ」
122 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 11:10:04 ] >>120 代入文って冗長でしょ?
123 名前:& ◆9EVNtil89o [2006/04/18(火) 11:22:41 ] 冗長な代入文なんて、そもそも書いたりしませんよ。 LISPだって、ラムダ式が長くなりすぎなときは、 普通にdefunして、式をsymbolにbindするじゃないですか。 そういう風に式をブロック化することで可読性と再利用性と デバッガビリティーが向上するからです。 ぼくがC#で代入文を使うときも、それとほとんど同じような感覚で使うんですよ。 つまり、長くなりすぎた式を、部分式に分割して、それに名前をつける目的で、 それを変数に代入する。 だから、結局、それをhaskellに置き換えたとしても結局、やはりその 代入文の右側にある式は、haskellの右側の式とほとんどおなじになっちゃうし、 haskellの左側にある関数名は、C#の変数宣言とほとんどおなじになってしまい、 ソースコードの見た目はほとんど変わらない。
124 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 12:11:01 ] C#とかだと変数の型宣言が必須だから、型推論してくれるHaskellと比べるとその分冗長になるとは思うが、 同じ物を同じようなやり方で書くのなら見た目がほとんど同じになるのは当然でしょう。
125 名前:無知蒙昧 [2006/04/18(火) 12:18:57 ] 型推論自体は、関数型言語とは関係ないですよね。 だって、手続き型なのに型推論機能のついている言語はありますよね。 Pythonとか。 C#の次のバージョンからは、型推論機能も少しは入るらしいし。 「同じものを同じようなやり方で書く」と言っているのではなく、 「より少ないソースコード量やシンプルな表現で記述しようとするにも関わらず、 避けがたい結果として、同じようなソースコード量や表現になってしまう」 ことを問題としています。
126 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 12:39:24 ] 関数型言語なら短くなる、じゃなくて、 lisp的なマクロがある言語なら短く書ける、じゃねーの?
127 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 13:03:46 ] 短さならPerl最強
128 名前:& ◆nF6VLM6wpw [2006/04/18(火) 13:10:48 ] 実感値としては、中規模以上のプログラムだと、 「短さならPerl最強」は完全に間違いだと思う。 「lisp的なマクロがある言語なら短く書ける」は結構 実質的には当たっているが、関数型言語の話とは関係ない。 だって、LISPマクロと同等の機能を手続き型言語に入れれば それで済んじゃう話だもん。
129 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 13:20:19 ] .NETで使える関数型ってあるの?
130 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 13:21:57 ] Pythonは動的型付けであって、型推論ではないでしょ。
131 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 13:24:58 ] 純粋関数型+変数への代入機能(状態保存機能)=手続き型 っていう認識でおk?
132 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 13:37:13 ] >>128 それを言っちゃおしまい。 「関数型言語なら短く書ける」は結構実質的には当たっているが、本質的ではない。 だって、関数型言語と同等の機能を手続き型言語に入れればそれで済んじゃう話だもん。 でも、ほいほい何でもかんでも入れちゃうのは文法とかの整合性が取れなくなったりしてまずいと思う。
133 名前:デフォルトの名無しさん [2006/04/18(火) 13:54:52 ] >.NETで使える関数型ってあるの? つ d.hatena.ne.jp/akiramei/20040305 Haskell、もStandardMLも、LISPもありますよ。
134 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 14:08:37 ] >>131 たぶんおk
135 名前:デフォルトの名無しさん [2006/04/18(火) 14:19:55 ] >>134 でたらめ言うな。
136 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 15:32:24 ] 関数型ってのは関数に値を渡して返ってきた値をまた他の関数へ渡す。このようなスタイルでプログラムを書いていく言語を関数型と言って,代入はあまり使われない。 純粋って言われるのはホントに関数と関数との組合せでプログラムを組み,代入を使わない。又は,代入が使えない。 命令型ってのは変数の値を代入により変えていくようなスタイルでプログラムを書くための言語。 別に関数型だからと言って命令型のプログラムが作れないわけではない。同様に命令型の言語でも関数型プログラミングは可能。 ただ,設計の目的が異なるため関数型ように設計された言語は関数型のプログラムを書き易い。
137 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 15:57:48 ] C 言語だとカリー化とかがなぁ。 こんな風にゴリ押しできないこともないみたいだけど、 何だかなぁ。 ttp://nicosia.is.s.u-tokyo.ac.jp/pub/essay/hagiya/h/curry
138 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 16:14:00 ] ハギヤ先生って今のC++についてはどう思ってるんだろ
139 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 16:33:10 ] カリー化もそうだが、ラムダはもっと深刻かも。 GCC の内部関数を利用すれば、 近い事はできなくもないが・・・。
140 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 16:55:38 ] boost:lambda も面白いな
141 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 18:08:59 ] >>136 純粋な関数がたって状態の管理どうするの?
142 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 18:57:15 ] >>141 >>110 みたいにするのでは?
143 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 19:15:50 ] >>141 んー代入と何が違うのかわからん・・・orz
144 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 19:20:14 ] すべての処理を const への参照を取って const への参照を返す って書き方にしたら、関数型言語っぽくなる?
145 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 19:20:32 ] 状態を扱うときに代入スタイルと大差なくなるのは自然じゃないか?
146 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 19:22:14 ] >>145 は>>143 へのレス
147 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 20:35:40 ] >>144 「ほとんどすべての変数を const」 にすると相当それっぽくなる。
148 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 20:46:11 ] >>147 関数内部の一時的な自動変数もだめ? もちろん副作用は起こさないようにして。
149 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 21:01:59 ] 処理速度は関数型の方が速いの? 代入行わないからなんとなく速そうなんだけど。
150 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 21:03:54 ] >>149 の真ん中あたり ttp://www.unixuser.org/~euske/doc/python/python-lisp-j.html
151 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 21:09:21 ] >>148 お遊びだから自分が満足できるだけやればいいんじゃない? とりあえず for (int i = 0; i < 10; ++i) が禁止になるだけでも結構楽しいよ。
152 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 21:11:26 ] >>148 >関数内部の一時的な自動変数もだめ? 関数型の特徴(利点・欠点)はそういう小規模なレベルで特に顕著だと思う。
153 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 21:13:21 ] >>151 それくらいだと、末尾再帰の最適化を期待して書くのと あんまり変わらないかな
154 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 21:36:18 ] (define true (lambda (x y) x))) (define false (lambda (x y) y))) (define if (lambda (x y z) (x y z)))
155 名前:デフォルトの名無しさん mailto:sage [2006/04/18(火) 23:07:44 ] >>154 はいはい、λ式があれば条件分岐もできるってことね。
156 名前:デフォルトの名無しさん mailto:sage [2006/04/19(水) 00:41:05 ] Smalltalkもifがないよね。
157 名前:デフォルトの名無しさん mailto:sage [2006/04/19(水) 00:44:11 ] 参照透明性(同じのを渡せばいつも同じ答えが返ってくる性質)が保たれていると,コンパイル時の最適化がしやすいから,速くできる。 その分,代入があるといつも同じ状況に応じ答えが違うから,コンパイル時にコードを書き換えたりするような最適化がしにくい。あまり速くできない。
158 名前:デフォルトの名無しさん mailto:sage [2006/04/19(水) 01:20:41 ] 巨大配列を扱うような数値計算って 純粋関数型で扱えるの?
159 名前:デフォルトの名無しさん mailto:sage [2006/04/19(水) 01:41:58 ] >>158 苦手かもしれないけど、出来ないことはない。 基本的に、手続き型言語で表現できることは (破壊的代入も含めて)純粋関数型言語でも表現できる。 例えばHaskellでは、普段使う変数は変更不可だし、普段使う関数に副作用はないけど、 効率よく変更可能な「変数もどき」や副作用つきの「関数もどき」がある。
160 名前:デフォルトの名無しさん mailto:sage [2006/04/19(水) 03:50:11 ] >>159 なるほど。 やっぱそのあたりは 如何に純粋関数型言語と言えども 使えるようにはなってるんだ。 ただ、一工夫してあるということやね?
161 名前:デフォルトの名無しさん mailto:sage [2006/04/19(水) 17:34:28 ] >>159 :.:.:.:.:.:.:.:./ / 丶、 :.:.:.:.:.:/,/ \ ヽ 、 \ :.:.:.:/ / \ ___ ヽ \ i :.:.// l , ヽ-弋 ヽ ヽ \ l V/ l l ,-A-、 ハ lヽ l l l. / l l ,r Ti l ヽ l ヽl ヽ l / / l l / / l l ヽ l l / / ,l /. ! l、 / l! l / ,rー 、l/| れ /l/ | '、 / ,ィ‐-、 l/ '´ k´/ /:.:| 、_ \', / / /// 'i \:.:| もうだめだー :.:l' - 、_ \ / } ヽ| :.:|: :| ( ( ̄´ /// _ , -ァ ノl || 、.|: :ゝ、__ -ヽ、 l´ ノ /l l. || . || l: :'ー ' ' - 、 'ー ' , イ : : l l. || /|| . :l: : : : : : : : : ィー' ェ、 -----r ' l´ ヽl.、: :! l || . ||. : l: : : : : :, -‐‐' ノ  ̄ 7、 /ヽ lヽ:.:.:.:.´ ヽl ヽ|| : ||: :l: : : :r' ´:.:.:.:.:.:.:.:.:\ / Y┐ヽl |:.:.:.:.:.:.:.:.:.:´'、.|| : || l: : ,ィ':.:.:.:.:.:.:.:.:.:..:.:.:.:.:.:ヽ/ l l /:.:.:.:.:.:. _ /', ||ヽヽ : ||l: : : >、_:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.ヽ、 l l /, -ー 'i ´._,ノ' ||: :|ヽゝ : ||: : : :ト、 / ー t---y--ーi‐‐‐i\/ヽ,-'ー ' ´ / lヽ、 誰かHaskellを2次元化してください。
162 名前:デフォルトの名無しさん mailto:sage [2006/04/19(水) 22:16:31 ] >>161 ttp://pggirls.asukaze.net/index.php?%B2%E8%C1%FC%2FHaskell%A4%BF%A4%F3
163 名前:デフォルトの名無しさん mailto:sage [2006/04/19(水) 22:48:25 ] 神さまありがとう ぼくに友達をくれて Haskell に会わせてくれて Haskell に会わせてくれて ありがとうぼくの友達 Haskell に会わせてくれて
164 名前:デフォルトの名無しさん mailto:sage [2006/04/19(水) 22:57:37 ] Haskellたんはツンデレですか?
165 名前:デフォルトの名無しさん mailto:sage [2006/04/19(水) 22:58:14 ] Haskell で射精した。
166 名前:デフォルトの名無しさん mailto:sage [2006/04/20(木) 21:46:32 ] >>163 元ネタの悪党が友達ってのもすげぇ詩だよな
167 名前:デフォルトの名無しさん [2006/04/20(木) 23:49:33 ] 保守の都合でここにカメムシ置いときますね ,. .._ / プ〜ン \ __,! 〕-`ー;、 」`;{ヾ ̄.} l'_ _/~| \l }=、 <ヽ/ `i/ \._ _)
168 名前:デフォルトの名無しさん mailto:sage [2006/04/21(金) 10:40:15 ] 何でカメムシなんだよ?
169 名前:デフォルトの名無しさん [2006/04/21(金) 11:36:55 ] カメムシってなんとなくラムダに見えなくない?
170 名前:デフォルトの名無しさん mailto:sage [2006/04/21(金) 11:50:14 ] 岩手の喧嘩祭といえば、六尺褌一丁の男達が、神輿を担いでぶつかり合う、 勇壮な祭として、この地方に知られている。 祭のあと、男達は集会所に集まり、普段着に着替え、飲み合う。 六尺は、激しい祭でドロドロボロボロになるから、使い捨てで、ゴミとして出される。 俺はいつもそれが狙いだ。 捨てられている六尺の、できるだけ汚れてる奴を10数本ほど、 こっそりさらって家に持ち帰る。 そして、深夜、俺一人の祭が始まる。 俺はもう一度汚れた六尺のみ身に付け、部屋中にかっさらってきた六尺をばら撒き、 ウォーッと叫びながら、六尺の海の中を転げ回る。 汚れた六尺は、雄の臭いがムンムン強烈で、俺の性感を刺激する。 前袋の中のマラは、もうすでに痛いほど勃起している。 六尺の中に顔を埋める。臭ぇ。 汗臭、アンモニア臭や、股ぐら独特の酸っぱい臭を、胸一杯に吸い込む。溜まんねえ。 臭ぇぜ、ワッショイ! 雄野郎ワッショイ!と叫びながら、前袋ごとマラを扱く。 嗅ぎ比べ、一番雄臭がキツイやつを主食に選ぶ。 その六尺には、我慢汁の染みまでくっきりとあり、ツーンと臭って臭って堪らない。 その六尺を締めてた奴は、祭で一番威勢が良かった、五分刈りで髭の、40代の、 ガチムチ野郎だろうと、勝手に想像して、鼻と口に一番臭い部分を押し当て、 思いきり嗅ぎながら、ガチムチ野郎臭ぇぜ!俺が行かせてやるぜ!と絶叫し、 マラをいっそう激しく扱く。 他の六尺は、ミイラのように頭や身体に巻き付け、 ガチムチ野郎の六尺を口に銜えながら、ウオッ!ウオッ!と唸りながらマラを扱きまくる。 そろそろ限界だ。 俺は前袋からマラを引き出し、ガチムチ野郎の六尺の中に、思いっきり種付けする。 どうだ!気持良いか!俺も良いぜ!と叫びながら発射し続ける。 本当にガチムチ野郎を犯してる気分で、ムチャクチャ気持ち良い。 ガチムチ野郎の六尺は、俺の雄汁でベトベトに汚される。 ガチムチ野郎、貴様はもう俺のもんだぜ! 俺の祭が済んだあと、他の六尺とまとめて、ビニール袋に入れ押し入れにしまい込む。 また来年、祭で六尺を手に入れるまで、オカズに使う。 押し入れにはそんなビニール袋がいくつも仕舞ってあるんだぜ。
171 名前:デフォルトの名無しさん mailto:sage [2006/04/21(金) 14:32:14 ] (´・ω・`)誤爆 (´・ω・`)ぶち殺すぞ
172 名前:デフォルトの名無しさん [2006/04/21(金) 19:00:46 ] ,,、 - ー― ー- 、 、- ' ~::::::::: ;;;;;;;; ~''-、 おいお前! , ''~; ; ;;;;;;;::::::::::::::::::::::;;;;;;;;;;;; ;;;;ヽ ,、 r";; ; ;;;; ;;;; z;;;;;;;;:::::::::::::::;;;;;;;;;;;;;;;; ;;; ヽ i;;| r';;;;;; ;;;;rr'((t"t、;;;、 - ーー 、;;;;;_;;;;;;、;;;;;;;; t スレの名を言ってみろ! |;;;| ';;;;;;;;r';(;;ヽ,、-;;'''";;、、、;;;;;;;;r'"ii 」ー 、)'yヽ、i |;;; | i;;;;、i~t''o't;;;;;;;;≪,,,。,~'ヽ;;ノ ;ii i;;、、,;;~',、'ソ ) |;;;;; | i ;;;t'、、o「"`'ー ''"~~~~~~,,,,、::-';;; ~'-ゝ;;ヽ。ソ . |;;;;;; | | ;;'t、ァo)ー- ''"r'' ,、":::: r'、~~~;;; ~'';;- 、''"*i/ |;;; t, |;;;;;;;; |. | ;;;;t,ュア;;;;::://',, i;;i ::::: i;;;i ::;;;リ~i :: ::~'ア,,ノ 、、 ,,,,,,, |;;;; t |;;;;;;;; | | ;;;;;;;t't;;:/;;/;、 ', i;;i :::: |z;i ; リ;;i :::リリ : 〉j ;;;;;;;;;;;;;;;;~~~~~ヽ''''''' 、,,,,|;;;; h:ヽ |;;;;;;;; :: |. | ;; ;;;;;;i/;;; /i;;;t,、. i;;i ::: |ニ| ;;;;/ョリ :/;/::/::/ """"""""""''ヽ;;;;;ヽ;;;;~ '' ー`、 ,,,,,,,,,|;;;;;;;;;;;; | i,,;;;;;;/;;;;:::/::t/リi |;;i :: |;;;i ;; /;;/ ://:::/ / ,,,,,,,,,,,,,;;;;;;;;;;;;:::::::::::t;;;;;;;t;;;;;;;;;;;;;;;;;;~' 、二、,,~~~::''''ー- 、,,ノ;;;/;;;;:::: /ー'"'' ,イi |;;;t__i;;t ;;/;;/: //::/ i,r'| /i ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|;;;;;;;;i ::::::::::::;;;;;;ヽ;:::::~'' ,,z、::,,,:::::;>'";;;;;::::: /、、;;;;/:: ̄::::::::::::::~":::ヽ''〈::/ ''" ,/ /; |
173 名前:デフォルトの名無しさん mailto:sage [2006/04/21(金) 21:35:24 ] 今、lispを少し勉強したけど、たいして違いがわからん。 関数形式で表すだけで、やっていることは同じように感じる。
174 名前:デフォルトの名無しさん mailto:sage [2006/04/21(金) 21:51:06 ] >>173 ははは、奇遇だな 俺もFortranとCの違いがわからないんだよー
175 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 00:05:38 ] 俺もvbとjavaの違いが分からん
176 名前:デフォルトの名無しさん [2006/04/22(土) 00:56:46 ] おらはC#とJavaの違いがわからん
177 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 02:40:55 ] 俺はひまわりとなでしこの違いが分からん。
178 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 03:16:22 ] >>173 Common Lisp はマルチパラダイムな言語だからね。 違いを感じたいなら Scheme やった方が良いかと。
179 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 03:17:00 ] ネスカフェとマキシムの違いが分からんが、言語は処理系の違いにもうるさい(やかましいだけ)
180 名前:173 mailto:sage [2006/04/22(土) 10:19:36 ] もしかして、何を皮肉ってるか理解されてない?
181 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 12:13:28 ] >>180 もしかして、何を皮肉ってるか理解されてない?
182 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 12:18:03 ] みんな、きもちいいことしてる?
183 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 12:34:28 ] まあ、俺が言いたいことはだな、Python最高
184 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 14:19:43 ] Python は関数型と手続き型のいいとこ取り?
185 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 14:25:10 ] >>184 全然違う
186 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 15:08:49 ] >>185 お前が全然違う
187 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 17:03:12 ] pythonはなにげにぼくらの期待の星
188 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 17:06:29 ] ここで空気を読まずにHSP!HSP!HSP!
189 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 18:14:13 ] 戯言を皮肉とは言いませんね。
190 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 19:00:43 ] 関数型言語はたしかにアルゴリズムを簡潔に表現できる。 が、パフォーマンスを気にしてチューニングすると プログラムが手続き型言語っぽくなってしまう。 機械語自体が手続き型言語だから。 ならはじめから手続き型言語でいいじゃんって思う今日このごろ。
191 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 19:05:34 ] ラムダ計算を効率よくできるラムダコンピュータを作ってください
192 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 19:18:34 ] >>190 それって disassemble とかして検証してるの?
193 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 19:29:00 ] 完璧な処理系が作れることを前提とした言語
194 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 19:50:15 ] >>191 関数型言語の歴史=如何にλ式を現行マシンで効果的にコンパイルするか じゃないの。
195 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 20:04:43 ] >>194 関数型言語の歴史 ではなくて、 関数型言語の実装の歴史 でしょ。
196 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 22:57:29 ] >>184 それはRubyの話。
197 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 23:03:38 ] >>178 Schemeですか。 了解。
198 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 23:13:58 ] 純粋じゃない関数的プログラミングについて書いてるいい本って何かない? とりあえず onlisp は読んだ。
199 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 23:23:46 ] 関数型言語と関数言語ってくべつして呼称すべきですよね?
200 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 01:38:42 ] >関数言語 はつみみです
201 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 07:35:52 ] 関数言語って何ですか?
202 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 10:26:42 ] 俺が最初にC言語の勉強をしたとき(もう15年以上前だけど) 「C言語は関数型言語だよ、関数言語じゃないよ、 あくまで「関数型」だよ。関数の形をしているけど、 同じ引数を与えたからといって同じ結果が得られるとは 限らないでしょ?だから関数じゃない。関数の形をしているだけ。 これに対して、世の中には本当の関数言語というのがある。」 と説明してあった本がありました。
203 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 10:37:53 ] >>202 晒しキボン
204 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 14:32:20 ] その基準で言うと、Haskellみたいなのが「関数言語」っつー事?
205 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 15:48:13 ] 「C言語」と言ってる時点で駄目本決定。
206 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 15:56:08 ] >>202 つーことは関数型言語には現在の時刻を返す関数はないんだな?
207 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 15:58:48 ] 確かに昔はそんな本がゴロゴロしていたな。 さすがに今はそんな本は見かけなくなった。 google で検索をかければ、それが嘘か本当かすぐ分かるもんな。 いい時代になったもんだ。
208 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 16:01:21 ] あるよ。 f(x) = x
209 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 16:02:00 ] >>205 void乙
210 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 16:45:41 ] 作って分かるCプログラミングは隠れた名著
211 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 21:41:40 ] なんで「C言語」と言ったらダメなのか分からんのだが。
212 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 22:13:53 ] >>210 ほんとに隠れてるよな
213 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 22:20:16 ] >>211 BASIC言語 C#言語 C++言語 Pascal言語 Java言語 Javascript言語 FORTRAN言語 Perl言語 Ruby言語 Python言語 Lisp言語 OCaml言語 Haskell言語 Prolog言語
214 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 22:27:55 ] >>213 それと同じことだろ? 多少不恰好なだけであって、 そんなんでダメと言い切る理由が無い。
215 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 22:32:00 ] 隠れて分かるCプログラミング
216 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 22:33:19 ] homepage3.nifty.com/catfood/up/src/up4748.txt www.google.com/Top/Computers/Programming/Languages/ ここに出ている言語を、関数型と、手続き型に分類してください
217 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 22:43:54 ] >>216 「論理型」とかはどうすんのさ?
218 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 23:21:04 ] >216 一通り読んで言語名でないものは取り除けよ。 マークアップ言語もな。
219 名前:デフォルトの名無しさん mailto:sage [2006/04/24(月) 10:23:58 ] >>214 誰も言ったらダメなんて言ってないんだが。
220 名前:デフォルトの名無しさん mailto:sage [2006/04/24(月) 13:08:01 ] >>219 >>205 "C"だと短くて日本語の語感としてあわないからなんだろうな。
221 名前:デフォルトの名無しさん mailto:sage [2006/04/24(月) 13:59:31 ] C言語って全く違和感がない。 当方、38歳。
222 名前:デフォルトの名無しさん mailto:sage [2006/04/24(月) 14:55:01 ] 私も違和感ない。 当方、21歳。
223 名前:デフォルトの名無しさん mailto:sage [2006/04/24(月) 14:57:52 ] 同じく違和感ない。 当方、27歳。
224 名前:デフォルトの名無しさん mailto:sage [2006/04/24(月) 15:58:49 ] for文に違和感あり。 当方、20歳
225 名前:デフォルトの名無しさん mailto:sage [2006/04/24(月) 18:10:13 ] さらにボケて
226 名前:デフォルトの名無しさん mailto:sage [2006/04/24(月) 18:32:04 ] 高子さん、晩ご飯はまだかいの
227 名前:デフォルトの名無しさん mailto:sage [2006/04/24(月) 18:42:30 ] さきほどお召しになりましたでしょ。
228 名前:デフォルトの名無しさん mailto:sage [2006/04/24(月) 23:46:57 ] Cってまだ経験無い 当方、37歳。
229 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 00:00:13 ] Cに満たない人も多いので油断は禁物でーす
230 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 00:30:41 ] 中括弧{}だらけに違和感あり。 当方、32歳。
231 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 00:54:31 ] Lisper?
232 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 01:40:27 ] Delphian?
233 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 02:42:41 ] Haskeller?
234 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 06:02:55 ] 実はコボラーだったりして。
235 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 10:59:22 ] こぼちゃんは手続き型? 世代が違うので分からん
236 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 14:22:54 ] コボルはデータ指向型という感じだなぁ。
237 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 14:43:13 ] >>236 データ指向型って何ですか? ん〜なかなかイメージ湧きません。
238 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 15:44:01 ] SQLとか
239 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 17:45:18 ] >>238 データの集合に対する関係を構築してプログラムを作成するって感じ?
240 名前:デフォルトの名無しさん [2006/04/25(火) 20:48:49 ] C#でのカリー化って、こんな感じでOK? List<int> l1 = getList(); int x = calcX(); List<int> l2 = l1.map(delegate(int y){add(x,y);}); 移植性もあるし、そんな複雑にもなってないというか。
241 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 20:53:30 ] >>240 言いたいことは分かるが、それを指してカリー化と言うのは誤用じゃないだろうか。
242 名前:241 mailto:sage [2006/04/25(火) 20:57:05 ] 説明不足だな。 add(x)(y)という形でaddを使えるように定義するのがカリー化で、 >>240 みたいなのは「関数の部分適用」というはず。
243 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 21:01:24 ] >>206 ねーよww
244 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 21:12:00 ] Concurrent Cleanにはあるが。
245 名前:デフォルトの名無しさん [2006/04/25(火) 23:17:36 ] カリー化のカリーはハスケル・カリーのカリー だからみんなHaskellをやるんだ!
246 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 23:59:22 ] とん汁作ってたら味付けが変になったんで 適当に香りの強めの香辛料がばがば入れてったら カリー化した
247 名前:デフォルトの名無しさん [2006/04/26(水) 00:20:48 ] VBプログラマ Cプログラマのお仕事 www.vb-c.net/
248 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 00:24:43 ] >>243 ^^;
249 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 01:27:01 ] カリー化使ったコードは遅い。 スピードが要求されるアルゴリズムの計算では避けるのが普通。 カリー化とはそういうもの。 わざわざHaskellに乗り換えてまで使うほどの価値はない。
250 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 01:30:34 ] カリー化でうれしいのは * 関数の再利用率が高まる * ソースコードの可読化向上 でスピード要求せずにコードの美しさを追求するならいいかもね。
251 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 01:36:07 ] Haskellって人にやさしいんじゃなくてコンパイラにやさしい言語なんじゃないかっておもた。 Haskellってほんとに使う人のことを考えて設計されてんのかな? 変数の名前付けとかインタプリタの対話性の難しさはきつい
252 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 01:38:33 ] せめてラムダ計算の何たるかを知ってから、関数型言語を語ってくれ。
253 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 01:54:43 ] >>252 λ計算が分からないと関数型言語を使っちゃいけないと?
254 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 01:57:12 ] 使ってもいいけど語っちゃいかんだろな。
255 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 01:59:38 ] >>254 λ計算まじめにやってないから資格ないかぁ。 全ての計算がλ式で表わせるってのがλ計算? まぁλ計算って何だといわれて答えられないから簡潔に教えてください。λ計算って何?
256 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 03:47:10 ] >>251 コンパイラにやさしいって事は無いんじゃないの。 コンパイル遅いらしいし、文法もかなり人間向きな感じ。
257 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 05:59:21 ] 遅レスだが、CをC言語って呼ぶのは検索し辛いからだと思ってた… 考えてみりゃCってWeb普及前からあるんだっけ。
258 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 08:34:24 ] お前が生まれる前からあるよ
259 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 11:39:09 ] >>255 ・変数はλ式 ・M,Nがそれぞれλ式なら(MN)もλ式 ・xが変数でMがλ式なら(λx.M)もλ式
260 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 12:03:08 ] まぁ、興味があったら以下の本も読んでおくと良いよ(難易度は上から順、重要度は下から順) ・コンピュータサイエンス入門-論理とプログラム意味論 ・計算論-計算可能性とラムダ計算 ・The Lambda Calculus: Its Syntax and Semantics
261 名前:デフォルトの名無しさん [2006/04/26(水) 12:11:27 ] アマ向きだなハスケルは 速度はまあいいから簡単にスッキリ記述できてバグも高度に少なく 保守も容易で持続可能な発展を見込める ただし、言語自体理解するのに高度な知能を要求されるという矛盾も秘めている 頭はいいけど資産が無い奴向きかな?
262 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 12:15:07 ] 使う分には知識はそんなに要らないよ。 使うための環境をそろえている、まさにその段階が現状なんだから、もう少し待たないとね。
263 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 13:25:57 ] ,、==-,.、 -- 、.. -- 、 / __/-‐`:.:.:`~:.:.:.:.‐:`ヽ ,r/´: . /: . /: . : . : 、: . :`ヾrz、 r‐r=7ーァ彡ソ:.:l:.:.:.:.:.:.ハ:.:'; .ヽ:.:.ヽヘ いやー 今日も湧いてますなあ / /{ {{ ´_r_´:;l.:‐+.、:..: /- l:、!:.:.:';:.ヾ: .:ヽ / \__>r:.T|ハ!ヽ| ヽノ ソハ:.:.:l:.:.:}:.:.:.:l / _/:l:.l!:.:l:| z==` ==ミ、j:ノ:.:/:.:.:.:.| / /ハ:.:.:|ヽ(.l::! 、 ノィ/|:.:.:.:!:| / / `;:ト {:人 「_ フ /:.:リ |::::.バ { ノノヘ、 ヾ ヾドヽ、_ _, イフジ j!ノ \ ヾー--r-、 ゙} ~´ {=、 ´ ´ ヽ、 ヘ ト| l  ̄{フ マヽ_ `丶 | ゙、'、 |r===、/ `ヽ `丶、 l トヽ `、 / /ハ ヾl!/ `ヽ、ヽ/___ ./l ! {__/ ̄テ{]≦-、 Y'´ | < ´_ハ ヽ \ } | lト、 /´/:;|: lヽ 〉' | //`ー`´ | |_ノ___r{:. | 〈」‐=、__ l| ==、 ハ |
264 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 15:17:19 ] λは単に基礎 ジェネリックを使ってどのように全体を構築するか考える方が大事
265 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 18:28:38 ] >>260 > まぁ、興味があったら以下の本も読んでおくと良いよ(難易度は上から順、重要度は下から順) Barendregtが一番易しいということ? あの電話帳を全部読むのはかなりの高難易度だと思うが。飛躍は少ないけど。
266 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 18:39:03 ] >>265 難易度は上から順 って言ったら、一番上に書いてあるのが一番易しいってことだろ・・
267 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 18:53:02 ] >>266 こういう場合高い方が上じゃね?
268 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 18:56:05 ] >>267 逆だとおも
269 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 19:05:25 ] 「以下は、難度について昇順、重要度について降順」 これが言いたかった事か?
270 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 19:15:55 ] 難易度順と言うと簡単な方から難しい方へ、 重要度順と言うと重要な方から重要じゃない方へ、 というイメージがある。
271 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 19:18:12 ] まぁ、そんなことはどうでもいいことだ。
272 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 19:37:48 ] >260は「重要度は下から順」を「一番下が一番重要」という意味で使っている。 これに基づけば、「難易度は上から順」は「一番上が一番難易」と解釈できる。 「一番難易」を「一番難」とみなすか「一番易」とみなすかが意見のわかれる ところだな。
273 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 19:43:41 ] まあ、紛らわしい表現なのは確かだな。 長くなっても、曖昧さを無くした表現を採るべきだな。
274 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 20:03:26 ] 自然言語だし、いいんじゃない?
275 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 20:06:45 ] コミュニケーションがとれればいいけどね。 とれてない以上、何とかした方が良さげ。
276 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 20:26:42 ] たとえば、時計回りを物理学では右回りというが、生物学では左回りだという。 常識的には時計回りは右回りだと思っている人が大半だろう。 新聞のような文章でも時計回りと右回りは同じ意味で使っているし、自然言語では社会通念としての「常識」というのが重要なのだろうね。 論文でもない限り、そんなに厳密にしなくてもいいじゃない。 どうでもいいけど。
277 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 20:37:48 ] で、その社会通念としての「常識」は 今回の場合存在するのか?
278 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 20:38:27 ] どうでもいいらしいのでスルー。
279 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 20:39:36 ] >>277 ムきになるなよ^^;
280 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 20:40:21 ] 本題からそれるのが好きな方が多いみたいだね。
281 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 20:45:09 ] >>280 ムきになるなよ^^;
282 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 21:20:55 ] >>272 ああ何となくわかる、 おいらは話の流れ的に260が言わんとすることを「基礎を大事に考えてくれ」と言う前提があるものと解釈したので難易度が上からってのを 「難しく専門向けであり、興味を持つのはよいがあまりその立ち位置じゃ重要視しないでよいよ」の意味にとってしまったのだな。 うむ、ニュアンスが伝わりにくい文字だけの会話って難しいね。
283 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 22:05:29 ] こういうときこそ、仕様記述言語Zの出番だろ。
284 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 22:11:59 ] >>249 カリー化すると遅くなるのって、関数をコール回数が増えるから? 素人質問でスマソ。
285 名前:デフォルトの名無しさん [2006/04/27(木) 22:20:50 ] もっと議論したまえ
286 名前:デフォルトの名無しさん [2006/04/27(木) 22:27:09 ] ,:::-、 __ ,,r 〈:::::::::) ィ::::::ヽ 〃 ,::::;r‐'´ ヽ::ノ ,'::;' /::/ __ l:::l l::::l /:::::) ,:::::、 ji |::::ヽ j::::l、ゝ‐′ ゙:;;:ノ ,j:l }:::::::ヽ!::::::::ゝ、 <:::.ァ __ノ::;! . {::::::::::::::::::::::::::::`='=‐'´:::::::::/ ';::::::::::::ト、::::::::::::::i^i::::::::::::/ `ー--' ヽ:::::::::::l l;;;;::::ノ `ー-" 【ラッキーコアラ】 このレスを見た人はコピペでもいいので 10分以内に3つのスレへ貼り付けてください。 そうすれば14日後好きな人から告白されるわ宝くじは当たるわ 出世しまくるわ体の悪い所全部治るわでえらい事です。
287 名前:デフォルトの名無しさん mailto:sage [2006/05/07(日) 02:54:27 ] template <class R, class A, class B> class curry2 { typedef R(*)(A, B) func_t; func_t _f; public: curry2(func_t f) { _f = f; } curry2_1<R, A, B> operator() (A a) { curry2_1<R, A, B>(f, a); } }; template <class R, class A, class B> class curry2_1 { typedef R(*)(A, B) func_t; func_t _f; A _a; public: curry2_1(func_t f, A a) { _f = f; _a = a} R operator() (B b) { _f(_a, b); } }; >284 コンストラクタ・コピーコンストラクタ合わせたら相当沢山呼んでる事になるな。 さらに途中引数を一時保存する_aみたいな変数も必要になる。 curry2_1の状態であっちこっちコピーし回るとしたらA=4バイトとしても 8バイト。
288 名前:デフォルトの名無しさん mailto:sage [2006/05/07(日) 14:41:16 ] 他スレで、手続き型の言語が全てだと思い込んで○○言語最高とか偉そうに語っている 椰子を見ると、さぶいなと感じる今日このごろ。 たくさんの言語をマスターしているつもりなら、Schemeぐらいは勉強してほしい。
289 名前:デフォルトの名無しさん [2006/05/15(月) 00:56:21 ] ラムダ計算ABC members.at.infoseek.co.jp/nbz/ref/lambda.html を読んでみて思った素朴な疑問 足し算、かけ算みたいなfのネストを増やす方向の演算が出来るのはわかるけど、 引き算みたいなfのネストを減らす方向の演算はどうやってやるんだろう。
290 名前:デフォルトの名無しさん mailto:sage [2006/05/15(月) 01:24:11 ] 他にもやりかたはあるかもしれないけど、俺が知ってるのは以下のもの。 まず、aとbのペアをλf.fabで表す事ができる。逆にペアpが与えられたとき、 第一要素はp(λxy.x)、第二要素はp(λxy.y)でアクセスできる。aとbのペアを(a, b)と略記する。 z = (0, 0) s (x, y) = (y, y+1) とすると、zとsはλ式で書ける。整数nについてnszはzにsをn回適用したもの、つまり (n-1, n)というペアであるから、この第一要素を取ることでn-1(n=0の時は0)が得られる。 ここまでの操作を関数化してnからn-1への関数predを書くことができる。すると n pred mでm-nが計算できる。
291 名前:デフォルトの名無しさん mailto:sage [2006/05/15(月) 03:02:48 ] >>289 Church numeric?
292 名前:デフォルトの名無しさん [2006/05/16(火) 03:26:56 ] >>290 なるほど、cons,car,cdrを使うようなイメージか。 たしかにそれならできそう。 いきなり疑問が解決したよ、感謝! >>291 だね。こういうのをチャーチ数っていうんだってはじめて知ったよ。
293 名前:デフォルトの名無しさん mailto:sage [2006/05/16(火) 03:32:29 ] 関数型ってλがらみの話をすることしかできない言語? 言語を使って何かをしようって感じがまったく感じられず ひたすら式について語っているのしかみたことないんだけど。
294 名前:デフォルトの名無しさん mailto:sage [2006/05/16(火) 03:34:37 ] >>293 こういうことをしてる人もいる。 ttp://www.geocities.jp/takascience/haskell/monadius_ja.html
295 名前:デフォルトの名無しさん mailto:sage [2006/05/16(火) 05:34:28 ] 現在の最新、最高の技術を使って、関数型(Lispとはいわない)マシンを 作ると、何か問題点があるのだろうか。
296 名前:デフォルトの名無しさん mailto:sage [2006/05/16(火) 05:42:25 ] >>293 どんな言語も計算をするために使うものですよ。
297 名前:デフォルトの名無しさん mailto:sage [2006/05/16(火) 05:49:22 ] ひたすらオブジェクトについて語っているだけの人も多いなあ。
298 名前:デフォルトの名無しさん mailto:sage [2006/05/16(火) 05:57:01 ] Rのつくアレかな
299 名前:デフォルトの名無しさん [2006/05/16(火) 07:53:04 ] 関数型に理解を示せない奴はプログラマとして正味期限が来ている アセンブリしかできないプログラマが今受けている視線と同じような物を 近い将来浴びる事になるだろう
300 名前:デフォルトの名無しさん mailto:sage [2006/05/16(火) 08:45:05 ] >>294 >Haskellでもどうにかゲームは作れるぞということは示せましたが、 実行してたら遅くなるとかいった、Haskellの仕組みをよく知らないと分からない問題はお手上げです。 もっともっとゲームを作りやすくする方法があるはず。 つぎは、みんなにまかせた! とか書いてある、やはりリアルタイム応答の分野(ゲームぢゃないぞ)には向かないのかねぇ。
301 名前:デフォルトの名無しさん mailto:sage [2006/05/16(火) 08:54:53 ] コンパイラの性能の問題じゃないの? 複数の演算装置を持つような構成に最適化するとなると関数型の方が楽になるかもよ PS3の方向が成功すれば関数型でなけりゃゲームには無理とか言われるかもね
302 名前:デフォルトの名無しさん mailto:sage [2006/05/16(火) 10:09:18 ] >>299 アセンブラ馬鹿にすんな
303 名前:デフォルトの名無しさん mailto:sage [2006/05/16(火) 11:26:29 ] まぁその都度言語覚えればいいだろな。 言語習得難しくないし
304 名前:デフォルトの名無しさん [2006/05/16(火) 15:53:55 ] >>302 しかできない事を馬鹿にしたのだが アセンブリは馬鹿にしてないよ
305 名前:デフォルトの名無しさん mailto:sage [2006/05/16(火) 18:18:55 ] 自分に向けられた刃を、他の「大物」に向けられたものであるかのように 無理矢理ねじ曲げて解釈し、そこから相手をドン・キホーテ的に捉えてみせるのは 割とポピュラーな逃亡術の一つです :-)
306 名前:デフォルトの名無しさん mailto:sage [2006/05/16(火) 19:22:56 ] example:○国人 ウリの主張に反対するのは世界平和に反対するも同然である。ニダ。
307 名前:デフォルトの名無しさん mailto:sage [2006/05/16(火) 21:15:21 ] 関数型とは人間にとってわかりにくい言語。 人間の頭の中は関数型ではない。
308 名前:デフォルトの名無しさん mailto:sage [2006/05/16(火) 21:41:32 ] それはそうだけど、手続き型はもっと脳の把握から遠い気がする。
309 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 02:48:30 ] >>308 同感
310 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 07:24:28 ] >>308 異感
311 名前:デフォルトの名無しさん [2006/05/17(水) 07:25:37 ] >>308 か・・快感 ♥
312 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 08:14:44 ] 人間の頭の中は人の言葉尻から自分の頭の中の 都合の良い一群の言葉引き出して口の前に置いて いるだけで、関数型でも手続き型でもなく、 唖然、呆然、論理型だ。
313 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 09:40:40 ] >>308 そーなの? プログラムって処理の連続になるので手続き型のほうが自然かとおもた(というより関数型よくわかってない)んだが。
314 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 10:23:18 ] 関数的プログラミングと手続的プログラミングのどっちか片方しかできない言語はうんこ。 逆にこのふたつを十分にサポートしているならコアがどっちかとか副作用を認めるかなんてのは些細な問題だろ。
315 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 12:36:53 ] 人間の脳はニューロンの複合的な作用によるものだからそのどちらでもない
316 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 12:49:20 ] 思考には副作用があるから関数型じゃなくね?
317 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 12:59:22 ] >>316 たとえば、表面的な作用からプログラミング言語の種類を判定できるか、君は。
318 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 13:13:31 ] 頭が悪いまま議論めいたことがしたいからって トンデモ抽象論に走らなくていいから>そのへんの子
319 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 13:20:45 ] なんか同類スレに湧いてるやつがいるな
320 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 14:27:42 ] >>308 俺は関数型のプログラムの方が読みやすくて好き。 記述がアルゴリズムの意味そのものに近いから分かりやすい。 手続き型だとアルゴリズムを構築するような感じになるから、記述と意味が離れてしまっていて 内容を理解するのに苦労する。 関数型の楽さに慣れてしまうと、手続き型には戻れなくなる。
321 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 14:47:17 ] プログラム、と言われて、UIやらネットワークIOやらを思い浮かべるひとと、 自明でないアルゴリズムの実装を思い浮かべるひととの間で、話がかみ合ってない気がする。
322 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 14:49:59 ] .NETばかりやってるんだが、それと絡められる関数型言語ってないでしょうか?
323 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 14:54:13 ] >>322 よく知らんのだが、F#なんてどうよ。
324 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 14:57:33 ] 主観的な話はどうでもいいよ
325 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 15:07:10 ] どうでもいいという主観が書くほど大事なこととは思えません ;-)
326 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 15:46:42 ] 普段は C++ と Java とアセンブラで組み込みを少し。 それ以外の言語は Emacs Lisp と PHP と Perl。 な俺が仕事抜きで関数型言語を理解したいと思って来ましたよ。 Windows で遊べる処理系ってどれ? できればサンプルが多い処理系の方がありがたいです。
327 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 16:06:48 ] Cygwin 入れりゃ大抵の処理系は使えると思うけど、 とりあえず GHC (Haskell) を勧めとこう。
328 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 17:04:13 ] >>326 >それ以外の言語は Emacs Lisp と PHP と Perl。 うえ、キモい
329 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 17:26:49 ] 人は実際にやってみて手順を確認しながら自分のやってることの意味を理解するんだと思います>< もしくは結果が出て初めて自分のやったことの意味を理解するんだと思います>< 最初に全ての意味を理解してから行動してる人なんていないと思います(>_<) 関数型言語が扱い難いのはそれなりに理由があるんだと思います><
330 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 17:31:09 ] >>328 m9(^д^)プギャー!!
331 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 17:32:26 ] Rの付くあの言語を入れないと、信者達に煽られちゃうよ!気をつけて!
332 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 18:21:08 ] という、Rの付くあの言語のスレで叩かれた>>331 さんのコメントでした なんてな
333 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 19:23:31 ] 何故分かった!
334 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 23:16:13 ] Rython
335 名前:デフォルトの名無しさん mailto:sage [2006/05/18(木) 01:47:20 ] RATFOR
336 名前:デフォルトの名無しさん mailto:sage [2006/05/18(木) 02:02:24 ] RPG
337 名前:デフォルトの名無しさん mailto:sage [2006/05/18(木) 03:31:05 ] 小説全体を全部一つの文で書くのが関数型。 分かりにくいのは当然。
338 名前:デフォルトの名無しさん mailto:sage [2006/05/18(木) 04:21:59 ] 【手続き型小説】 吾輩は猫である。 名前はまだ無い。 どこで生れたかとんと見当がつかぬ。 何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。 吾輩はここで始めて人間というものを見た。 【関数型小説】 人間というものを始めて見た薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶しているがどこで生まれたかとんと見当がつかず名前がまだ無い猫である吾輩。
339 名前:デフォルトの名無しさん mailto:sage [2006/05/18(木) 06:43:42 ] じゃぁ処理済のジョブをジョブ郡から削除しすべてのジョブがなくなった場合はアラーとを出す処理は、 【手続き型】 ジョブ郡から処理済を列挙 その列挙したジョブ郡をジョブリストから削除。 ジョブリストが空ならアラート。 【関数型】 アラートは、ジョブリスト(この場合のジョブ郡-それは処理済のジョブで構成される−が削除されるもの)が空なら鳴る。 ってかんじ?
340 名前:デフォルトの名無しさん mailto:sage [2006/05/18(木) 08:37:18 ] 何の根拠もないのだけれど、 表層は論理型、深層は関数型のように思えるなぁ。 手続き型は資源の管理テーブルがしっかりないといけないから。 そんなもの脳の中にあるのかねぇ。
341 名前:名無しさん@Linuxザウルス mailto:sage [2006/05/18(木) 08:46:01 ] >>340 脳の構造はEBtみたいなリンク、グラフ構造になってると思われ。 リンクの繋ぎかえがあるからその部分は副作用と言える。
342 名前:デフォルトの名無しさん mailto:sage [2006/05/18(木) 18:19:57 ] この世界は現時点の万物の状態から一瞬後の万物の状態を返す関数と言える。
343 名前:デフォルトの名無しさん mailto:sage [2006/05/18(木) 19:59:05 ] ということは、この世界を呼び出して戻り値を使うスーパー世界があるかもしれないってことか
344 名前:339 mailto:sage [2006/05/18(木) 23:02:31 ] すまんが、この理解であってるんでしょうか?
345 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 00:46:29 ] 関数型:C言語 手続き型:Pascal つまり関数型が実践的で手続き型が教育向けって事です。
346 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 01:12:53 ] C言語は関数型じゃありません。 前提からして間違っています。
347 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 03:54:26 ] >>343 世界は再帰呼び出しだ そのうちスタックオーバーフロqあswrふぇdtgyふじこl;p@:
348 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 04:17:22 ] 末尾再帰ならちゃんと最適化されて、オーバーフローしないかもしれないよ、とか。
349 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 09:23:00 ] そのうち例外吐きながらビッグクランチか
350 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 14:29:52 ] >>347 アセンブラやれ スタック分かってん野か?
351 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 15:09:20 ] >>350 TMS9900とかNM1610とかで泣いた事あるだろ
352 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 20:47:53 ] 関数型だろうが手続き型だろうが、ある程度高級な静的型の言語は 基本的な道具としてバリアントとパターンマッチと型推論を備えるべきだと思うがどうだろう。 この三つは手続き型のプログラミングでも役に立つし、ないととても不便だ。 いまのところ手続き型言語ではNemerleやmerdあたりにしか実装されてないようだが。 このへんをちゃんと備えた手続き型言語が出てきて初めて、関数型と手続き型のまともな比較ができるような気がする。
353 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 21:26:12 ] > このへんをちゃんと備えた手続き型言語 つ ML
354 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 21:55:39 ] MLは変数がデフォルトで変更不可だし、goto(やreturnやbreak)がないから手続き型というのは苦しいと思うが。 しかし、手続き型と関数型という区別は余り役に立たないような気がしてきた。 問題になるのはむしろ個々の言語機能、例えばGCがあるか、クロージャがあるか、バリアントがあるか、副作用があるか…だよな。
355 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 22:21:47 ] で、結局はいちばんつまらない「ライブラリが充実しているかどうか」に 落ち着くわけですよ。
356 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 22:58:42 ] あと日本語(文字コード)対応な。
357 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 09:27:26 ] そうなると関数型言語最強はErlang
358 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 22:59:46 ] >>357 オブジェクトごとにマジで通信するってのがいい。
359 名前:デフォルトの名無しさん mailto:sage [2006/05/21(日) 04:12:11 ] ErLangとOCamlってどっちが実用的?
360 名前:デフォルトの名無しさん mailto:sage [2006/05/21(日) 09:12:19 ] 用途次第
361 名前:デフォルトの名無しさん mailto:sage [2006/05/21(日) 13:22:38 ] 並列計算やりたいならErlangが良いんじゃない? 型重視ならOCamlとかHaskellとかが良いと思う。
362 名前:デフォルトの名無しさん mailto:sage [2006/05/21(日) 17:35:47 ] >>352 同意。俺の場合、開発ターゲットはC/C++だけなんだが、 それ用のデータ加工ツールには好きな言語使える。 で、大抵はスクリプト言語とかを使うんだが、 最近ちょっと OCaml や Haskell をかじったもんだから パターンマッチ使いてえ(*゚∀゚)=3ムハー 状態になったりする。 あとやっぱデータ量が増えてくると速度が欲しくなるとか。 なので、正規表現とか多言語が楽ちんに扱えた上で 静的型付け&型推論&パターンマッチも便利、みたいな言語があれば 結構広まるような気がする。 手続きっぽく書いてもいいけど関数型だとより記述がすっきり、 みたいに使ってる人をだんだん関数型に染めてくみたいな。 (C++だとここが逆なんだよなあ)
363 名前:デフォルトの名無しさん [2006/05/25(木) 20:29:23 ] 関数型のスクリプト言語が切に欲しい。 Perlのように書きやすくて、Haskellのように考えやすい言語。
364 名前:デフォルトの名無しさん mailto:sage [2006/05/25(木) 20:30:27 ] scheme?
365 名前:デフォルトの名無しさん mailto:sage [2006/05/25(木) 20:33:15 ] >>364 静的な型がないと生きていかれません。
366 名前:デフォルトの名無しさん mailto:sage [2006/05/25(木) 20:42:34 ] >>365 haskellもインタプリタあるんじゃないの?
367 名前:デフォルトの名無しさん mailto:sage [2006/05/25(木) 20:48:19 ] 副作用がある処理での、 関数型と手続き型のコードの違いを見てみたい。
368 名前:デフォルトの名無しさん mailto:sage [2006/05/25(木) 20:56:08 ] >>366 あるけど、余りスクリプトっぽい書きやすさを指向した言語じゃないから、面倒な事が結構ある。 ロジックを実装してるうちはいいんだけど、printfやら正規表現やらディレクトリ操作なんかを始めると 途端にJavaっぽいコードを書くはめになる。
369 名前:デフォルトの名無しさん mailto:sage [2006/05/25(木) 21:10:17 ] >>367 関数型のやりかたが知りたいなら、Monadiusのソースを見てればいいんじゃないかな
370 名前:デフォルトの名無しさん mailto:sage [2006/05/25(木) 21:11:37 ] >>367 大して違わない。 ja.wikipedia.org/wiki/Hello_world
371 名前:デフォルトの名無しさん mailto:sage [2006/05/25(木) 21:56:32 ] >>370 ちょっと少なすぎてよくわかんないな。 最低でも、比較、繰り返し、関数定義、関数呼び出しぐらいはほしいな。
372 名前:デフォルトの名無しさん mailto:sage [2006/05/25(木) 22:42:28 ] /* C */ # include <stdio.h> int get_int(void) { int r; if(scanf("%d", &r) != 1) return -1; return r; } int main(void) { int i, sum = 0; while((i = get_int()) >= 0) sum += i; printf("sum=%d\n", sum); return 0; } -- Haskell import System.IO.Error getInt :: IO Int getInt = do r <- try readLn -- 例外を考慮して整数を読み込む return (either (const (-1)) id r) -- 例外が発生したなら-1を、そうでないなら読み込んだ値をそのまま返す main :: IO () main = do sum <- loop 0 -- whileループ部分を関数loopに切り出してある putStrLn ("sum=" ++ show sum) where loop sum = do -- mainに局所的な関数loopの定義 i <- getInt if i >= 0 then loop (sum + i) -- ループの代わりに再帰 else return sum
373 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 00:49:38 ] >>372 さんくす。 あー。Haskellよくわかんねーなー。 どこで区切って見ればいんだ?
374 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 00:53:28 ] >>367 いろんな言語の比較が見たいなら、ここ ttp://shootout.alioth.debian.org/ とか、ここ ttp://shinh.skr.jp/testsprite/ が参考になると思う。
375 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 00:56:50 ] >>363 関数型言語ユーザーのブログとか見ると、Rubyを使っている人が多い気がする。 関数型じゃないけど。
376 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 01:01:29 ] >>372 のを少し違った考え方で書いてみた。 import System.IO.Error import Control.Monad repeatM :: IO a -> IO [a] repeatM mx -- 例外が発生するまでmxを繰り返し実行してその結果のリストを返す = try mx >>= either (const $ return []) (\ i -> liftM (i:) $ repeatM mx) getIntP :: IO Int getIntP -- 正の整数だけを読み込む。それ以外の値だと例外発生 = do{ i <- readLn; if i < 0 then ioError (userError "negative number") else return i } main :: IO () main = do{ s <- repeatM getIntP; putStrLn ("sum = " ++ show (sum s)) }
377 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 01:50:46 ] とりあえず、普通?のインデントにしてみよう。 repeatMはよくわからんので保留 こうやって見ると、関数型の特徴がよくわからんw ただのシンタックスシュガーに見える。 getIntP :: IO Int getIntP = do{ i <- readLn; if i < 0 then ioError (userError "negative number") else return i } main :: IO () main = do{ s <- repeatM getIntP; putStrLn ("sum = " ++ show (sum s)) }
378 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 02:02:46 ] 俺はつねづね、forとifを関数オブジェクトを使って実装すれば 関数型言語になると思っているんだが? JavaScript風に書くと function for_func(from,to,func) { for(var i = from; i < to; i++) { func(i); } } function if_func(condition,func) { if(condition) { func(); } } って感じの関数を定義してやれば、あとは全部関数型としてかけると思う。 for_func(1,10, function (i) { print(i) }) if_func(1=1, function () { print(true) })
379 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 02:08:32 ] >>378 ラムダ式は?
380 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 02:29:20 ] それはただの無名関数のことだろ。
381 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 07:16:08 ] 378に従うとすると、C++も関数型言語として言える。……よな? for_eachはあるしBoost.Lambdaもあるし。
382 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 07:57:21 ] >>377 >こうやって見ると、関数型の特徴がよくわからんw だから>>370 な訳だが。 手続き型っぽくかけるようにわざわざ構文糖を用意してるんだから似てるのは当然。
383 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 08:50:58 ] >>381 C++のその辺は、文字通り「関数型言語的に書くために生み出された道具」だと思う。 だから「378に従うとすると」という仮定は要らないんじゃないかな。 とはいえあくまでも現段階のそれらは「関数言語的に書ける」レベルであって、 細かいところではまだまだ同じようにはいかないところがあるのだろうけど。
384 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 10:20:27 ] >>378 集合と列はどう扱うの?
385 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 18:27:01 ] そういえば関数型言語では、 ・型Tから「要素型Tのlist型」を作るtype constructorと、 ・その要素を作るdata constructor(たとえば[]と:) は代数data型の枠組みで容易に扱えるけど、 ・型Tから「要素型Tの集合型」を作るtype constructor(powerset constructor) ・その要素を作るdata constructor はどうやって扱うのが一般的なんだろう? listと違って、data constructorが要素の値に依存する(multisetでないとして) から話がややこしそうだ。
386 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 19:18:26 ] >>385 HaskellやOcamlでは二分探索木を使って実装されている。 木のデータ構築子は隠し、代わりに構築用の関数(emptyとinsert)をエクスポートして、 抽象型としてアクセスさせる。
387 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 20:04:06 ] >>386 まあそんなところか。 手続き型言語と同じってことで。 おそらくgraphも同様かな。ただgraphの場合、理論上は切断等を使って 構成的にdata型を定義できるはずだが。
388 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 21:15:33 ] 手続き型と関数型が合わさって さらに発展したものがオブジェクト指向だな。 いまさら関数型にこだわる必要も無いだろう。
389 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 21:24:45 ] オブジェクト指向を強制されないというだけでも関数型には価値がある。
390 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 21:44:02 ] >>388 ←何も知らない馬鹿
391 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 21:44:48 ] 低学歴の香りがするよな
392 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 22:24:21 ] 馬鹿という奴が(ryって奴ですねw
393 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 22:42:10 ] ということにしたいのですね
394 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 22:43:13 ] >>393 当たり前だろ、ごみ野郎
395 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 23:50:07 ] 【馬鹿という奴が馬鹿なんだ】 突きつけられた己のレベルを認めたくない人間が 現実逃避に用いるポピュラーなうっちゃり。 大抵は失敗して土俵に潰れるが、潰れたままヘラヘラ笑い続けるのが特徴。
396 名前:デフォルトの名無しさん mailto:sage [2006/05/29(月) 02:44:04 ] >395 うるさい!ばかっていうやつがばかっていうやつがばかなんだぞ!
397 名前:デフォルトの名無しさん mailto:sage [2006/05/29(月) 09:26:02 ] 精神的に向上心のないものは、ばかだ
398 名前:デフォルトの名無しさん mailto:sage [2006/05/29(月) 10:34:42 ] 精神的でない向上心などあるものか
399 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 00:16:03 ] 敗者とは始める前から諦めている者のことである。
400 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 23:23:15 ] 「始めたら負けかなと思ってる」
401 名前:デフォルトの名無しさん [2006/06/01(木) 21:26:15 ] 歯医者。
402 名前:デフォルトの名無しさん [2006/06/07(水) 21:21:03 ] なあ思ったんだけど、 関数の記述を 関数名(引数) じゃなくて (引数)関数名 にすれば なんか日本語にとっても近くならないか?
403 名前:デフォルトの名無しさん mailto:sage [2006/06/07(水) 21:36:09 ] マジレスすると そんなことするよりオブジェクト指向にしちまえばいいんじゃないのか
404 名前:デフォルトの名無しさん [2006/06/08(木) 19:34:18 ] 日本語に近付けるなら、助詞が有効に使えないとな。
405 名前:デフォルトの名無しさん mailto:sage [2006/06/08(木) 19:40:23 ] 活用もできるようになるといいね。
406 名前:デフォルトの名無しさん [2006/06/08(木) 19:42:29 ] ボケナス乙。 1から読み始めて、30あたりで爆笑が止まらなくなって、 スレ削除することにしました。 じゃぁなw
407 名前:デフォルトの名無しさん [2006/06/08(木) 19:44:02 ] なんとなくたかひろくさいスレだな
408 名前:デフォルトの名無しさん [2006/06/08(木) 19:45:47 ] _________K仲川について Part10____________ pc8.2ch.net/test/read.cgi/prog/1121735183/l50 【初めて仲川勝彦(K仲川)と仕事する方へ】 pc8.2ch.net/test/read.cgi/prog/1149580345/l50 † pc8.2ch.net/test/read.cgi/prog/1111407459/l50
409 名前:デフォルトの名無しさん [2006/06/08(木) 19:52:38 ] C/C++>>>>(越えられない壁)>>>Lisp>>>>(越えられない壁)>>>Haskell
410 名前:デフォルトの名無しさん mailto:sage [2006/06/08(木) 20:14:06 ] バグの生産性
411 名前:デフォルトの名無しさん mailto:sage [2006/06/08(木) 20:29:32 ] C++ >>> Ada > PL/I
412 名前:デフォルトの名無しさん mailto:sage [2006/06/08(木) 21:37:34 ] テキストでいいからエロゲー作ってくれ
413 名前:デフォルトの名無しさん mailto:sage [2006/06/08(木) 23:23:52 ] DOS時代の探せばノベル系エロゲーあったかもしれない。
414 名前:デフォルトの名無しさん mailto:sage [2006/06/08(木) 23:30:05 ] スクリプトインタプリタは関数型言語の得意分野ということになるかな。
415 名前:デフォルトの名無しさん [2006/06/09(金) 00:07:52 ] いろいろ議論はあるけど、実用の際に一番ポイントになるのは↓になると思うよ 関数型 : ソースコード自体がそのプログラミング言語のデータ構造になっている。 手続き型 : ソースコード自体がそのプログラミング言語のデータ構造になっていない。
416 名前:太田司 mailto:tsukasa-91@ezweb.ne.jp [2006/06/09(金) 00:12:39 ] tsukasa-91@ezweb.ne.jp ↑僕のメアドなんで痛メでも何でも送って楽しませてください 皆のメール待ってます
417 名前:デフォルトの名無しさん mailto:sage [2006/06/09(金) 00:14:37 ] >402 func(func(func())) ((()関数)関数)関数 この場合、最初に入れ子の数を 予測して書かなければならない。 些細だが、気になる人は気になると思う。
418 名前:デフォルトの名無しさん mailto:sage [2006/06/09(金) 00:16:46 ] >>417 そこで助詞の出番ですよ。
419 名前:デフォルトの名無しさん mailto:sage [2006/06/09(金) 00:23:31 ] 助詞表記 ()を関数を関数を関数 ドット表記 ().func.func.func
420 名前:デフォルトの名無しさん mailto:sage [2006/06/09(金) 01:06:09 ] $stdoutに linesを puts
421 名前:デフォルトの名無しさん mailto:sage [2006/06/09(金) 03:04:29 ] >>337-338 素晴らしい。 今まで関数型志向設計の有意性と無為性を語ってきたが、これほどわかりやすく且つ特徴を捉えた例も説明も無く苦労してきた。 ミミ彡ミミミ彡彡ミミミミ ,,彡彡彡ミミミ彡彡彡彡彡彡 ミミ彡彡゙゙゙゙゙""""""""ヾ彡彡彡 ミミ彡゙ ミミ彡彡 ミミ彡゙ _ _ ミミミ彡 ミミ彡 '´ ̄ヽ '´ ̄` ,|ミミ彡 ミミ彡  ゚̄ ̄' 〈 ゚̄ ̄ .|ミミ彡 彡| | |ミ彡 彡| ´-し`) /|ミ|ミ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ゞ| 、,! |ソ < カンドーした! ヽ '´ ̄ ̄ ̄`ノ / \________ ,.|\、 ' /|、  ̄ ̄| `\.`──'´/ | ̄ ̄` \ ~\,,/~ / \/▽\/
422 名前:デフォルトの名無しさん mailto:sage [2006/06/09(金) 05:36:29 ] 天動説、地動説。
423 名前:デフォルトの名無しさん mailto:sage [2006/06/09(金) 10:37:00 ] >>339 ス万が誰かこの理解が正しいのか教えてくれ
424 名前:デフォルトの名無しさん mailto:sage [2006/06/09(金) 10:42:03 ] >>423 それは単なるデータ構造の違いというだけ。 関数型・手続き型の違いとはあまり関係ない。
425 名前:デフォルトの名無しさん mailto:sage [2006/06/09(金) 11:05:42 ] >>424 よくわからんです(・ω・)
426 名前:デフォルトの名無しさん mailto:sage [2006/06/09(金) 11:09:36 ] >>425 >【手続き型】 >ジョブ郡から処理済を列挙 これは配列を使うという意味でしょう? >【関数型】 >アラートは、ジョブリスト(この場合のジョブ郡-それは処理済のジョブで構成される−が削除されるもの)が空なら鳴る。 これはリストを使うという意味でしょう? 配列を使うかリストを使うかというだけでしかなくて、関数型か手続き型かという意味の問題ではなくなっているんだよ。
427 名前:デフォルトの名無しさん mailto:sage [2006/06/09(金) 11:40:54 ] >>【手続き型】 >>ジョブ郡から処理済を列挙 >これは配列を使うという意味でしょう? > >>【関数型】 >>アラートは、ジョブリスト(この場合のジョブ郡-それは処理済のジョブで構成される−が削除されるもの)が空なら鳴る。 >これはリストを使うという意味でしょう? とてもそうは見えないのだが。
428 名前:デフォルトの名無しさん mailto:sage [2006/06/09(金) 11:41:57 ] >>426 ん、データ構造はあまり気にしてなかったんですが。 手続き型でリストだろうが、マップだろうが。 そもそも手続き型と関数型の違いがあまり判っていないんですが、 猫であるの例を見て、それを実際の処理記述に当てはめるとこうなるのかと思って書いた次第です。 自分がここで聞きたいのは関数型での処理の記述がこんな風になるのかということですね。
429 名前:デフォルトの名無しさん mailto:sage [2006/06/09(金) 12:04:16 ] 寧ろこうか? 手続き型 列挙ジョブ群 = ジョブ群.列挙(処理済) ジョブリスト.削除(列挙ジョブ群) if (ジョブリスト.空) アラート() 関数型 ジョブ群から処理済を列挙したジョブ群を削除したジョブリストが空なら鳴らすアラート
430 名前:デフォルトの名無しさん mailto:sage [2006/06/09(金) 12:14:24 ] >>429 概念的にはそんな感じだと思うけど、実際の関数型言語では、 両者の折衷形態で書かれるのが普通だと思う。 if(ジョブ群から処理済を列挙したジョブ群を削除したジョブリストが空) アラートを鳴らす。 これだと高水準な手続き型言語と区別がつかないけど。
431 名前:デフォルトの名無しさん mailto:sage [2006/06/09(金) 12:20:29 ] 処理とは アラートを鳴らす事が出来るならアラートを鳴らす アラートを鳴らす事が出来るとは 残処理リスト が 空である 残処理リストとは ジョブ群から 処理済みを列挙したジョブ群を 削除したものである こうじゃないの?
432 名前:デフォルトの名無しさん mailto:sage [2006/06/09(金) 12:32:28 ] >>429 処理済みのものを求めて引くよりは、最初から未処理のものだけ列挙すりゃいいじゃん。 手続き型(というよりOOP?) func ジョブ群.列挙(フラグ) { ジョブ群のうちフラグが立っている物だけを列挙して返す。 } if (ジョブ群.列挙(未処理).空) アラート() 関数型 if (空?( 抽出(未処理?, ジョブ群) )) アラート() ここで、抽出(f,s)はsの要素のうち判定関数fで真であるものだけを集めたもの。
433 名前:デフォルトの名無しさん mailto:sage [2006/06/09(金) 12:38:53 ] >>431 Haskellっぽく書けばそうなるな。 >>430 はML風ということで。 ついでにCleanっぽいのを書いてみる。 処理後の世界とは、アラートを鳴らすことが出来るならば 処理前の世界にアラートを鳴らした後の世界であり、 そうでなければ処理前の世界と同じ世界である。 以下>>431 と同様。 しかし、この手の比較が関数型言語の特徴をうまく掴んでいるとは思えないんだが。 関数型と手続き型の違いを知りたいなら、入出力の絡まない処理の方がわかりやすいと思う。 >>432 それは両方とも関数型だと思われ
434 名前:デフォルトの名無しさん mailto:sage [2006/06/09(金) 12:58:08 ] >>432 ジョブ郡から終了したものを削除する処理とアラームなる処理は別だから。 >関数型と手続き型の違いを知りたいなら、入出力の絡まない処理の方がわかりやすいと思う。 その例を是非
435 名前:デフォルトの名無しさん [2006/06/09(金) 15:35:01 ] 遅延評価の中の人がどうステップ踏んでるのか知りたい やたら遅いのでなんか事故ってると思う
436 名前:デフォルトの名無しさん mailto:sage [2006/06/09(金) 16:10:01 ] >>435 Haskellスレで質問してた人? 特定のコードが遅いならあっちで晒してみるといいかと。
437 名前:デフォルトの名無しさん [2006/06/09(金) 17:31:07 ] >>415 おまいの脳内世界では関数型言語がLisp系しか存在しないってのがわかった
438 名前:デフォルトの名無しさん mailto:sage [2006/06/09(金) 18:05:42 ] まあ、関数も変数だからな・・
439 名前:デフォルトの名無しさん [2006/06/12(月) 11:57:01 ] 関数型を勉強する者は蟻 手続き型で十分だと関数型を軽視する者はキリギリス
440 名前:デフォルトの名無しさん mailto:sage [2006/06/12(月) 12:34:07 ] しかし、世界はキリギリス中心に動く。
441 名前:デフォルトの名無しさん [2006/06/12(月) 13:46:29 ] >>440 そのフレーズいただいた あとで俺がそのフレーズ朴った本出しても訴えるなよ
442 名前: ◆4.bZNjkJnA [2006/06/12(月) 13:52:41 ] ss
443 名前:デフォルトの名無しさん mailto:sage [2006/06/12(月) 19:19:40 ] なんつうか、アリとキリギリスが逆じゃねえ?
444 名前:デフォルトの名無しさん [2006/06/12(月) 20:30:13 ] 確かに。 Java プログラマがキリギリスだとは思えない。
445 名前:デフォルトの名無しさん mailto:sage [2006/06/12(月) 21:19:27 ] うむ。逆だろw
446 名前:デフォルトの名無しさん mailto:sage [2006/06/12(月) 21:21:15 ] 蟻でもキリギリスでもない。糞ころがしだ。
447 名前:デフォルトの名無しさん [2006/06/13(火) 00:27:13 ] 数年前の関数型言語スレのコピペかよ。 クダラネェな。
448 名前:デフォルトの名無しさん mailto:sage [2006/06/13(火) 14:59:13 ] なに興奮してんの?w
449 名前:デフォルトの名無しさん mailto:sage [2006/06/13(火) 23:28:19 ] > 2006/06/13(火) 14:59:13 ↑ヒッキー発見w
450 名前:デフォルトの名無しさん mailto:sage [2006/06/14(水) 01:03:11 ] ?
451 名前:デフォルトの名無しさん mailto:sage [2006/06/14(水) 10:11:05 ] >>450 >449はきっと、平日昼間に書き込むのはヒッキーだと思い込みたいリアル厨かヒッキー予備軍なんだろ。
452 名前:デフォルトの名無しさん mailto:sage [2006/06/14(水) 10:47:16 ] 平日昼間に余裕で書き込める窓際社員(古w)のオレが来ましたよ
453 名前:デフォルトの名無しさん mailto:sage [2006/06/14(水) 11:04:37 ] あこがれるっす
454 名前:デフォルトの名無しさん mailto:sage [2006/06/14(水) 23:50:29 ] >>452 昼食時間もまともにとれない俺様が深夜帰宅途中に携帯カキコですがなにかorz
455 名前:デフォルトの名無しさん mailto:sage [2006/06/15(木) 00:36:20 ] >>454 会社辞めさせてもらえないって本当?
456 名前:デフォルトの名無しさん mailto:sage [2006/06/15(木) 05:04:52 ] 無職透明な俺が456ゲット。
457 名前:デフォルトの名無しさん mailto:sage [2006/06/18(日) 01:51:56 ] マ板でやれ
458 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 21:34:54 ] (f (f (f x))) (((x f) f) f) (x f (f (f))) (((f) f) f x) >>417
459 名前:デフォルトの名無しさん [2006/06/29(木) 22:22:43 ] Smalltalkのブロックはそんな感じかも。 x ← [ [ [ ... ] value ] value ] value. みたいな。 MacOSXで復活(?)したObjective-Cも近いんじゃないかね。
460 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 20:42:18 ] 57 名前:デフォルトの名無しさん[] 投稿日:2006/02/16(木) 10:58:30 >>56 プログラム全体にわたっての型の整合性は コンパイルが通った時点で保証されている、と信じたいから という発言に対し、 65 名前:デフォルトの名無しさん[] 投稿日:2006/02/16(木) 21:42:52 っていうか、>>57 みたいなこと書くやつは死ねばいいと思う。 お前みたいなド素人がプログラミングでメシ食っていこうなんて百年早い マジ死ねよ と返す。 これがBoostスレクオリティ。
461 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 23:32:23 ] 一応書いておくけど、その後フォロー入っているよ。 66デフォルトの名無しさんsage2006/02/16(木) 21:45:48 >>65 57の感覚自体はまともだと思うけど
462 名前:デフォルトの名無しさん mailto:sage [2006/07/20(木) 07:22:50 ] こんな関係無いスレに言いつけに来るなよ57w 自分の代わりに「敵」をやっつけてくれそうな猛者でも期待したのか? 残念だったなw
463 名前:デフォルトの名無しさん mailto:sage [2006/07/20(木) 15:16:44 ] 65乙
464 名前:デフォルトの名無しさん mailto:sage [2006/07/20(木) 15:28:38 ] こんな関係無いスレに言いつけに来るなよ57w 自分の代わりに「敵」をやっつけてくれそうな猛者でも期待したのか? 残念だったなw
465 名前:デフォルトの名無しさん mailto:sage [2006/07/20(木) 15:36:12 ] >>460 ゴキブリはチョンSPさっさとゴミ箱に捨ててNDSで知育ゲームでもやったら? でないとおまえ本気で社会復帰できないよwwwwwwwwwwww
466 名前:デフォルトの名無しさん mailto:sage [2006/07/20(木) 15:41:55 ] /∧ /∧ / / λ / /λ / / /λ / / /λ / / / /λ / / /λ /  ̄ ̄ \ / / ̄\ / ̄\\ / | ●| | ●| ヽ | し ̄ヽJ し  ̄ヽJ | ―→>>463 | '""" | \ 丶 ___人___ノ / \_ ヽ―/ __/ < うぷぷぷ /  ̄ ヽヽ \ /
467 名前:デフォルトの名無しさん mailto:sage [2006/07/20(木) 19:39:57 ] ひどいな そんな気に障るようなレスだったのかね
468 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 05:31:40 ] まぁ57にとっては 気に障るなんてもんじゃなかったんだろうな。 こんなとこに泣きついてくるくらいだから。
469 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 14:39:22 ] >>468 いつまでも粘着してるお前の方がどうかと思うぞ
470 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 14:51:03 ] >プログラム全体にわたっての型の整合性は >コンパイルが通った時点で保証されている、と信じたいから OCamlではこれがあるから、実行時エラーが少なくてすむ。
471 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 15:20:04 ] いや、型周りに穴があるC++でそれを期待するのは間違いって話じゃないの?
472 名前:471 mailto:sage [2006/07/21(金) 15:31:30 ] 見てきた。 違うみたいだな。 視野の狭い人間が偉そうにしてるって話か。 くだらん。
473 名前:デフォルトの名無しさん mailto:sage [2006/07/21(金) 16:22:48 ] >>461 否定してるだろうが よく読め馬鹿 68 名前:デフォルトの名無しさん[] 投稿日:2006/02/16(木) 21:50:14 >>66 お前も死ねよ。ド素人が >>472 どこをどう読めばそうなるのかなーwww チョンは氏ね
474 名前:デフォルトの名無しさん mailto:sage [2006/07/22(土) 04:26:44 ] あーあ泣き出しちゃったw
475 名前:デフォルトの名無しさん mailto:sage [2006/07/22(土) 05:03:14 ] >>474 誤爆か?
476 名前:474 mailto:sage [2006/07/22(土) 05:05:46 ] >>475 頭がかわいそーな人ハケーン
477 名前:デフォルトの名無しさん mailto:sage [2006/07/22(土) 05:43:46 ] >>476 誤爆か?
478 名前:デフォルトの名無しさん mailto:sage [2006/07/22(土) 21:16:57 ] Haskellが下火になってきたな みんな飽きてきたらしい
479 名前:デフォルトの名無しさん mailto:sage [2006/07/23(日) 00:48:54 ] まあ、アルゴリズム関連は処理速度が遅い、GUIも苦手と来れば使い道ないもんな。 一通りのことを勉強したらそれで終わりって感じ。
480 名前:デフォルトの名無しさん mailto:sage [2006/07/23(日) 04:22:24 ] よーし、ついに Lisp 時代の到来だ
481 名前:デフォルトの名無しさん mailto:sage [2006/07/23(日) 05:02:47 ] ( ゚д゚) _(__つ/ ̄ ̄ ̄/_ \/ /  ̄ ̄ ̄ ( ゚д゚ ) _(__つ/ ̄ ̄ ̄/_ \/ /  ̄ ̄ ̄
482 名前:デフォルトの名無しさん mailto:sage [2006/07/23(日) 06:44:19 ] もっと見てv
483 名前:デフォルトの名無しさん mailto:sage [2006/08/17(木) 02:38:05 ] ( ゚д゚ ) _(__つ/ ̄ ̄ ̄/_ \/ /  ̄ ̄ ̄ ( ゚д゚) _(__つ/ ̄ ̄ ̄/_ \/ /  ̄ ̄ ̄
484 名前:デフォルトの名無しさん mailto:sage [2006/08/17(木) 04:17:25 ] 見〜て〜よ〜ぉぉ!!!
485 名前:デフォルトの名無しさん mailto:sage [2006/08/30(水) 09:01:25 ] >>417 括弧なくせばイイんじゃね? それなんてFO…
486 名前:デフォルトの名無しさん mailto:sage [2006/08/30(水) 12:08:55 ] >>402 BibTeX の bst ファイルは後置記法でそんな感じだなあ。 おもっくそ読みにくいよ。
487 名前:デフォルトの名無しさん mailto:sage [2006/09/01(金) 21:24:44 ] >>402 >>417 >>485-486 Haskell の $ の逆で 行始からそれまでの式を 一発で括る記法作ったらどうよ
488 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 03:28:09 ] Dなら arr.map((int n){return n * b;}).writefln(); とかできるが
489 名前:デフォルトの名無しさん mailto:sage [2006/09/11(月) 16:56:02 ] infixl 1 % (%) = flip ($) main = [1..10] % map (*5) % print
490 名前:デフォルトの名無しさん mailto:sage [2006/09/11(月) 18:48:12 ] >>488 感動した。Cもついにここまで来たか。
491 名前:デフォルトの名無しさん mailto:sage [2006/09/11(月) 19:19:27 ] だからCじゃないって。
492 名前:デフォルトの名無しさん mailto:sage [2006/09/11(月) 22:58:26 ] C -> C++ -> D
493 名前:デフォルトの名無しさん mailto:sage [2006/09/12(火) 07:37:27 ] ↑いまここ
494 名前:デフォルトの名無しさん mailto:age [2006/11/04(土) 13:04:31 ] 「手続き型」も一種の「関数型」と見なしていいんですよね?
495 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 16:04:24 ] J - C++ for Haskeller d.hatena.ne.jp/w_o/20061008#p1 > C++とは、以下のような特徴を持ったプログラミング言語です > > 参照透明(!) > 出現評価(occurrence evaluation) (などといういかがわしい単語をつくる) > パターンマッチできる > 全く直感的でない構文 > IOモナドを書くための大量のsyntax sugarがある クソワロタ
496 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 16:54:21 ] 何が面白いんだ? 事実そのままやん 初心者には、面白く感じるんかね?
497 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 17:28:00 ] 俺も初心者だけど、ワロタw
498 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 17:28:40 ] >>496 上級者はお前しかいないみたいだ。よかったな。
499 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 19:06:22 ] 笑うのは puts("hello, world") のとこだけだろ
500 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 19:14:49 ] >>499 人に「ここで笑え」と指示するなんて、さすが上級者ですね^^
501 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 19:37:17 ] 連想配列のくだりで腹を抱えて笑った俺は初心者。
502 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 20:10:44 ] >>500 存在しない「指示」を読み取っちゃうのは コミュニケーションの初心者だな
503 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 20:22:14 ] >>502 行間を読めない人なんですね^^;
504 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 21:10:36 ] まぁ、無いものをあると言い張る時には便利な言葉だ<行間 こうして「解釈の違い」に逃げていくのもお約束
505 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 00:42:00 ] >>504 と言えば勝った気になれるのもお約束^^ そんな不毛な話がしたいの? 上級者って忍耐強くて尊敬できますよ。
506 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 10:36:02 ] 突然勝ち負けの概念を持ち出すと、 それにこだわってたのが自分だってバレちゃうよ。
507 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 12:19:31 ] >>506 自分も持ち出してるくせに、よく言うよ。
508 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 00:42:57 ] 負け組乙
509 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 01:06:29 ] オマイらいい歳こいて、子供みたいな喧嘩してるなあ、あはは
510 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 01:33:16 ] おっさん乙
511 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 08:55:35 ] ゴルァ!
512 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 09:38:06 ] 年寄りは国の宝なんだから大事に扱えよ
513 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 10:04:58 ] 国のお荷物が何を言っているんだか
514 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 19:49:44 ] お荷物はニートのお前だろw
515 名前:デフォルトの名無しさん mailto:sage [2006/11/07(火) 03:31:21 ] よく考えたらそうだったwwww
516 名前:デフォルトの名無しさん mailto:sage [2006/11/10(金) 16:45:11 ] チンボぶっ飛ばすぞお前ら。 何がモナドだ。 schemeで継続やっときゃいいんだよ。
517 名前:デフォルトの名無しさん mailto:sage [2006/11/11(土) 04:40:16 ] 型のない継続なんてダメダメ
518 名前:デフォルトの名無しさん mailto:sage [2006/11/11(土) 11:31:25 ] 今時LispやらSchemeやらが最高だと思ってるやつは時代遅れ
519 名前:デフォルトの名無しさん mailto:sage [2006/11/11(土) 12:34:31 ] lispやschemeが流行り廃りに左右されるものだと思ってる奴は致命的
520 名前:デフォルトの名無しさん mailto:sage [2006/11/11(土) 14:02:45 ] lispやschemeの問題点が見えないのは致命的。というか、無学。
521 名前:デフォルトの名無しさん mailto:sage [2006/11/11(土) 18:41:36 ] >>520 その問題点は言語的な方か商業や政治的な方かで話がだいぶ違うわけであるが。
522 名前:デフォルトの名無しさん mailto:sage [2006/11/11(土) 20:42:35 ] 無学というからには、言語的なほうじゃないのか? 俺としては遅いぐらいしか問題点思いつかないけどな。
523 名前:デフォルトの名無しさん mailto:sage [2006/11/11(土) 21:05:12 ] M式ってなんですか?
524 名前:デフォルトの名無しさん mailto:sage [2006/11/11(土) 21:37:31 ] >>521 商業や政治的には、問題点云々以前の問題外だろw
525 名前:デフォルトの名無しさん mailto:sage [2006/11/11(土) 23:44:40 ] 思ったよりバカが多いな。
526 名前:デフォルトの名無しさん mailto:sage [2006/11/11(土) 23:45:33 ] >>522 quote についてどう思う?
527 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 13:00:32 ] なんで急に「わかったふり」の一行レスばっかに(^_^;
528 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 13:20:19 ] そんなことはどうでもいい
529 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 13:25:35 ] 誰も答えられないので、Lispはクズということですか。
530 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 17:25:57 ] そうだね、lispやschemeは結局クズっていう結論でいいと思うよ。 ハスケルとかもっとキャッチーな言語にうつつをぬかしておけばいいんじゃない?
531 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 18:00:30 ] >>530 その言い方だと、Haskellはクズじゃないと思っているみたいだけど、 うつつを抜かす、というのはどういう意味で言っているのかな。 別に批判的な意味で質問しているのではないけど。
532 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 18:04:10 ] >>531 俺は>>530 じゃないが、たぶんお前は>>530 を誤読していると思う。 もう一回読み直してみれ。
533 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 23:27:55 ] 馬鹿に向かってそういう冷静なアドバイスをすると 噛み付かれるよ
534 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 23:49:36 ] と、すでに噛みついている狂犬くんでした
535 名前:デフォルトの名無しさん mailto:sage [2006/11/13(月) 02:23:58 ] 嫌味が解らないと2chは難しい
536 名前:デフォルトの名無しさん mailto:sage [2006/11/13(月) 06:00:09 ] 悪い意味でピュアな子には難しいな。
537 名前:デフォルトの名無しさん mailto:sage [2006/11/13(月) 18:07:10 ] >531 Haskellを直接クズとは書かれていないが 「うつつを抜かす」で暗に否定してるだろ
538 名前:デフォルトの名無しさん mailto:sage [2006/11/13(月) 18:09:56 ] クズな言語があるならクズじゃない言語もあるはずだが(相対的) 具体的にクズじゃない言語を言ってみて。
539 名前:デフォルトの名無しさん mailto:sage [2006/11/13(月) 22:52:55 ] Rubyとか
540 名前:Ruby使い mailto:sage [2006/11/14(火) 15:56:58 ] >539 言語の基本的なところは良いんだけど (まー他言語の良いトコ取りで悪いのも困るが) 開発者や周辺の人達の人格がおかしすぎるのが問題 RubyスレでMLについてのレスを見ればよく判る
541 名前:デフォルトの名無しさん mailto:sage [2006/11/14(火) 15:59:13 ] まぁ、コミュニティにもともと学術関係者すくないですから。
542 名前:デフォルトの名無しさん mailto:sage [2006/11/14(火) 16:57:24 ] 一番の難点は宗教が絡んでいるところ。
543 名前:デフォルトの名無しさん mailto:sage [2006/11/14(火) 17:09:21 ] >>542 は?
544 名前:デフォルトの名無しさん [2006/11/18(土) 15:57:02 ] PythonがあればRubyはいらない
545 名前:デフォルトの名無しさん [2006/11/18(土) 15:58:11 ] Pythonは現代的 Lispは時代遅れ
546 名前:デフォルトの名無しさん mailto:sage [2006/11/18(土) 16:00:38 ] Pythonは実用的 Haskellは使い物にならない
547 名前:デフォルトの名無しさん mailto:sage [2006/11/18(土) 22:07:51 ] PythonってLispのマクロに当たるもんあるの? 後遅いという話を聞いたとですが。
548 名前:デフォルトの名無しさん mailto:sage [2006/11/18(土) 23:00:49 ] ないよ 遅いよ
549 名前:デフォルトの名無しさん mailto:sage [2006/11/19(日) 00:15:55 ] んじゃ、ただの動的で使いやすい言語でしかない感じ?
550 名前:デフォルトの名無しさん mailto:sage [2006/11/19(日) 02:36:46 ] > 使いやすい言語 重要じゃないですか
551 名前:デフォルトの名無しさん mailto:sage [2006/11/19(日) 03:05:23 ] はい
552 名前:デフォルトの名無しさん mailto:sage [2006/11/19(日) 03:51:01 ] Pythonみたいな文法の言語で Lispマクロっぽいのって やったらすごそうだなw
553 名前:デフォルトの名無しさん mailto:sage [2006/11/19(日) 04:14:37 ] pc8.2ch.net/test/read.cgi/tech/1158259643/
554 名前:デフォルトの名無しさん mailto:sage [2006/11/19(日) 04:18:36 ] >>552 良く知らんけど、Clean はマクロあるらしいよ。
555 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 18:32:14 ] >>542 自分の慣れ親しんだパラダイムの生産性が高く見えるというのは 確かにあるだろうな。 さらに厄介なのは、そのパラダイムがその人にとっては実際に 生産性が高い、ということがあるかも知れないという点だ。 こうなるとパラダイム間の比較はほとんど不可能だと思う。 >>554 ちょっと見た感じでは、マクロの引数から情報を取り出す手段がないので、 Lispのマクロのような使いかたはできないように感じた。
556 名前:デフォルトの名無しさん [2006/11/25(土) 12:05:11 ] 手続き型は関数のインターフェイスと実装の結びつきが曖昧。 関数型は関数のインターフェイスがそのままアルゴリズムに直結してる。 そんな印象。 どっちが分り易いかといえば関数型なんだけど、その分りやすさを コーディングの段階で作り出せるかっていうとそれも難しい。 難しさがそのまま関数型の言語の扱い難さに直結してる。 そんな印象。
557 名前:デフォルトの名無しさん mailto:sage [2006/11/25(土) 17:00:26 ] > 手続き型は関数のインターフェイスと実装の結びつきが曖昧。 > 関数型は関数のインターフェイスがそのままアルゴリズムに直結してる。 プログラム例を希望
558 名前:デフォルトの名無しさん mailto:sage [2006/12/09(土) 20:39:44 ] 何一つ有意義な意見もなく無事終了
559 名前:デフォルトの名無しさん mailto:sage [2007/01/10(水) 13:36:11 ] 図画工作発案設計工事完成論理関数手続機械
560 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 23:56:22 ] >>458 類型。 (+ (+ (+ 0))) (+ (+ 1)) (+ 2) 3 (((0 +) +) +) ((1 +) +) (2 +) 3 (0 + (+ (+))) (1 + (+)) (2 +) 3 (((+) +) + 0) ((+) + 1) (+ 2) 3
561 名前:デフォルトの名無しさん [2007/07/21(土) 18:23:59 ] age age
562 名前:デフォルトの名無しさん [2007/07/22(日) 16:08:14 ] a = b = 1; は、関数(b = 1)の戻り値1がaに代入されると 考えてよいだろうか。
563 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 16:34:49 ] C++ で考えるなら、b = 1 の戻り値は b への参照だな。
564 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 17:55:12 ] 糖衣構文と割り切るか…?
565 名前:デフォルトの名無しさん [2007/08/03(金) 15:57:25 ] 関数型を勉強したら、普通の言語でも次みたいに書くようになってしまいました。 string getCrSeparatedStr(string keyword) { return replaceSpaceWithCr( trim(modifyConcatenatedSpacesToSingleSpace( modifySpaceWideToNarrow( deleteSingleQuote(keyword))))); }
566 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 16:31:25 ] >>565 キモっ
567 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 16:32:14 ] 頼むから横幅2cm以上の関数は作ってくれるな
568 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 16:53:02 ] >>565 C++のOven Rangeみたいな書き方お勧め。 p-stade.sourceforge.net/oven/doc/html/#oven.introduction
569 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 17:11:51 ] 右から読もうとして混乱した。
570 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 18:33:56 ] >>565 Rubyやってると、むしろこうなる def getCrSeparatedStr(keyword) do keword.deleteSigleQuote.modifySpaceWideToNarrow.modifyConcatenatedSpacesToSingleSpace.trim.replaceSpaceWithCr end
571 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 22:28:19 ] 手続き型って頭悪いプログラマーを連想するな、このスレの C++ 信者とか
572 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 22:34:11 ] そりゃ、人数が多ければ、駄目な奴もその分多めになる。
573 名前:デフォルトの名無しさん [2007/08/03(金) 22:35:09 ] だめな奴が居るからできる奴が輝くんじゃないか
574 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 07:42:33 ] >>571 手続き型を使っているプログラマーが頭が悪いのではなく、 頭が悪いプログラマーが手続き型を多く使っているだけ 頭の悪い奴は、関数型は使えないw
575 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 09:28:20 ] >>573 ちがう、できるやつ:だめなやつ=2:8
576 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 11:01:40 ] 2も居るのかうらやましいな・・・('A`)
577 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 13:11:19 ] 関数型ド素人です。 友人が以前Ocamlを絶賛していたので、ちょっとかじってみようかな、と思いますが。 Ocamlって関数型としては厳格な方なんでしょうか。 あと、ここのスレ大変面白く読ませていただいてますが、自分がソースからスキルを 判断する際に基準にしているのが、 「縦に長いソースコードを書く人間はダメ」 っていうものです。関数型使いの方々が頭が良いということと関連するのかな、とも 感じました。
578 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 13:24:30 ] >>577 OCamlはゆるゆるです。
579 名前:577 mailto:sage [2007/09/05(水) 10:00:55 ] >>578 そうですか・・・。 ユルユルってことは、手続き型と同様の不具合の可能性があるということなんでしょうか。 自分の理解では、関数型は変数への破壊的代入が無いということが、手続き型で発生する問題 の大半を抑止できるということかと思ってます。手続き型はそれを防ぐために、変数のスコープを できるだけ短くする、といった工夫が必要です。オブジェクト指向の最も重要な特徴も、データの カプセル化なわけですが、関数型はそういった気遣いが無用ということなんでしょうか。
580 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 11:56:21 ] >>579 MLでは変数はデフォルトで変更不可。だから let p = 5 in (巨大な式) とあったら、pはずっと5であることが保証される。 ただ、MLは式が副作用を持つことを認めるので、 裏でこっそりグローバルな状態を書き換える関数なんかが定義できる。 この点で、副作用を禁止するHaskellなんかと比べると厳格でない。 >関数型はそういった気遣いが無用ということなんでしょうか。 たとえreadonlyでも実装を公開したら実装に依存されてしまう。 だからカプセル化が必要になることはあるし、そのための仕組みも提供されている。
581 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 10:15:35 ] 関数型にも色々あるようなんですが、何がオススメでしょうか。
582 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 21:19:01 ] Schemeがお勧め
583 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 10:04:15 ] F#
584 名前:デフォルトの名無しさん [2007/11/05(月) 01:46:56 ] >>295 ツール不足(というか全くない)。 でも関数型CPUと言えるものは製品としてあるよ。
585 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 08:13:44 ] 志村〜日付日付!
586 名前:デフォルトの名無しさん [2008/04/10(木) 11:44:28 ] >>1 こういう分類をする場合は、論理型も関数型に含めていいんだろうか?
587 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 01:26:05 ] Lispって関数型言語なのかな? ちょっと勉強がてらに手元にあるEmacsLispを見てみよう ・・・何という手続きのかたまり
588 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 02:31:16 ] Lisp は手続き型言語に分類するのが普通だと思う。 中でも Emacs Lisp は手続き的なコードを書くのが一般的。 論理型言語は関数型とも全然違うでしょ。 どっちにも分類できない第三の勢力だけど、マイナーだから無視される。
589 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 03:49:09 ] 論理型言語ってprologとかplannerとかその方面? wikipediaからつながってる方向だとこういうのとプロセス代数なんかがうまく融合したら (というかアクターとかはそっちからの考え方に近いのか?)、 テストやらモデル検査は楽になりそうだけど、なんつーか工業製品を作っているみたいな気分になってくる。 いや本来はそっちが目的なのかもしれないが。 アカデミックになると途端に専門用語が数学臭くなって、プログラミングの本来の楽しさみたいなのが消え失せるな。 プログラムではなく事象を記述するというか。まぁ数学的な面白さってのはあるんだろうけどね。 これがプログラマが理解できるまで降りてくると、コンパイラあたりで自動化されてんだろうな。 数学、コンピュータサイエンス、ソフトウェアサイエンス、ソフトウェアエンジニアリング、IT土方、 それぞれで必要になるものは変わってくるんだろうけど。 最近/.でこれみてからなんかこの辺のことを考える様になった…。 Forget Math to Become a Great Computer Scientist? developers.slashdot.org/article.pl?sid=07/07/08/0547234
590 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 07:52:47 ] >>589 つ GHC, Concurrent Prolog