5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

関数型と手続き型

1 :デフォルトの名無しさん:2006/04/16(日) 00:46:11
大きな二つの流れである関数型と手続き型について議論・学習するスレです。
両者のメリット、デメリット、得意・不得意分野などをまなびませう。

2 :デフォルトの名無しさん:2006/04/16(日) 00:59:14
関数型なんて一部のマニアが趣味で使っているだけだろ。

3 :デフォルトの名無しさん:2006/04/16(日) 01:08:41
手続き型は文系・原始人
関数型は理系・知的

4 :デフォルトの名無しさん:2006/04/16(日) 01:09:18
エージェント指向

5 :デフォルトの名無しさん:2006/04/16(日) 01:28:33
erlangは関数型だけど,実用的なものに使われてるよ。



6 :デフォルトの名無しさん:2006/04/16(日) 06:01:15
一階述語論理は?

7 :デフォルトの名無しさん:2006/04/16(日) 07:30:18
>>2
関数型は馬鹿を切り捨てるぶん、浸透しにくいよね。

8 :デフォルトの名無しさん:2006/04/16(日) 08:28:21
C++はSTLのあたりから結構関数型風に傾いていないか?

9 :デフォルトの名無しさん:2006/04/16(日) 09:15:10
C#でのdelegate、Generics,インターフェースを駆使したものでの生産性と関数型の生産性は異なるの?

10 :デフォルトの名無しさん:2006/04/16(日) 12:26:25
>>7
教育の問題だと思う。初めてプログラミングを教えるときに使う言語をPrologとかSchemeみたいなのにすれば浸透すると思う。
私は命令型の言語よりもPrologのような論理型言語を使った方がプログラムしやすい。

11 :デフォルトの名無しさん:2006/04/16(日) 12:29:59
>>10
Prologは言語というよりも証明支援系・・・かな?

12 :デフォルトの名無しさん:2006/04/16(日) 12:35:27
>>11
ふつうのプログラミング言語だよ。ライブラリは少ないかもしんないけど。

13 :デフォルトの名無しさん:2006/04/16(日) 12:44:23
手続き型→一般人
関数型→厨房・暇人

14 :デフォルトの名無しさん:2006/04/16(日) 13:39:51
手続き型のアホに対する優しさは異常

15 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/04/16(日) 14:35:21
>>18
お前のことだろw



20 :デフォルトの名無しさん:2006/04/16(日) 15:17:58
>>8
関数型というより静的(コンパイル時)に決められるものは
徹底的に静的に決めるということだな。
仮想関数はなるべく使わない。クラスを避ける。
自然と関数指向になる。

21 :デフォルトの名無しさん:2006/04/16(日) 16:45:23
ここで手続き型と関数型の違いについて質問でてるけど、まともな答え返ってこないね。
ttp://pc8.2ch.net/test/read.cgi/tech/1140717775/

22 :デフォルトの名無しさん:2006/04/16(日) 16:46:17
>>20
> 関数型というより静的(コンパイル時)に決められるものは
> 徹底的に静的に決めるということだな。
>仮想関数はなるべく使わない。クラスを避ける。

という説明から

> 自然と関数指向になる。

これにはならんのだが。
関数型というものを、勘違いしている人のいうセリフだな。

23 :デフォルトの名無しさん:2006/04/16(日) 17:14:11
手続き型と関数型の違いはプログラミングスタイルじゃないかな。

  * 手続き型

    状態の変化を脳内でシミュレーションし,プログラムを作成。その状態の変化というのが代入などの副作用。

  * 関数型

    事実を定義し,それらの事実と事実との関係を構築しプログラムを作成。

24 :デフォルトの名無しさん:2006/04/16(日) 17:17:15
関数型、手続き型でおのおの得意なプログラム、苦手なプログラム、出来ないプログラムってあるの?

25 :デフォルトの名無しさん:2006/04/16(日) 17:18:21
できないプログラムはありません。実はラムダ式に帰着できちゃいます。

26 :デフォルトの名無しさん:2006/04/16(日) 17:19:43
関数型の生産性と持続可能な発展性は美味しい

27 :デフォルトの名無しさん:2006/04/16(日) 17:20:35
向き不向きは?
後ラムダ式に帰着できるって言うのはマシン語に帰着できるというような極論?

28 :デフォルトの名無しさん:2006/04/16(日) 17:23:12
遅延評価があるとリアルタイム処理が難しくならない?


29 :デフォルトの名無しさん:2006/04/16(日) 17:26:47
>向き不向きは?
あると思う。
>後ラムダ式に帰着できるって言うのはマシン語に帰着できるというような極論?
その通り。

30 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/04/16(日) 17:31:39
あらゆる計算モデル、つまりチューリングマシン、帰納的関数論、またはActor理論、etc..はλ計算で表現できます。

32 :デフォルトの名無しさん:2006/04/16(日) 17:42:13
結局さぁ・・・
普通のプログラムだと、データ受信したとか、入力があったとか何らかの起点があるよね?
そこからの流れが関数として書かれてるってこと?
状態の保持とかどうすんの?
状態持つとかだったら、オブジェクト型のほうが人の思考になじみやすいってこと?
で、どこら辺で生産性があがるのよ?

33 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/04/16(日) 17:47:23
あ、手続きのは"dekitayo!"とかをstringの変数に入れたほうがよかったか。
バカっぽくてごめん。

35 :30:2006/04/16(日) 17:49:33
関数型には if も else も存在しない。
なぜなら状態という概念が無いから状態によって変化、分岐するということが無いから。

36 :デフォルトの名無しさん:2006/04/16(日) 17:50:19
なぁそのコンパクトに書けるっていうのじゃなくてさぁ・・・ほらこう・・・あるだろ?
関数型がこう・・・いいって言われるものがさぁ・・・あるんだよな?

37 :デフォルトの名無しさん:2006/04/16(日) 17:51:21
生産性は下がるんじゃねーの?関数型はマイナーなんだし。

38 :デフォルトの名無しさん:2006/04/16(日) 17:58:08
>>35
嘘をつくな。
例えば
abs x = if x > 0 then x else -x
は数学的な意味で関数だ。

39 :デフォルトの名無しさん:2006/04/16(日) 18:00:45
>>37
そういう次元の話じゃない。

40 :デフォルトの名無しさん:2006/04/16(日) 18:17:12
関数っていうのは基本的には、
特定の集合に特定の一つの集合を結びつける規則という縛りしかない。

41 :デフォルトの名無しさん:2006/04/16(日) 18:26:42
確かに馬鹿文系に無理に使わせるのは却って生産性を下げるな。
使いこなせないだろうから。


42 :デフォルトの名無しさん:2006/04/16(日) 18:29:41
×生産性があがる
○抽象性があがる

43 :デフォルトの名無しさん:2006/04/16(日) 18:34:20
ラムダとかクロージャとか、
最近の手続き型言語と言われてる言語にも
それなりに導入されてるしな。
直接的なものでなくとも、
言語機能を使えばそれなりに簡単に実装できる、とか。

純粋な手続き型言語ってのはそのうち死滅しそうだが、
だからといって純粋な関数型言語もずっとマイナーでいつづけるだろうな。

44 :デフォルトの名無しさん:2006/04/16(日) 20:00:58
これが手続き型、
if( ... ) { ... } else { ... }

これが関数型。
... ? ... : ...

if を使わないで、三項演算子だけを使って作れば関数型っぽくなる。



45 :デフォルトの名無しさん:2006/04/16(日) 20:02:32
人間の考え方は、手続き型です。

だから手続き型の方が人間に分かりやすいのです。

46 :デフォルトの名無しさん:2006/04/16(日) 20:11:12
>>44
if使う使わないの話は関数型,命令型に関係ない。

もともとCは関数型のスタイルでプログラミングするように設計されてない。Cで関数型プログラミングできないことはないけどやりにくい。

47 :30: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 :デフォルトの名無しさん:2006/04/16(日) 20:39:16
>>47
お前が言うところの「数学的な意味での関数の書き方」て何よ

49 :デフォルトの名無しさん:2006/04/16(日) 20:44:08
>>48
自然言語が入っちゃマズイとか、
連続していないといけないとか、
定義域が実数じゃないといけないとか、

なんだか色々元の定義とは別のもの仮定してそう。

関数型と数学の関数は違うんじゃないのかな。

50 :デフォルトの名無しさん:2006/04/16(日) 20:46:35
>>47
条件分岐のどこに状態がある?値を渡す時間によって帰ってくる値が変わるっていうなら状態があるっていうけど。

51 :デフォルトの名無しさん:2006/04/16(日) 20:48:22
もうこいつら何について話してるのかわかんね。コンテキストがあってねー。

52 :デフォルトの名無しさん:2006/04/16(日) 20:49:46
結論:誰も分かってる奴がいない。

53 :デフォルトの名無しさん:2006/04/16(日) 20:50:55
>>51-52
MediatorパターンとAdapterパターン使って。

54 :38:2006/04/16(日) 21:08:29
>>47
数学を引き合いに出したのがまずかったなら言い直すが、
abs x = if x > 0 then x else -x
は正しいHaskellの関数定義(MLでもちょっといじれば通るはず)。

55 :30:2006/04/16(日) 21:27:18
>54
そういうことでなら納得。確かに参照透過性は損なわれないわけだし。

56 :デフォルトの名無しさん:2006/04/16(日) 21:45:19
つまり、数学のための言語であって
実用的じゃないのが関数型でいいの?

57 :デフォルトの名無しさん:2006/04/16(日) 21:50:40
>>56
よくないです

58 :デフォルトの名無しさん:2006/04/16(日) 21:54:04
>>56
違う。
モデル化する方法が異なるだけ。
ディジタル回路を扱うときに使う言語とアナログ回路を扱うときに使う言語の違いのようなもの。

それに実用的に使える。

59 :デフォルトの名無しさん:2006/04/16(日) 23:03:43
ビジネスというのは最初がローコストに見えることが重要。
安く導入して保守費用で儲けたりさ。そういう観点から見ると手続き型しかありえんのだわ。

60 :デフォルトの名無しさん:2006/04/16(日) 23:24:44
つはっかーと画家

61 :デフォルトの名無しさん:2006/04/17(月) 01:02:51
手続き型の言語ばかりやっていると新しい言語の習得が難しくなりコストがかかる。
Schemeみたいな関数型と手続き型の両方のプログラミングスタイルが気軽に扱える言語を覚えた方がトータルで考えると低コストだと思う。



62 :デフォルトの名無しさん:2006/04/17(月) 03:48:16
手続き型に組み込まれた関数型は実用的だけど、
純粋関数型は実用的だとは思えない。

63 :デフォルトの名無しさん:2006/04/17(月) 03:50:57
たとえば、Javaの総称型が関数型言語の多相型を取り入れたものだということは明らかなんだけど、
元からの言語仕様に強制的にねじ込んだものだからひどく煩雑なつくりになっている。
あれなら素直に関数型言語を使ったほうが良いとさえ思う。

64 :デフォルトの名無しさん:2006/04/17(月) 03:56:53
>>62
純粋関数型言語で作られた実用的なアプリ。

http://www.wings3d.com/

思う、思わないはどうでも良いけど、要は使いようですぜ。
頭脳が固まっちゃったら、もうお仕舞いだけどね。

;; 予め言っておくが、他にはって聞かれたら、次は darcs 出すから聞くなよ。
;; 際限無いからな。

65 :デフォルトの名無しさん:2006/04/17(月) 04:18:01
>>64
英語じゃなくて日本語のやつは無いの?

66 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/04/17(月) 11:49:23
>>68
純粋な関数型ではないけどSchemeだったらクロージャと代入を使ってオブジェクトを作る。
純粋な関数型の場合,詳しくはないけど,クロージャとモナドを使うんじゃない?


70 :デフォルトの名無しさん:2006/04/17(月) 11:52:43
>>69 挿すっと今度は逆にオブジェクト指向を関数型で実現するのに無理してる。最初からオブジェクト指向言語使えばいいのにって感じになるのか?

71 :デフォルトの名無しさん:2006/04/17(月) 12:05:02
>>70
うん。オブジェクト指向で考えた方が楽なら無理して関数型を使う必要はないと思う。SmalltalkとかRubyみたいな言語を使った方がいいと思う。



72 :67:2006/04/17(月) 12:07:44
>>71 それが混在してるのが悩ましいところなんだよな。

73 :デフォルトの名無しさん:2006/04/17(月) 12:34:49
逆に手続き型の言語なのに、マシンの状態をイメージしないで
プログラミングするのはカンベンしてホスイ。人の能力に限りはあるけど、
できるだけそうするように努めるべき。

74 :デフォルトの名無しさん:2006/04/17(月) 12:37:20
>>71 そうすると、関数型で作るときはオブジェクト的な考え方はしないの?
例であげた、ブラウザ作るときに複数ページを保持するようなものはどうするの?

75 :デフォルトの名無しさん:2006/04/17(月) 12:56:54
つStateT

76 :デフォルトの名無しさん:2006/04/17(月) 12:59:16
ストリームとか使うんでない?


77 :デフォルトの名無しさん:2006/04/17(月) 13:07:42
結局状態を保存しないと無理なんじゃ

78 :デフォルトの名無しさん:2006/04/17(月) 14:57:57
実際の動作は状態を保存するようなことになるけど、
形式的にはステップごとに状態をバケツリレーしていく感じ。

手続き型
[状態0] -処理1-> [状態1] -処理2-> [状態2] -> ...

関数型
関数x(.. 関数2( 関数1(状態0) ) .. )

79 :デフォルトの名無しさん:2006/04/17(月) 15:02:09
>>78 処理と処理の間に空白があるときは?たとえば入力してしばらくしてから修正するときとか。
その間はどっかに状態保持するよね?

80 :デフォルトの名無しさん:2006/04/17(月) 15:23:44
Lispいじるときは関数=クロージャだから
あまり「手続き型と真っ向対立」みたいなことは思わないなぁ
各関数が各環境を持っているわけで

81 :デフォルトの名無しさん:2006/04/17(月) 15:29:31
>>79
引数として状態が渡される。
関数nは状態を変更する処理と思えばよい。
入力してしばらくしてからと言う場合はその間に状態を変更する関数が実行されていないか、
もしくは恒等関数( f(x) = x )が実行されていると考えてもよい。

82 :81:2006/04/17(月) 15:34:24
>関数nは状態を変更する処理と思えばよい。
正確には関数nは状態を受け取って次の状態を返す関数。

83 :デフォルトの名無しさん:2006/04/17(月) 15:37:35
>>81 状態を変更する処理が実行されない間は住所録?どこかに保持されるんじゃないんですか?
オブジェクト指向なら普通
class AddressBook{
void Add(Address addr);
void Delete(string key);
}
見たいなクラスでシングルトンかなんかでアクセスされてインスタンスはひとつがずっと保持されるんだが。


84 :デフォルトの名無しさん:2006/04/17(月) 15:40:18
>>83
引数として状態が渡されて、引数はその関数を計算する間定数として保持される。

85 :デフォルトの名無しさん:2006/04/17(月) 15:46:00
>>84 いやだから、入力処理があるよね?で削除処理があるよね?その間どこに保持されるんですか?



86 :67:2006/04/17(月) 15:50:05
>>85 そういうのは副作用で系外に・・・
って、そういうのは反則?

87 :デフォルトの名無しさん:2006/04/17(月) 15:50:36
>>83
純粋でない関数型言語の場合は、普通にローカル変数を使う。
x = add_address(empty_address_book, "a");
print(x);
// ここで何か別のことをやる。
x' = add_address(x, "b");
print(x');

純粋な関数型言語ではいろいろ妙なことをやるけど、
結果的に似たようなコードになる。
そもそも、逐次処理は手続的に書くのが最善の事が多いから、
関数型言語でも手続的に書けるようになっている。

88 :デフォルトの名無しさん:2006/04/17(月) 15:51:53
純粋じゃない関数的プログラミングっつったら↓みたいなイメージあるけど間違ってる?

AddressBookって変数を用意して
AddressBook = CreateAddressBook();
AddressBook = AddAddress( AddressBook "Tokyo");
AddressBook = AddAddress( AddressBook "Osaka");
AddressBook = DeleteAddress( AddressBook "Tokyo");

みたいにしていくイメージがあるけどこれでいいの?

89 :デフォルトの名無しさん:2006/04/17(月) 15:52:53
「状態」っていうのを変数と値の組を記録したデータベースと考えて、
状態0はそれが空のものと考えると、

状態1 = {(住所録, {})} = 新しい住所録作成(状態0)
状態2 = {(住所録, {Aさんの住所})} = Aさんの住所追加(状態1)
状態3 = {(住所録, {Aさんの住所, Bさんの住所})} = Bさんの住所追加(状態2)
状態4 = {(住所録, {Bさんの住所})} = Aさんの住所削除(状態3)

といった感じ。

90 :88:2006/04/17(月) 15:53:03
リロードし忘れましたごめんなさい

91 :デフォルトの名無しさん:2006/04/17(月) 15:55:12
>>89 結局そのいずれかの状態にあたるものはグローバル変数なり何なりアクセスできるところにおいてあるということ?

92 :デフォルトの名無しさん:2006/04/17(月) 15:57:51
>>91
いや、その状態にアクセスする関数間を全部引数として引きまわすのが原則。

93 :デフォルトの名無しさん:2006/04/17(月) 15:59:10
>>92 だとしたら、入力とか削除とかなにされるかわからないときはどんなコードになるんです?

94 :デフォルトの名無しさん:2006/04/17(月) 16:01:31
>>93
>入力とか削除とかなにされるかわからない
意味が分からん。もうちょっと詳しく。

95 :デフォルトの名無しさん:2006/04/17(月) 16:05:22
>>94 んーたとえばさっきの住所録みたいなやつ。
>>89 みたいなやつでおのおのの作業(A追加、B追加、A削除)の間にユーザーが行うまでに間がある場合

96 :92:2006/04/17(月) 16:07:15
ごめん。>>92は俺の勘違い。
>>89にあるような「状態」はグローバルにあると考えていい。

97 :デフォルトの名無しさん:2006/04/17(月) 16:11:32
オブジェクト指向だとデータとメソッドを一体化させるけど、関数型はそれをしないということ?
あと>>96のようにするならば、関数型の状態を変えないからバグが出にくいとかというのはそのばあいには適用されないということ?

98 :96:2006/04/17(月) 16:15:47
混乱させてすまん。>>89の話は(俺が正しく理解してるなら)どちらかというと概念上の話
(あるいは実装の詳細)で、
「関数型言語のインタプリタを作る際にグローバルな状態を活用できる」位の意味に取ってくれればいい。
実際の関数プログラミングでは、データは全部関数間を引きまわす。

99 :96:2006/04/17(月) 16:17:57
で、
>おのおのの作業(A追加、B追加、A削除)の間にユーザーが行うまでに間がある場合
だけど、>>87の説明で分からないところはあるか?

100 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/04/17(月) 16:24:03
>>99 >>87でわからないところは特にないです。
が、プログラム全体の構造がやっぱりいまいち理解できてないかな・・・

102 :デフォルトの名無しさん:2006/04/17(月) 16:28:31
自分はハッカーと画家で言われてたようなLISPのきわめて高い生産性に興味があったんだがそれは>>9でいわれてるようなもので可能なものとはまったく異なるものなの?

103 :デフォルトの名無しさん:2006/04/17(月) 16:30:07
LISPはプログラミング言語じゃありません

104 :デフォルトの名無しさん:2006/04/17(月) 16:40:14
>>103
LISPがプログラミング言語って書いてあるのはどのへんですか?

105 :96: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 :デフォルトの名無しさん:2006/04/17(月) 16:59:29
>>105 そうかくと手続き型と何もかわらんねぇ。

107 :デフォルトの名無しさん:2006/04/17(月) 17:20:02
>>105
最後のifに対応するelseがないのはまずくない?
まぁ、 else loop(book); でもつければいいだけのことだけど。

108 :デフォルトの名無しさん:2006/04/17(月) 20:20:54
>>66
レコード型で表現可能

関数型言語でオブジェクト指向はできるかどうか、という質問は非常に多いね。
関数型言語のスレには是非テンプレに入れておいてもらいたいな。

109 :デフォルトの名無しさん:2006/04/17(月) 22:59:13
ステートマシンみたいな状態の保存必須の事を関数型言語でどうやって表現するの?
結局(setq hoge (func fuga))なの?

というか状態の保存って概念は関数型とか以前な話でFA?


110 :デフォルトの名無しさん:2006/04/17(月) 23:11:09
>>109
普通に表現できる。
type StateMachine = Input -> (Output, StateMachine)
言い替えると、
「ステートマシンとは、Inputを引数に取って、Outputとステートマシンを返す関数である」
とする。

111 :デフォルトの名無しさん:2006/04/17(月) 23:57:30
>>109
だから、チューリングマシンでできることはλ計算でできるんだって。
C言語やJavaのような代入型言語でできて関数型言語でできないことはないの。

112 :デフォルトの名無しさん:2006/04/18(火) 00:16:06
保守性とか可読性とかまったく違うところ目指してる?

113 :デフォルトの名無しさん:2006/04/18(火) 02:54:34
はい

114 :デフォルトの名無しさん:2006/04/18(火) 03:25:07
関数型の利点
http://www.sampou.org/haskell/article/whyfp.html

115 :デフォルトの名無しさん:2006/04/18(火) 10:49:46
代入型言語でプログラミングするなら、レジスタ、CPUキャッシュ、物理メモリの状態を
把握できるようになるべき。それをして初めて関数が多言語並みの厳密なプログラミングができるようになる。
代入型言語でプログラミングしてるやつはやってることがいい加減なくせにそのことにあまりにも無頓着すぎ。

116 :デフォルトの名無しさん:2006/04/18(火) 10:52:02
>>115
> 代入型言語でプログラミングするなら、レジスタ、CPUキャッシュ、物理メモリの状態を
> 把握できるようになるべき。
それはアセンブリ言語やらC言語などの比較的低級言語の場合だけ。
高級なプログラミング言語では、そういった低レベルなことを忘れても良いように作られるべきなんだよね。

117 :デフォルトの名無しさん:2006/04/18(火) 10:58:46
>>116
>高級なプログラミング言語では、そういった低レベルなことを忘れても良いように作られるべきなんだよね。

これはドキュンコーダー向けの愚民化コピーだろう。こんなの真に受けてどうするw

118 :デフォルトの名無しさん:2006/04/18(火) 11:01:20
>>115
>関数が多言語並みの厳密なプログラミング

具体的にはどういう事?
「物理メモリの状態」というのも具体的に何を指しているの?

119 :デフォルトの名無しさん:2006/04/18(火) 11:03:51
>>115
日本語でおk

120 :無知蒙昧:2006/04/18(火) 11:07:22
http://www.sampou.org/haskell/article/whyfp.html
この文章では、説得力ゼロじゃんとか感じた無知蒙昧なオイラにだれかご教授いただけると幸いです。
ここに書いてあるメリットは、最近はC#でもJavaでもPerlでも容易かつスムーズにできると思うんですが。
high-orderはC#の匿名メソッドで。
遅延評価はデザインパターンで。
もちろん、シンタックスは、関数型のが美しいし、可読性もよいけど、
この文章からだと、そんな劇的に生産性が異なるほどとは、ぜんぜんピンときません。
自分でdynamic arrayのクラスを切って、それでLISPのmap関数やapplyに
ラムダ式を渡すような感じで匿名メソッド(クロージャっぽい機能もある)を
渡すように記述することで、極力foreachやforを使わないように書く癖がついてますし。
つまり、それらをデータ構造定義と数式で書き直したとしても、
大して違いはないようなやたらと宣言的に「見える」コーディングスタイルなわけなんですが。
状態云々とか、宗教じゃなくって、関数型言語だと、具体的に、どうしてこれよりも
ずっとソースコード量が減るのか、そこを教えて欲しいです。

121 :デフォルトの名無しさん:2006/04/18(火) 11:07:34
>>117曰く、「俺は凄いコーダなんだぜ」

122 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/04/18(火) 12:11:01
C#とかだと変数の型宣言が必須だから、型推論してくれるHaskellと比べるとその分冗長になるとは思うが、
同じ物を同じようなやり方で書くのなら見た目がほとんど同じになるのは当然でしょう。

125 :無知蒙昧:2006/04/18(火) 12:18:57
型推論自体は、関数型言語とは関係ないですよね。
だって、手続き型なのに型推論機能のついている言語はありますよね。
Pythonとか。
C#の次のバージョンからは、型推論機能も少しは入るらしいし。
「同じものを同じようなやり方で書く」と言っているのではなく、
「より少ないソースコード量やシンプルな表現で記述しようとするにも関わらず、
避けがたい結果として、同じようなソースコード量や表現になってしまう」
ことを問題としています。

126 :デフォルトの名無しさん:2006/04/18(火) 12:39:24
関数型言語なら短くなる、じゃなくて、
lisp的なマクロがある言語なら短く書ける、じゃねーの?

127 :デフォルトの名無しさん:2006/04/18(火) 13:03:46
短さならPerl最強

128 :& ◆nF6VLM6wpw :2006/04/18(火) 13:10:48
実感値としては、中規模以上のプログラムだと、
「短さならPerl最強」は完全に間違いだと思う。
「lisp的なマクロがある言語なら短く書ける」は結構
実質的には当たっているが、関数型言語の話とは関係ない。
だって、LISPマクロと同等の機能を手続き型言語に入れれば
それで済んじゃう話だもん。

129 :デフォルトの名無しさん:2006/04/18(火) 13:20:19
.NETで使える関数型ってあるの?

130 :デフォルトの名無しさん:2006/04/18(火) 13:21:57
Pythonは動的型付けであって、型推論ではないでしょ。

131 :デフォルトの名無しさん:2006/04/18(火) 13:24:58
純粋関数型+変数への代入機能(状態保存機能)=手続き型
っていう認識でおk?

132 :デフォルトの名無しさん:2006/04/18(火) 13:37:13
>>128
それを言っちゃおしまい。

「関数型言語なら短く書ける」は結構実質的には当たっているが、本質的ではない。
だって、関数型言語と同等の機能を手続き型言語に入れればそれで済んじゃう話だもん。

でも、ほいほい何でもかんでも入れちゃうのは文法とかの整合性が取れなくなったりしてまずいと思う。

133 :デフォルトの名無しさん:2006/04/18(火) 13:54:52
>.NETで使える関数型ってあるの?
http://d.hatena.ne.jp/akiramei/20040305
Haskell、もStandardMLも、LISPもありますよ。


134 :デフォルトの名無しさん:2006/04/18(火) 14:08:37
>>131たぶんおk

135 :デフォルトの名無しさん:2006/04/18(火) 14:19:55
>>134
でたらめ言うな。

136 :デフォルトの名無しさん:2006/04/18(火) 15:32:24
関数型ってのは関数に値を渡して返ってきた値をまた他の関数へ渡す。このようなスタイルでプログラムを書いていく言語を関数型と言って,代入はあまり使われない。

純粋って言われるのはホントに関数と関数との組合せでプログラムを組み,代入を使わない。又は,代入が使えない。

命令型ってのは変数の値を代入により変えていくようなスタイルでプログラムを書くための言語。

別に関数型だからと言って命令型のプログラムが作れないわけではない。同様に命令型の言語でも関数型プログラミングは可能。

ただ,設計の目的が異なるため関数型ように設計された言語は関数型のプログラムを書き易い。

137 :デフォルトの名無しさん:2006/04/18(火) 15:57:48
C 言語だとカリー化とかがなぁ。
こんな風にゴリ押しできないこともないみたいだけど、
何だかなぁ。

ttp://nicosia.is.s.u-tokyo.ac.jp/pub/essay/hagiya/h/curry

138 :デフォルトの名無しさん:2006/04/18(火) 16:14:00
ハギヤ先生って今のC++についてはどう思ってるんだろ

139 :デフォルトの名無しさん:2006/04/18(火) 16:33:10
カリー化もそうだが、ラムダはもっと深刻かも。
GCC の内部関数を利用すれば、
近い事はできなくもないが・・・。

140 :デフォルトの名無しさん:2006/04/18(火) 16:55:38
boost:lambda も面白いな

141 :デフォルトの名無しさん:2006/04/18(火) 18:08:59
>>136 純粋な関数がたって状態の管理どうするの?

142 :デフォルトの名無しさん:2006/04/18(火) 18:57:15
>>141
>>110みたいにするのでは?

143 :デフォルトの名無しさん:2006/04/18(火) 19:15:50
>>141 んー代入と何が違うのかわからん・・・orz


144 :デフォルトの名無しさん:2006/04/18(火) 19:20:14
すべての処理を const への参照を取って const への参照を返す
って書き方にしたら、関数型言語っぽくなる?

145 :デフォルトの名無しさん:2006/04/18(火) 19:20:32
状態を扱うときに代入スタイルと大差なくなるのは自然じゃないか?

146 :デフォルトの名無しさん:2006/04/18(火) 19:22:14
>>145>>143へのレス

147 :デフォルトの名無しさん:2006/04/18(火) 20:35:40
>>144
「ほとんどすべての変数を const」 にすると相当それっぽくなる。

148 :デフォルトの名無しさん:2006/04/18(火) 20:46:11
>>147
関数内部の一時的な自動変数もだめ?
もちろん副作用は起こさないようにして。

149 :デフォルトの名無しさん:2006/04/18(火) 21:01:59
処理速度は関数型の方が速いの?
代入行わないからなんとなく速そうなんだけど。

150 :デフォルトの名無しさん:2006/04/18(火) 21:03:54
>>149
の真ん中あたり
ttp://www.unixuser.org/~euske/doc/python/python-lisp-j.html

151 :デフォルトの名無しさん:2006/04/18(火) 21:09:21
>>148
お遊びだから自分が満足できるだけやればいいんじゃない?
とりあえず for (int i = 0; i < 10; ++i) が禁止になるだけでも結構楽しいよ。

152 :デフォルトの名無しさん:2006/04/18(火) 21:11:26
>>148
>関数内部の一時的な自動変数もだめ?
関数型の特徴(利点・欠点)はそういう小規模なレベルで特に顕著だと思う。

153 :デフォルトの名無しさん:2006/04/18(火) 21:13:21
>>151
それくらいだと、末尾再帰の最適化を期待して書くのと
あんまり変わらないかな

154 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/04/18(火) 23:07:44
>>154
はいはい、λ式があれば条件分岐もできるってことね。

156 :デフォルトの名無しさん:2006/04/19(水) 00:41:05
Smalltalkもifがないよね。

157 :デフォルトの名無しさん:2006/04/19(水) 00:44:11
参照透明性(同じのを渡せばいつも同じ答えが返ってくる性質)が保たれていると,コンパイル時の最適化がしやすいから,速くできる。

その分,代入があるといつも同じ状況に応じ答えが違うから,コンパイル時にコードを書き換えたりするような最適化がしにくい。あまり速くできない。

158 :デフォルトの名無しさん:2006/04/19(水) 01:20:41
巨大配列を扱うような数値計算って
純粋関数型で扱えるの?

159 :デフォルトの名無しさん:2006/04/19(水) 01:41:58
>>158
苦手かもしれないけど、出来ないことはない。
基本的に、手続き型言語で表現できることは
(破壊的代入も含めて)純粋関数型言語でも表現できる。
例えばHaskellでは、普段使う変数は変更不可だし、普段使う関数に副作用はないけど、
効率よく変更可能な「変数もどき」や副作用つきの「関数もどき」がある。

160 :デフォルトの名無しさん:2006/04/19(水) 03:50:11
>>159
なるほど。
やっぱそのあたりは
如何に純粋関数型言語と言えども
使えるようにはなってるんだ。
ただ、一工夫してあるということやね?

161 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/04/19(水) 22:16:31
>>161
ttp://pggirls.asukaze.net/index.php?%B2%E8%C1%FC%2FHaskell%A4%BF%A4%F3

163 :デフォルトの名無しさん:2006/04/19(水) 22:48:25
神さまありがとう
ぼくに友達をくれて

Haskell に会わせてくれて
Haskell に会わせてくれて

ありがとうぼくの友達
Haskell に会わせてくれて

164 :デフォルトの名無しさん:2006/04/19(水) 22:57:37
Haskellたんはツンデレですか?

165 :デフォルトの名無しさん:2006/04/19(水) 22:58:14
Haskell で射精した。

166 :デフォルトの名無しさん:2006/04/20(木) 21:46:32
>>163
元ネタの悪党が友達ってのもすげぇ詩だよな


167 :デフォルトの名無しさん:2006/04/20(木) 23:49:33
保守の都合でここにカメムシ置いときますね
       ,.
.._      /  プ〜ン
  \ __,!
    〕-`ー;、
  」`;{ヾ ̄.} l'_
  _/~| \l }=、
   <ヽ/ `i/  \._
    _)

168 :デフォルトの名無しさん:2006/04/21(金) 10:40:15
何でカメムシなんだよ?

169 :デフォルトの名無しさん:2006/04/21(金) 11:36:55
カメムシってなんとなくラムダに見えなくない?

170 :デフォルトの名無しさん:2006/04/21(金) 11:50:14
岩手の喧嘩祭といえば、六尺褌一丁の男達が、神輿を担いでぶつかり合う、
勇壮な祭として、この地方に知られている。
祭のあと、男達は集会所に集まり、普段着に着替え、飲み合う。
六尺は、激しい祭でドロドロボロボロになるから、使い捨てで、ゴミとして出される。
俺はいつもそれが狙いだ。
捨てられている六尺の、できるだけ汚れてる奴を10数本ほど、
こっそりさらって家に持ち帰る。
そして、深夜、俺一人の祭が始まる。
俺はもう一度汚れた六尺のみ身に付け、部屋中にかっさらってきた六尺をばら撒き、
ウォーッと叫びながら、六尺の海の中を転げ回る。
汚れた六尺は、雄の臭いがムンムン強烈で、俺の性感を刺激する。
前袋の中のマラは、もうすでに痛いほど勃起している。
六尺の中に顔を埋める。臭ぇ。
汗臭、アンモニア臭や、股ぐら独特の酸っぱい臭を、胸一杯に吸い込む。溜まんねえ。
臭ぇぜ、ワッショイ! 雄野郎ワッショイ!と叫びながら、前袋ごとマラを扱く。
嗅ぎ比べ、一番雄臭がキツイやつを主食に選ぶ。
その六尺には、我慢汁の染みまでくっきりとあり、ツーンと臭って臭って堪らない。
その六尺を締めてた奴は、祭で一番威勢が良かった、五分刈りで髭の、40代の、
ガチムチ野郎だろうと、勝手に想像して、鼻と口に一番臭い部分を押し当て、
思いきり嗅ぎながら、ガチムチ野郎臭ぇぜ!俺が行かせてやるぜ!と絶叫し、
マラをいっそう激しく扱く。
他の六尺は、ミイラのように頭や身体に巻き付け、
ガチムチ野郎の六尺を口に銜えながら、ウオッ!ウオッ!と唸りながらマラを扱きまくる。
そろそろ限界だ。
俺は前袋からマラを引き出し、ガチムチ野郎の六尺の中に、思いっきり種付けする。
どうだ!気持良いか!俺も良いぜ!と叫びながら発射し続ける。
本当にガチムチ野郎を犯してる気分で、ムチャクチャ気持ち良い。
ガチムチ野郎の六尺は、俺の雄汁でベトベトに汚される。
ガチムチ野郎、貴様はもう俺のもんだぜ!
俺の祭が済んだあと、他の六尺とまとめて、ビニール袋に入れ押し入れにしまい込む。
また来年、祭で六尺を手に入れるまで、オカズに使う。
押し入れにはそんなビニール袋がいくつも仕舞ってあるんだぜ。

171 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/04/21(金) 21:35:24
今、lispを少し勉強したけど、たいして違いがわからん。
関数形式で表すだけで、やっていることは同じように感じる。

174 :デフォルトの名無しさん:2006/04/21(金) 21:51:06
>>173
ははは、奇遇だな
俺もFortranとCの違いがわからないんだよー

175 :デフォルトの名無しさん:2006/04/22(土) 00:05:38
俺もvbとjavaの違いが分からん

176 :デフォルトの名無しさん:2006/04/22(土) 00:56:46
おらはC#とJavaの違いがわからん

177 :デフォルトの名無しさん:2006/04/22(土) 02:40:55
俺はひまわりとなでしこの違いが分からん。

178 :デフォルトの名無しさん:2006/04/22(土) 03:16:22
>>173
Common Lisp はマルチパラダイムな言語だからね。
違いを感じたいなら Scheme やった方が良いかと。

179 :デフォルトの名無しさん:2006/04/22(土) 03:17:00
ネスカフェとマキシムの違いが分からんが、言語は処理系の違いにもうるさい(やかましいだけ)

180 :173:2006/04/22(土) 10:19:36
もしかして、何を皮肉ってるか理解されてない?

181 :デフォルトの名無しさん:2006/04/22(土) 12:13:28
>>180
もしかして、何を皮肉ってるか理解されてない?

182 :デフォルトの名無しさん:2006/04/22(土) 12:18:03
みんな、きもちいいことしてる?

183 :デフォルトの名無しさん:2006/04/22(土) 12:34:28
まあ、俺が言いたいことはだな、Python最高

184 :デフォルトの名無しさん:2006/04/22(土) 14:19:43
Python は関数型と手続き型のいいとこ取り?

185 :デフォルトの名無しさん:2006/04/22(土) 14:25:10
>>184
全然違う

186 :デフォルトの名無しさん:2006/04/22(土) 15:08:49
>>185
お前が全然違う

187 :デフォルトの名無しさん:2006/04/22(土) 17:03:12
pythonはなにげにぼくらの期待の星

188 :デフォルトの名無しさん:2006/04/22(土) 17:06:29
ここで空気を読まずにHSP!HSP!HSP!

189 :デフォルトの名無しさん:2006/04/22(土) 18:14:13
戯言を皮肉とは言いませんね。

190 :デフォルトの名無しさん:2006/04/22(土) 19:00:43
関数型言語はたしかにアルゴリズムを簡潔に表現できる。
が、パフォーマンスを気にしてチューニングすると
プログラムが手続き型言語っぽくなってしまう。
機械語自体が手続き型言語だから。
ならはじめから手続き型言語でいいじゃんって思う今日このごろ。

191 :デフォルトの名無しさん:2006/04/22(土) 19:05:34
ラムダ計算を効率よくできるラムダコンピュータを作ってください

192 :デフォルトの名無しさん:2006/04/22(土) 19:18:34
>>190
それって disassemble とかして検証してるの?

193 :デフォルトの名無しさん:2006/04/22(土) 19:29:00
完璧な処理系が作れることを前提とした言語

194 :デフォルトの名無しさん:2006/04/22(土) 19:50:15
>>191
関数型言語の歴史=如何にλ式を現行マシンで効果的にコンパイルするか

じゃないの。

195 :デフォルトの名無しさん:2006/04/22(土) 20:04:43
>>194
関数型言語の歴史
ではなくて、
関数型言語の実装の歴史
でしょ。

196 :デフォルトの名無しさん:2006/04/22(土) 22:57:29
>>184
それはRubyの話。

197 :デフォルトの名無しさん:2006/04/22(土) 23:03:38
>>178
Schemeですか。
了解。

198 :デフォルトの名無しさん:2006/04/22(土) 23:13:58
純粋じゃない関数的プログラミングについて書いてるいい本って何かない?
とりあえず onlisp は読んだ。

199 :デフォルトの名無しさん:2006/04/22(土) 23:23:46
関数型言語と関数言語ってくべつして呼称すべきですよね?

200 :デフォルトの名無しさん:2006/04/23(日) 01:38:42
>関数言語
はつみみです


201 :デフォルトの名無しさん:2006/04/23(日) 07:35:52
関数言語って何ですか?

202 :デフォルトの名無しさん:2006/04/23(日) 10:26:42
俺が最初にC言語の勉強をしたとき(もう15年以上前だけど)

「C言語は関数型言語だよ、関数言語じゃないよ、
 あくまで「関数型」だよ。関数の形をしているけど、
 同じ引数を与えたからといって同じ結果が得られるとは
 限らないでしょ?だから関数じゃない。関数の形をしているだけ。
 これに対して、世の中には本当の関数言語というのがある。」

と説明してあった本がありました。

203 :デフォルトの名無しさん:2006/04/23(日) 10:37:53
>>202
晒しキボン

204 :デフォルトの名無しさん:2006/04/23(日) 14:32:20
その基準で言うと、Haskellみたいなのが「関数言語」っつー事?

205 :デフォルトの名無しさん:2006/04/23(日) 15:48:13
「C言語」と言ってる時点で駄目本決定。

206 :デフォルトの名無しさん:2006/04/23(日) 15:56:08
>>202
つーことは関数型言語には現在の時刻を返す関数はないんだな?

207 :デフォルトの名無しさん:2006/04/23(日) 15:58:48
確かに昔はそんな本がゴロゴロしていたな。

さすがに今はそんな本は見かけなくなった。
google で検索をかければ、それが嘘か本当かすぐ分かるもんな。
いい時代になったもんだ。


208 :デフォルトの名無しさん:2006/04/23(日) 16:01:21
あるよ。
f(x) = x

209 :デフォルトの名無しさん:2006/04/23(日) 16:02:00
>>205
void乙

210 :デフォルトの名無しさん:2006/04/23(日) 16:45:41
作って分かるCプログラミングは隠れた名著

211 :デフォルトの名無しさん:2006/04/23(日) 21:41:40
なんで「C言語」と言ったらダメなのか分からんのだが。

212 :デフォルトの名無しさん:2006/04/23(日) 22:13:53
>>210
ほんとに隠れてるよな

213 :デフォルトの名無しさん:2006/04/23(日) 22:20:16
>>211
BASIC言語
C#言語
C++言語
Pascal言語
Java言語
Javascript言語
FORTRAN言語
Perl言語
Ruby言語
Python言語
Lisp言語
OCaml言語
Haskell言語
Prolog言語

214 :デフォルトの名無しさん:2006/04/23(日) 22:27:55
>>213
それと同じことだろ?
多少不恰好なだけであって、
そんなんでダメと言い切る理由が無い。

215 :デフォルトの名無しさん:2006/04/23(日) 22:32:00
隠れて分かるCプログラミング


216 :デフォルトの名無しさん:2006/04/23(日) 22:33:19
http://homepage3.nifty.com/catfood/up/src/up4748.txt
http://www.google.com/Top/Computers/Programming/Languages/

ここに出ている言語を、関数型と、手続き型に分類してください

217 :デフォルトの名無しさん:2006/04/23(日) 22:43:54
>>216
「論理型」とかはどうすんのさ?

218 :デフォルトの名無しさん:2006/04/23(日) 23:21:04
>216
一通り読んで言語名でないものは取り除けよ。
マークアップ言語もな。

219 :デフォルトの名無しさん:2006/04/24(月) 10:23:58
>>214
誰も言ったらダメなんて言ってないんだが。

220 :デフォルトの名無しさん:2006/04/24(月) 13:08:01
>>219 >>205
"C"だと短くて日本語の語感としてあわないからなんだろうな。


221 :デフォルトの名無しさん:2006/04/24(月) 13:59:31
C言語って全く違和感がない。
当方、38歳。

222 :デフォルトの名無しさん:2006/04/24(月) 14:55:01
私も違和感ない。
当方、21歳。

223 :デフォルトの名無しさん:2006/04/24(月) 14:57:52
同じく違和感ない。
当方、27歳。

224 :デフォルトの名無しさん:2006/04/24(月) 15:58:49
for文に違和感あり。
当方、20歳

225 :デフォルトの名無しさん:2006/04/24(月) 18:10:13
さらにボケて

226 :デフォルトの名無しさん:2006/04/24(月) 18:32:04
高子さん、晩ご飯はまだかいの

227 :デフォルトの名無しさん:2006/04/24(月) 18:42:30
さきほどお召しになりましたでしょ。

228 :デフォルトの名無しさん:2006/04/24(月) 23:46:57
Cってまだ経験無い
当方、37歳。

229 :デフォルトの名無しさん:2006/04/25(火) 00:00:13
Cに満たない人も多いので油断は禁物でーす

230 :デフォルトの名無しさん:2006/04/25(火) 00:30:41
中括弧{}だらけに違和感あり。
当方、32歳。

231 :デフォルトの名無しさん:2006/04/25(火) 00:54:31
Lisper?

232 :デフォルトの名無しさん:2006/04/25(火) 01:40:27
Delphian?

233 :デフォルトの名無しさん:2006/04/25(火) 02:42:41
Haskeller?

234 :デフォルトの名無しさん:2006/04/25(火) 06:02:55
実はコボラーだったりして。

235 :デフォルトの名無しさん:2006/04/25(火) 10:59:22
こぼちゃんは手続き型?

世代が違うので分からん

236 :デフォルトの名無しさん:2006/04/25(火) 14:22:54
コボルはデータ指向型という感じだなぁ。

237 :デフォルトの名無しさん:2006/04/25(火) 14:43:13
>>236
データ指向型って何ですか?

ん〜なかなかイメージ湧きません。


238 :デフォルトの名無しさん:2006/04/25(火) 15:44:01
SQLとか

239 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/04/25(火) 20:53:30
>>240
言いたいことは分かるが、それを指してカリー化と言うのは誤用じゃないだろうか。

242 :241:2006/04/25(火) 20:57:05
説明不足だな。
add(x)(y)という形でaddを使えるように定義するのがカリー化で、
>>240みたいなのは「関数の部分適用」というはず。

243 :デフォルトの名無しさん:2006/04/25(火) 21:01:24
>>206
ねーよww

244 :デフォルトの名無しさん:2006/04/25(火) 21:12:00
Concurrent Cleanにはあるが。

245 :デフォルトの名無しさん:2006/04/25(火) 23:17:36
カリー化のカリーはハスケル・カリーのカリー
だからみんなHaskellをやるんだ!

246 :デフォルトの名無しさん:2006/04/25(火) 23:59:22
とん汁作ってたら味付けが変になったんで
適当に香りの強めの香辛料がばがば入れてったら
カリー化した

247 :デフォルトの名無しさん:2006/04/26(水) 00:20:48
VBプログラマ Cプログラマのお仕事
http://www.vb-c.net/

248 :デフォルトの名無しさん:2006/04/26(水) 00:24:43
>>243
^^;

249 :デフォルトの名無しさん:2006/04/26(水) 01:27:01
カリー化使ったコードは遅い。
スピードが要求されるアルゴリズムの計算では避けるのが普通。
カリー化とはそういうもの。
わざわざHaskellに乗り換えてまで使うほどの価値はない。

250 :デフォルトの名無しさん:2006/04/26(水) 01:30:34
カリー化でうれしいのは

  * 関数の再利用率が高まる
  * ソースコードの可読化向上

でスピード要求せずにコードの美しさを追求するならいいかもね。

251 :デフォルトの名無しさん:2006/04/26(水) 01:36:07
Haskellって人にやさしいんじゃなくてコンパイラにやさしい言語なんじゃないかっておもた。

Haskellってほんとに使う人のことを考えて設計されてんのかな?
変数の名前付けとかインタプリタの対話性の難しさはきつい

252 :デフォルトの名無しさん:2006/04/26(水) 01:38:33
せめてラムダ計算の何たるかを知ってから、関数型言語を語ってくれ。

253 :デフォルトの名無しさん:2006/04/26(水) 01:54:43
>>252
λ計算が分からないと関数型言語を使っちゃいけないと?

254 :デフォルトの名無しさん:2006/04/26(水) 01:57:12
使ってもいいけど語っちゃいかんだろな。

255 :デフォルトの名無しさん:2006/04/26(水) 01:59:38
>>254
λ計算まじめにやってないから資格ないかぁ。
全ての計算がλ式で表わせるってのがλ計算?

まぁλ計算って何だといわれて答えられないから簡潔に教えてください。λ計算って何?

256 :デフォルトの名無しさん:2006/04/26(水) 03:47:10
>>251
コンパイラにやさしいって事は無いんじゃないの。
コンパイル遅いらしいし、文法もかなり人間向きな感じ。

257 :デフォルトの名無しさん:2006/04/26(水) 05:59:21
遅レスだが、CをC言語って呼ぶのは検索し辛いからだと思ってた…
考えてみりゃCってWeb普及前からあるんだっけ。

258 :デフォルトの名無しさん:2006/04/26(水) 08:34:24
お前が生まれる前からあるよ

259 :デフォルトの名無しさん:2006/04/26(水) 11:39:09
>>255
・変数はλ式
・M,Nがそれぞれλ式なら(MN)もλ式
・xが変数でMがλ式なら(λx.M)もλ式

260 :デフォルトの名無しさん:2006/04/26(水) 12:03:08
まぁ、興味があったら以下の本も読んでおくと良いよ(難易度は上から順、重要度は下から順)
・コンピュータサイエンス入門-論理とプログラム意味論
・計算論-計算可能性とラムダ計算
・The Lambda Calculus: Its Syntax and Semantics

261 :デフォルトの名無しさん:2006/04/26(水) 12:11:27
アマ向きだなハスケルは
速度はまあいいから簡単にスッキリ記述できてバグも高度に少なく
保守も容易で持続可能な発展を見込める
ただし、言語自体理解するのに高度な知能を要求されるという矛盾も秘めている
頭はいいけど資産が無い奴向きかな?

262 :デフォルトの名無しさん:2006/04/26(水) 12:15:07
使う分には知識はそんなに要らないよ。
使うための環境をそろえている、まさにその段階が現状なんだから、もう少し待たないとね。

263 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/04/26(水) 15:17:19
λは単に基礎
ジェネリックを使ってどのように全体を構築するか考える方が大事


265 :デフォルトの名無しさん:2006/04/26(水) 18:28:38
>>260
> まぁ、興味があったら以下の本も読んでおくと良いよ(難易度は上から順、重要度は下から順)
Barendregtが一番易しいということ?
あの電話帳を全部読むのはかなりの高難易度だと思うが。飛躍は少ないけど。

266 :デフォルトの名無しさん:2006/04/26(水) 18:39:03
>>265
難易度は上から順 って言ったら、一番上に書いてあるのが一番易しいってことだろ・・

267 :デフォルトの名無しさん:2006/04/26(水) 18:53:02
>>266
こういう場合高い方が上じゃね?


268 :デフォルトの名無しさん:2006/04/26(水) 18:56:05
>>267
逆だとおも

269 :デフォルトの名無しさん:2006/04/26(水) 19:05:25
「以下は、難度について昇順、重要度について降順」
これが言いたかった事か?

270 :デフォルトの名無しさん:2006/04/26(水) 19:15:55
難易度順と言うと簡単な方から難しい方へ、
重要度順と言うと重要な方から重要じゃない方へ、
というイメージがある。

271 :デフォルトの名無しさん:2006/04/26(水) 19:18:12
まぁ、そんなことはどうでもいいことだ。

272 :デフォルトの名無しさん:2006/04/26(水) 19:37:48
>260は「重要度は下から順」を「一番下が一番重要」という意味で使っている。
これに基づけば、「難易度は上から順」は「一番上が一番難易」と解釈できる。

「一番難易」を「一番難」とみなすか「一番易」とみなすかが意見のわかれる
ところだな。


273 :デフォルトの名無しさん:2006/04/26(水) 19:43:41
まあ、紛らわしい表現なのは確かだな。
長くなっても、曖昧さを無くした表現を採るべきだな。

274 :デフォルトの名無しさん:2006/04/26(水) 20:03:26
自然言語だし、いいんじゃない?

275 :デフォルトの名無しさん:2006/04/26(水) 20:06:45
コミュニケーションがとれればいいけどね。
とれてない以上、何とかした方が良さげ。

276 :デフォルトの名無しさん:2006/04/26(水) 20:26:42
たとえば、時計回りを物理学では右回りというが、生物学では左回りだという。
常識的には時計回りは右回りだと思っている人が大半だろう。
新聞のような文章でも時計回りと右回りは同じ意味で使っているし、自然言語では社会通念としての「常識」というのが重要なのだろうね。
論文でもない限り、そんなに厳密にしなくてもいいじゃない。
どうでもいいけど。

277 :デフォルトの名無しさん:2006/04/26(水) 20:37:48
で、その社会通念としての「常識」は
今回の場合存在するのか?

278 :デフォルトの名無しさん:2006/04/26(水) 20:38:27
どうでもいいらしいのでスルー。

279 :デフォルトの名無しさん:2006/04/26(水) 20:39:36
>>277
ムきになるなよ^^;

280 :デフォルトの名無しさん:2006/04/26(水) 20:40:21
本題からそれるのが好きな方が多いみたいだね。

281 :デフォルトの名無しさん:2006/04/26(水) 20:45:09
>>280
ムきになるなよ^^;


282 :デフォルトの名無しさん:2006/04/26(水) 21:20:55
>>272
ああ何となくわかる、
おいらは話の流れ的に260が言わんとすることを「基礎を大事に考えてくれ」と言う前提があるものと解釈したので難易度が上からってのを
「難しく専門向けであり、興味を持つのはよいがあまりその立ち位置じゃ重要視しないでよいよ」の意味にとってしまったのだな。

うむ、ニュアンスが伝わりにくい文字だけの会話って難しいね。


283 :デフォルトの名無しさん:2006/04/26(水) 22:05:29
こういうときこそ、仕様記述言語Zの出番だろ。

284 :デフォルトの名無しさん: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 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/05/07(日) 14:41:16
他スレで、手続き型の言語が全てだと思い込んで○○言語最高とか偉そうに語っている
椰子を見ると、さぶいなと感じる今日このごろ。
たくさんの言語をマスターしているつもりなら、Schemeぐらいは勉強してほしい。

289 :デフォルトの名無しさん:2006/05/15(月) 00:56:21
ラムダ計算ABC
http://members.at.infoseek.co.jp/nbz/ref/lambda.html
を読んでみて思った素朴な疑問
足し算、かけ算みたいなfのネストを増やす方向の演算が出来るのはわかるけど、
引き算みたいなfのネストを減らす方向の演算はどうやってやるんだろう。

290 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/05/15(月) 03:02:48
>>289
Church numeric?

292 :デフォルトの名無しさん:2006/05/16(火) 03:26:56
>>290
なるほど、cons,car,cdrを使うようなイメージか。
たしかにそれならできそう。
いきなり疑問が解決したよ、感謝!
>>291
だね。こういうのをチャーチ数っていうんだってはじめて知ったよ。

293 :デフォルトの名無しさん:2006/05/16(火) 03:32:29
関数型ってλがらみの話をすることしかできない言語?
言語を使って何かをしようって感じがまったく感じられず
ひたすら式について語っているのしかみたことないんだけど。

294 :デフォルトの名無しさん:2006/05/16(火) 03:34:37
>>293
こういうことをしてる人もいる。
ttp://www.geocities.jp/takascience/haskell/monadius_ja.html

295 :デフォルトの名無しさん:2006/05/16(火) 05:34:28
現在の最新、最高の技術を使って、関数型(Lispとはいわない)マシンを
作ると、何か問題点があるのだろうか。

296 :デフォルトの名無しさん:2006/05/16(火) 05:42:25
>>293
どんな言語も計算をするために使うものですよ。

297 :デフォルトの名無しさん:2006/05/16(火) 05:49:22
ひたすらオブジェクトについて語っているだけの人も多いなあ。


298 :デフォルトの名無しさん:2006/05/16(火) 05:57:01
Rのつくアレかな

299 :デフォルトの名無しさん:2006/05/16(火) 07:53:04
関数型に理解を示せない奴はプログラマとして正味期限が来ている
アセンブリしかできないプログラマが今受けている視線と同じような物を
近い将来浴びる事になるだろう

300 :デフォルトの名無しさん:2006/05/16(火) 08:45:05
>>294
>Haskellでもどうにかゲームは作れるぞということは示せましたが、 実行してたら遅くなるとかいった、Haskellの仕組みをよく知らないと分からない問題はお手上げです。 もっともっとゲームを作りやすくする方法があるはず。 つぎは、みんなにまかせた!
とか書いてある、やはりリアルタイム応答の分野(ゲームぢゃないぞ)には向かないのかねぇ。

301 :デフォルトの名無しさん:2006/05/16(火) 08:54:53
コンパイラの性能の問題じゃないの?
複数の演算装置を持つような構成に最適化するとなると関数型の方が楽になるかもよ

PS3の方向が成功すれば関数型でなけりゃゲームには無理とか言われるかもね

302 :デフォルトの名無しさん:2006/05/16(火) 10:09:18
>>299
アセンブラ馬鹿にすんな

303 :デフォルトの名無しさん:2006/05/16(火) 11:26:29
まぁその都度言語覚えればいいだろな。

言語習得難しくないし

304 :デフォルトの名無しさん:2006/05/16(火) 15:53:55
>>302
しかできない事を馬鹿にしたのだが
アセンブリは馬鹿にしてないよ

305 :デフォルトの名無しさん:2006/05/16(火) 18:18:55
自分に向けられた刃を、他の「大物」に向けられたものであるかのように
無理矢理ねじ曲げて解釈し、そこから相手をドン・キホーテ的に捉えてみせるのは
割とポピュラーな逃亡術の一つです :-)

306 :デフォルトの名無しさん:2006/05/16(火) 19:22:56
example:○国人

ウリの主張に反対するのは世界平和に反対するも同然である。ニダ。

307 :デフォルトの名無しさん:2006/05/16(火) 21:15:21
関数型とは人間にとってわかりにくい言語。
人間の頭の中は関数型ではない。

308 :デフォルトの名無しさん:2006/05/16(火) 21:41:32
それはそうだけど、手続き型はもっと脳の把握から遠い気がする。

309 :デフォルトの名無しさん:2006/05/17(水) 02:48:30
>>308
同感

310 :デフォルトの名無しさん:2006/05/17(水) 07:24:28
>>308
異感

311 :デフォルトの名無しさん:2006/05/17(水) 07:25:37
>>308
か・・快感 ♥

312 :デフォルトの名無しさん:2006/05/17(水) 08:14:44
人間の頭の中は人の言葉尻から自分の頭の中の
都合の良い一群の言葉引き出して口の前に置いて
いるだけで、関数型でも手続き型でもなく、
唖然、呆然、論理型だ。

313 :デフォルトの名無しさん:2006/05/17(水) 09:40:40
>>308 そーなの?
プログラムって処理の連続になるので手続き型のほうが自然かとおもた(というより関数型よくわかってない)んだが。


314 :デフォルトの名無しさん:2006/05/17(水) 10:23:18
関数的プログラミングと手続的プログラミングのどっちか片方しかできない言語はうんこ。
逆にこのふたつを十分にサポートしているならコアがどっちかとか副作用を認めるかなんてのは些細な問題だろ。

315 :デフォルトの名無しさん:2006/05/17(水) 12:36:53
人間の脳はニューロンの複合的な作用によるものだからそのどちらでもない

316 :デフォルトの名無しさん:2006/05/17(水) 12:49:20
思考には副作用があるから関数型じゃなくね?

317 :デフォルトの名無しさん:2006/05/17(水) 12:59:22
>>316
たとえば、表面的な作用からプログラミング言語の種類を判定できるか、君は。

318 :デフォルトの名無しさん:2006/05/17(水) 13:13:31
頭が悪いまま議論めいたことがしたいからって
トンデモ抽象論に走らなくていいから>そのへんの子

319 :デフォルトの名無しさん:2006/05/17(水) 13:20:45
なんか同類スレに湧いてるやつがいるな

320 :デフォルトの名無しさん:2006/05/17(水) 14:27:42
>>308
俺は関数型のプログラムの方が読みやすくて好き。
記述がアルゴリズムの意味そのものに近いから分かりやすい。
手続き型だとアルゴリズムを構築するような感じになるから、記述と意味が離れてしまっていて
内容を理解するのに苦労する。
関数型の楽さに慣れてしまうと、手続き型には戻れなくなる。

321 :デフォルトの名無しさん:2006/05/17(水) 14:47:17
プログラム、と言われて、UIやらネットワークIOやらを思い浮かべるひとと、
自明でないアルゴリズムの実装を思い浮かべるひととの間で、話がかみ合ってない気がする。

322 :デフォルトの名無しさん:2006/05/17(水) 14:49:59
.NETばかりやってるんだが、それと絡められる関数型言語ってないでしょうか?

323 :デフォルトの名無しさん:2006/05/17(水) 14:54:13
>>322
よく知らんのだが、F#なんてどうよ。

324 :デフォルトの名無しさん:2006/05/17(水) 14:57:33
主観的な話はどうでもいいよ

325 :デフォルトの名無しさん:2006/05/17(水) 15:07:10
どうでもいいという主観が書くほど大事なこととは思えません ;-)

326 :デフォルトの名無しさん:2006/05/17(水) 15:46:42
普段は C++ と Java とアセンブラで組み込みを少し。
それ以外の言語は Emacs Lisp と PHP と Perl。
な俺が仕事抜きで関数型言語を理解したいと思って来ましたよ。
Windows で遊べる処理系ってどれ?
できればサンプルが多い処理系の方がありがたいです。

327 :デフォルトの名無しさん:2006/05/17(水) 16:06:48
Cygwin 入れりゃ大抵の処理系は使えると思うけど、
とりあえず GHC (Haskell) を勧めとこう。

328 :デフォルトの名無しさん:2006/05/17(水) 17:04:13
>>326
>それ以外の言語は Emacs Lisp と PHP と Perl。
うえ、キモい

329 :デフォルトの名無しさん:2006/05/17(水) 17:26:49
人は実際にやってみて手順を確認しながら自分のやってることの意味を理解するんだと思います><
もしくは結果が出て初めて自分のやったことの意味を理解するんだと思います><
最初に全ての意味を理解してから行動してる人なんていないと思います(>_<)
関数型言語が扱い難いのはそれなりに理由があるんだと思います><

330 :デフォルトの名無しさん:2006/05/17(水) 17:31:09
>>328
m9(^д^)プギャー!!

331 :デフォルトの名無しさん:2006/05/17(水) 17:32:26
Rの付くあの言語を入れないと、信者達に煽られちゃうよ!気をつけて!

332 :デフォルトの名無しさん:2006/05/17(水) 18:21:08
という、Rの付くあの言語のスレで叩かれた>>331さんのコメントでした

なんてな

333 :デフォルトの名無しさん:2006/05/17(水) 19:23:31
何故分かった!

334 :デフォルトの名無しさん:2006/05/17(水) 23:16:13
Rython

335 :デフォルトの名無しさん:2006/05/18(木) 01:47:20
RATFOR


336 :デフォルトの名無しさん:2006/05/18(木) 02:02:24
RPG

337 :デフォルトの名無しさん:2006/05/18(木) 03:31:05
小説全体を全部一つの文で書くのが関数型。
分かりにくいのは当然。

338 :デフォルトの名無しさん:2006/05/18(木) 04:21:59
【手続き型小説】

吾輩は猫である。
名前はまだ無い。
どこで生れたかとんと見当がつかぬ。
何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。
吾輩はここで始めて人間というものを見た。

【関数型小説】

人間というものを始めて見た薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶しているがどこで生まれたかとんと見当がつかず名前がまだ無い猫である吾輩。

339 :デフォルトの名無しさん:2006/05/18(木) 06:43:42
じゃぁ処理済のジョブをジョブ郡から削除しすべてのジョブがなくなった場合はアラーとを出す処理は、
【手続き型】
ジョブ郡から処理済を列挙
その列挙したジョブ郡をジョブリストから削除。
ジョブリストが空ならアラート。
【関数型】
アラートは、ジョブリスト(この場合のジョブ郡-それは処理済のジョブで構成される−が削除されるもの)が空なら鳴る。

ってかんじ?



340 :デフォルトの名無しさん:2006/05/18(木) 08:37:18
何の根拠もないのだけれど、
表層は論理型、深層は関数型のように思えるなぁ。

手続き型は資源の管理テーブルがしっかりないといけないから。
そんなもの脳の中にあるのかねぇ。

341 :名無しさん@Linuxザウルス:2006/05/18(木) 08:46:01
>>340
脳の構造はEBtみたいなリンク、グラフ構造になってると思われ。
リンクの繋ぎかえがあるからその部分は副作用と言える。

342 :デフォルトの名無しさん:2006/05/18(木) 18:19:57
この世界は現時点の万物の状態から一瞬後の万物の状態を返す関数と言える。

343 :デフォルトの名無しさん:2006/05/18(木) 19:59:05
ということは、この世界を呼び出して戻り値を使うスーパー世界があるかもしれないってことか

344 :339:2006/05/18(木) 23:02:31
すまんが、この理解であってるんでしょうか?

345 :デフォルトの名無しさん:2006/05/19(金) 00:46:29
関数型:C言語
手続き型:Pascal

つまり関数型が実践的で手続き型が教育向けって事です。

346 :デフォルトの名無しさん:2006/05/19(金) 01:12:53
C言語は関数型じゃありません。
前提からして間違っています。

347 :デフォルトの名無しさん:2006/05/19(金) 03:54:26
>>343
世界は再帰呼び出しだ
そのうちスタックオーバーフロqあswrふぇdtgyふじこl;p@:

348 :デフォルトの名無しさん:2006/05/19(金) 04:17:22
末尾再帰ならちゃんと最適化されて、オーバーフローしないかもしれないよ、とか。

349 :デフォルトの名無しさん:2006/05/19(金) 09:23:00
そのうち例外吐きながらビッグクランチか

350 :デフォルトの名無しさん:2006/05/19(金) 14:29:52
>>347
アセンブラやれ
スタック分かってん野か?

351 :デフォルトの名無しさん:2006/05/19(金) 15:09:20
>>350
TMS9900とかNM1610とかで泣いた事あるだろ

352 :デフォルトの名無しさん:2006/05/19(金) 20:47:53
関数型だろうが手続き型だろうが、ある程度高級な静的型の言語は
基本的な道具としてバリアントとパターンマッチと型推論を備えるべきだと思うがどうだろう。
この三つは手続き型のプログラミングでも役に立つし、ないととても不便だ。
いまのところ手続き型言語ではNemerleやmerdあたりにしか実装されてないようだが。

このへんをちゃんと備えた手続き型言語が出てきて初めて、関数型と手続き型のまともな比較ができるような気がする。

353 :デフォルトの名無しさん:2006/05/19(金) 21:26:12
> このへんをちゃんと備えた手続き型言語
つ ML

354 :デフォルトの名無しさん:2006/05/19(金) 21:55:39
MLは変数がデフォルトで変更不可だし、goto(やreturnやbreak)がないから手続き型というのは苦しいと思うが。
しかし、手続き型と関数型という区別は余り役に立たないような気がしてきた。
問題になるのはむしろ個々の言語機能、例えばGCがあるか、クロージャがあるか、バリアントがあるか、副作用があるか…だよな。

355 :デフォルトの名無しさん:2006/05/19(金) 22:21:47
で、結局はいちばんつまらない「ライブラリが充実しているかどうか」に
落ち着くわけですよ。

356 :デフォルトの名無しさん:2006/05/19(金) 22:58:42
あと日本語(文字コード)対応な。

357 :デフォルトの名無しさん:2006/05/20(土) 09:27:26
そうなると関数型言語最強はErlang

358 :デフォルトの名無しさん:2006/05/20(土) 22:59:46
>>357
オブジェクトごとにマジで通信するってのがいい。


359 :デフォルトの名無しさん:2006/05/21(日) 04:12:11
ErLangとOCamlってどっちが実用的?

360 :デフォルトの名無しさん:2006/05/21(日) 09:12:19
用途次第

361 :デフォルトの名無しさん:2006/05/21(日) 13:22:38
並列計算やりたいならErlangが良いんじゃない?
型重視ならOCamlとかHaskellとかが良いと思う。

362 :デフォルトの名無しさん:2006/05/21(日) 17:35:47
>>352
同意。俺の場合、開発ターゲットはC/C++だけなんだが、
それ用のデータ加工ツールには好きな言語使える。
で、大抵はスクリプト言語とかを使うんだが、
最近ちょっと OCaml や Haskell をかじったもんだから
パターンマッチ使いてえ(*゚∀゚)=3ムハー 状態になったりする。
あとやっぱデータ量が増えてくると速度が欲しくなるとか。

なので、正規表現とか多言語が楽ちんに扱えた上で
静的型付け&型推論&パターンマッチも便利、みたいな言語があれば
結構広まるような気がする。
手続きっぽく書いてもいいけど関数型だとより記述がすっきり、
みたいに使ってる人をだんだん関数型に染めてくみたいな。
(C++だとここが逆なんだよなあ)

363 :デフォルトの名無しさん:2006/05/25(木) 20:29:23
関数型のスクリプト言語が切に欲しい。
Perlのように書きやすくて、Haskellのように考えやすい言語。

364 :デフォルトの名無しさん:2006/05/25(木) 20:30:27
scheme?

365 :デフォルトの名無しさん:2006/05/25(木) 20:33:15
>>364
静的な型がないと生きていかれません。

366 :デフォルトの名無しさん:2006/05/25(木) 20:42:34
>>365
haskellもインタプリタあるんじゃないの?

367 :デフォルトの名無しさん:2006/05/25(木) 20:48:19
副作用がある処理での、
関数型と手続き型のコードの違いを見てみたい。

368 :デフォルトの名無しさん:2006/05/25(木) 20:56:08
>>366
あるけど、余りスクリプトっぽい書きやすさを指向した言語じゃないから、面倒な事が結構ある。
ロジックを実装してるうちはいいんだけど、printfやら正規表現やらディレクトリ操作なんかを始めると
途端にJavaっぽいコードを書くはめになる。

369 :デフォルトの名無しさん:2006/05/25(木) 21:10:17
>>367
関数型のやりかたが知りたいなら、Monadiusのソースを見てればいいんじゃないかな

370 :デフォルトの名無しさん:2006/05/25(木) 21:11:37
>>367
大して違わない。
http://ja.wikipedia.org/wiki/Hello_world

371 :デフォルトの名無しさん:2006/05/25(木) 21:56:32
>>370
ちょっと少なすぎてよくわかんないな。
最低でも、比較、繰り返し、関数定義、関数呼び出しぐらいはほしいな。


372 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/05/26(金) 00:49:38
>>372
さんくす。

あー。Haskellよくわかんねーなー。
どこで区切って見ればいんだ?

374 :デフォルトの名無しさん:2006/05/26(金) 00:53:28
>>367
いろんな言語の比較が見たいなら、ここ
ttp://shootout.alioth.debian.org/
とか、ここ
ttp://shinh.skr.jp/testsprite/
が参考になると思う。

375 :デフォルトの名無しさん:2006/05/26(金) 00:56:50
>>363
関数型言語ユーザーのブログとか見ると、Rubyを使っている人が多い気がする。
関数型じゃないけど。

376 :デフォルトの名無しさん: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 :デフォルトの名無しさん: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 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/05/26(金) 02:08:32
>>378
ラムダ式は?

380 :デフォルトの名無しさん:2006/05/26(金) 02:29:20
それはただの無名関数のことだろ。

381 :デフォルトの名無しさん:2006/05/26(金) 07:16:08
378に従うとすると、C++も関数型言語として言える。……よな?
for_eachはあるしBoost.Lambdaもあるし。

382 :デフォルトの名無しさん:2006/05/26(金) 07:57:21
>>377
>こうやって見ると、関数型の特徴がよくわからんw
だから>>370な訳だが。
手続き型っぽくかけるようにわざわざ構文糖を用意してるんだから似てるのは当然。

383 :デフォルトの名無しさん:2006/05/26(金) 08:50:58
>>381
C++のその辺は、文字通り「関数型言語的に書くために生み出された道具」だと思う。
だから「378に従うとすると」という仮定は要らないんじゃないかな。

とはいえあくまでも現段階のそれらは「関数言語的に書ける」レベルであって、
細かいところではまだまだ同じようにはいかないところがあるのだろうけど。

384 :デフォルトの名無しさん:2006/05/26(金) 10:20:27
>>378
集合と列はどう扱うの?

385 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/05/26(金) 19:18:26
>>385
HaskellやOcamlでは二分探索木を使って実装されている。
木のデータ構築子は隠し、代わりに構築用の関数(emptyとinsert)をエクスポートして、
抽象型としてアクセスさせる。

387 :デフォルトの名無しさん:2006/05/26(金) 20:04:06
>>386
まあそんなところか。
手続き型言語と同じってことで。

おそらくgraphも同様かな。ただgraphの場合、理論上は切断等を使って
構成的にdata型を定義できるはずだが。

388 :デフォルトの名無しさん:2006/05/26(金) 21:15:33
手続き型と関数型が合わさって
さらに発展したものがオブジェクト指向だな。

いまさら関数型にこだわる必要も無いだろう。

389 :デフォルトの名無しさん:2006/05/26(金) 21:24:45
オブジェクト指向を強制されないというだけでも関数型には価値がある。

390 :デフォルトの名無しさん:2006/05/26(金) 21:44:02
>>388←何も知らない馬鹿

391 :デフォルトの名無しさん:2006/05/26(金) 21:44:48
低学歴の香りがするよな

392 :デフォルトの名無しさん:2006/05/26(金) 22:24:21
馬鹿という奴が(ryって奴ですねw

393 :デフォルトの名無しさん:2006/05/26(金) 22:42:10
ということにしたいのですね

394 :デフォルトの名無しさん:2006/05/26(金) 22:43:13
>>393
当たり前だろ、ごみ野郎

395 :デフォルトの名無しさん:2006/05/26(金) 23:50:07
【馬鹿という奴が馬鹿なんだ】
突きつけられた己のレベルを認めたくない人間が
現実逃避に用いるポピュラーなうっちゃり。
大抵は失敗して土俵に潰れるが、潰れたままヘラヘラ笑い続けるのが特徴。

396 :デフォルトの名無しさん:2006/05/29(月) 02:44:04
>395
うるさい!ばかっていうやつがばかっていうやつがばかなんだぞ!

397 :デフォルトの名無しさん:2006/05/29(月) 09:26:02
精神的に向上心のないものは、ばかだ

398 :デフォルトの名無しさん:2006/05/29(月) 10:34:42
精神的でない向上心などあるものか

399 :デフォルトの名無しさん:2006/05/30(火) 00:16:03
敗者とは始める前から諦めている者のことである。


400 :デフォルトの名無しさん:2006/05/31(水) 23:23:15
「始めたら負けかなと思ってる」

401 :デフォルトの名無しさん:2006/06/01(木) 21:26:15
歯医者。

402 :デフォルトの名無しさん:2006/06/07(水) 21:21:03
なあ思ったんだけど、
関数の記述を 関数名(引数) じゃなくて (引数)関数名 にすれば
なんか日本語にとっても近くならないか?

403 :デフォルトの名無しさん:2006/06/07(水) 21:36:09
マジレスすると
そんなことするよりオブジェクト指向にしちまえばいいんじゃないのか

404 :デフォルトの名無しさん:2006/06/08(木) 19:34:18
日本語に近付けるなら、助詞が有効に使えないとな。

405 :デフォルトの名無しさん: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____________
http://pc8.2ch.net/test/read.cgi/prog/1121735183/l50

【初めて仲川勝彦(K仲川)と仕事する方へ】
http://pc8.2ch.net/test/read.cgi/prog/1149580345/l50

          †         
http://pc8.2ch.net/test/read.cgi/prog/1111407459/l50


409 :デフォルトの名無しさん:2006/06/08(木) 19:52:38
C/C++>>>>(越えられない壁)>>>Lisp>>>>(越えられない壁)>>>Haskell


410 :デフォルトの名無しさん:2006/06/08(木) 20:14:06
バグの生産性

411 :デフォルトの名無しさん:2006/06/08(木) 20:29:32
C++ >>> Ada > PL/I

412 :デフォルトの名無しさん:2006/06/08(木) 21:37:34
テキストでいいからエロゲー作ってくれ


413 :デフォルトの名無しさん:2006/06/08(木) 23:23:52
DOS時代の探せばノベル系エロゲーあったかもしれない。

414 :デフォルトの名無しさん:2006/06/08(木) 23:30:05
スクリプトインタプリタは関数型言語の得意分野ということになるかな。

415 :デフォルトの名無しさん:2006/06/09(金) 00:07:52
いろいろ議論はあるけど、実用の際に一番ポイントになるのは↓になると思うよ


 関数型   : ソースコード自体がそのプログラミング言語のデータ構造になっている。

 手続き型  : ソースコード自体がそのプログラミング言語のデータ構造になっていない。


     

416 :太田司 :2006/06/09(金) 00:12:39
tsukasa-91@ezweb.ne.jp
↑僕のメアドなんで痛メでも何でも送って楽しませてください
皆のメール待ってます

417 :デフォルトの名無しさん:2006/06/09(金) 00:14:37
>402
func(func(func()))
((()関数)関数)関数

この場合、最初に入れ子の数を
予測して書かなければならない。
些細だが、気になる人は気になると思う。

418 :デフォルトの名無しさん:2006/06/09(金) 00:16:46
>>417
そこで助詞の出番ですよ。

419 :デフォルトの名無しさん:2006/06/09(金) 00:23:31
助詞表記
()を関数を関数を関数
ドット表記
().func.func.func

420 :デフォルトの名無しさん:2006/06/09(金) 01:06:09
$stdoutに linesを puts

421 :デフォルトの名無しさん:2006/06/09(金) 03:04:29
>>337-338素晴らしい。
今まで関数型志向設計の有意性と無為性を語ってきたが、これほどわかりやすく且つ特徴を捉えた例も説明も無く苦労してきた。

  ミミ彡ミミミ彡彡ミミミミ
,,彡彡彡ミミミ彡彡彡彡彡彡
ミミ彡彡゙゙゙゙゙""""""""ヾ彡彡彡
ミミ彡゙         ミミ彡彡
ミミ彡゙ _    _   ミミミ彡
ミミ彡 '´ ̄ヽ  '´ ̄` ,|ミミ彡
ミミ彡  ゚̄ ̄' 〈 ゚̄ ̄ .|ミミ彡
 彡|     |       |ミ彡
 彡|   ´-し`)  /|ミ|ミ   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ゞ|     、,!     |ソ  < カンドーした!
   ヽ '´ ̄ ̄ ̄`ノ /     \________
    ,.|\、    ' /|、
 ̄ ̄| `\.`──'´/ | ̄ ̄`
    \ ~\,,/~  /
     \/▽\/


422 :デフォルトの名無しさん:2006/06/09(金) 05:36:29
天動説、地動説。

423 :デフォルトの名無しさん:2006/06/09(金) 10:37:00
>>339 ス万が誰かこの理解が正しいのか教えてくれ

424 :デフォルトの名無しさん:2006/06/09(金) 10:42:03
>>423
それは単なるデータ構造の違いというだけ。
関数型・手続き型の違いとはあまり関係ない。

425 :デフォルトの名無しさん:2006/06/09(金) 11:05:42
>>424 よくわからんです(・ω・)

426 :デフォルトの名無しさん:2006/06/09(金) 11:09:36
>>425
>【手続き型】
>ジョブ郡から処理済を列挙
これは配列を使うという意味でしょう?

>【関数型】
>アラートは、ジョブリスト(この場合のジョブ郡-それは処理済のジョブで構成される−が削除されるもの)が空なら鳴る。
これはリストを使うという意味でしょう?

配列を使うかリストを使うかというだけでしかなくて、関数型か手続き型かという意味の問題ではなくなっているんだよ。

427 :デフォルトの名無しさん:2006/06/09(金) 11:40:54
>>【手続き型】
>>ジョブ郡から処理済を列挙
>これは配列を使うという意味でしょう?
>
>>【関数型】
>>アラートは、ジョブリスト(この場合のジョブ郡-それは処理済のジョブで構成される−が削除されるもの)が空なら鳴る。
>これはリストを使うという意味でしょう?
とてもそうは見えないのだが。

428 :デフォルトの名無しさん:2006/06/09(金) 11:41:57
>>426 
ん、データ構造はあまり気にしてなかったんですが。
手続き型でリストだろうが、マップだろうが。
そもそも手続き型と関数型の違いがあまり判っていないんですが、
猫であるの例を見て、それを実際の処理記述に当てはめるとこうなるのかと思って書いた次第です。
自分がここで聞きたいのは関数型での処理の記述がこんな風になるのかということですね。

429 :デフォルトの名無しさん:2006/06/09(金) 12:04:16
寧ろこうか?
手続き型
列挙ジョブ群 = ジョブ群.列挙(処理済)
ジョブリスト.削除(列挙ジョブ群)
if (ジョブリスト.空) アラート()

関数型
ジョブ群から処理済を列挙したジョブ群を削除したジョブリストが空なら鳴らすアラート

430 :デフォルトの名無しさん:2006/06/09(金) 12:14:24
>>429
概念的にはそんな感じだと思うけど、実際の関数型言語では、
両者の折衷形態で書かれるのが普通だと思う。

if(ジョブ群から処理済を列挙したジョブ群を削除したジョブリストが空)
  アラートを鳴らす。

これだと高水準な手続き型言語と区別がつかないけど。

431 :デフォルトの名無しさん:2006/06/09(金) 12:20:29
処理とは アラートを鳴らす事が出来るならアラートを鳴らす
アラートを鳴らす事が出来るとは 残処理リスト が 空である
残処理リストとは ジョブ群から 処理済みを列挙したジョブ群を 削除したものである

こうじゃないの?


432 :デフォルトの名無しさん:2006/06/09(金) 12:32:28
>>429

処理済みのものを求めて引くよりは、最初から未処理のものだけ列挙すりゃいいじゃん。

手続き型(というよりOOP?)
func ジョブ群.列挙(フラグ) {
 ジョブ群のうちフラグが立っている物だけを列挙して返す。
}
if (ジョブ群.列挙(未処理).空) アラート()

関数型
if (空?( 抽出(未処理?, ジョブ群) )) アラート()
ここで、抽出(f,s)はsの要素のうち判定関数fで真であるものだけを集めたもの。



433 :デフォルトの名無しさん:2006/06/09(金) 12:38:53
>>431
Haskellっぽく書けばそうなるな。
>>430はML風ということで。
ついでにCleanっぽいのを書いてみる。

処理後の世界とは、アラートを鳴らすことが出来るならば
処理前の世界にアラートを鳴らした後の世界であり、
そうでなければ処理前の世界と同じ世界である。
以下>>431と同様。

しかし、この手の比較が関数型言語の特徴をうまく掴んでいるとは思えないんだが。
関数型と手続き型の違いを知りたいなら、入出力の絡まない処理の方がわかりやすいと思う。

>>432
それは両方とも関数型だと思われ

434 :デフォルトの名無しさん:2006/06/09(金) 12:58:08
>>432
ジョブ郡から終了したものを削除する処理とアラームなる処理は別だから。
>関数型と手続き型の違いを知りたいなら、入出力の絡まない処理の方がわかりやすいと思う。
その例を是非

435 :デフォルトの名無しさん:2006/06/09(金) 15:35:01
遅延評価の中の人がどうステップ踏んでるのか知りたい
やたら遅いのでなんか事故ってると思う

436 :デフォルトの名無しさん:2006/06/09(金) 16:10:01
>>435
Haskellスレで質問してた人?
特定のコードが遅いならあっちで晒してみるといいかと。

437 :デフォルトの名無しさん:2006/06/09(金) 17:31:07
>>415
おまいの脳内世界では関数型言語がLisp系しか存在しないってのがわかった

438 :デフォルトの名無しさん:2006/06/09(金) 18:05:42
まあ、関数も変数だからな・・

439 :デフォルトの名無しさん:2006/06/12(月) 11:57:01
関数型を勉強する者は蟻
手続き型で十分だと関数型を軽視する者はキリギリス

440 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/06/12(月) 19:19:40
なんつうか、アリとキリギリスが逆じゃねえ?

444 :デフォルトの名無しさん:2006/06/12(月) 20:30:13
確かに。 Java プログラマがキリギリスだとは思えない。

445 :デフォルトの名無しさん:2006/06/12(月) 21:19:27
うむ。逆だろw


446 :デフォルトの名無しさん:2006/06/12(月) 21:21:15
蟻でもキリギリスでもない。糞ころがしだ。

447 :デフォルトの名無しさん:2006/06/13(火) 00:27:13
数年前の関数型言語スレのコピペかよ。
クダラネェな。

448 :デフォルトの名無しさん:2006/06/13(火) 14:59:13
なに興奮してんの?w

449 :デフォルトの名無しさん:2006/06/13(火) 23:28:19
> 2006/06/13(火) 14:59:13

            ↑ヒッキー発見w

450 :デフォルトの名無しさん:2006/06/14(水) 01:03:11


451 :デフォルトの名無しさん:2006/06/14(水) 10:11:05
>>450
>449はきっと、平日昼間に書き込むのはヒッキーだと思い込みたいリアル厨かヒッキー予備軍なんだろ。

452 :デフォルトの名無しさん:2006/06/14(水) 10:47:16
平日昼間に余裕で書き込める窓際社員(古w)のオレが来ましたよ

453 :デフォルトの名無しさん:2006/06/14(水) 11:04:37
あこがれるっす

454 :デフォルトの名無しさん:2006/06/14(水) 23:50:29
>>452
昼食時間もまともにとれない俺様が深夜帰宅途中に携帯カキコですがなにかorz


455 :デフォルトの名無しさん:2006/06/15(木) 00:36:20
>>454
会社辞めさせてもらえないって本当?

456 :デフォルトの名無しさん:2006/06/15(木) 05:04:52
無職透明な俺が456ゲット。

457 :デフォルトの名無しさん:2006/06/18(日) 01:51:56
マ板でやれ

458 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/07/19(水) 20:42:18
57 名前:デフォルトの名無しさん[] 投稿日:2006/02/16(木) 10:58:30
>>56 プログラム全体にわたっての型の整合性は
コンパイルが通った時点で保証されている、と信じたいから

という発言に対し、

65 名前:デフォルトの名無しさん[] 投稿日:2006/02/16(木) 21:42:52
っていうか、>>57 みたいなこと書くやつは死ねばいいと思う。
お前みたいなド素人がプログラミングでメシ食っていこうなんて百年早い
マジ死ねよ

と返す。
これがBoostスレクオリティ。

461 :デフォルトの名無しさん:2006/07/19(水) 23:32:23
一応書いておくけど、その後フォロー入っているよ。
66デフォルトの名無しさんsage2006/02/16(木) 21:45:48
>>65
57の感覚自体はまともだと思うけど

462 :デフォルトの名無しさん:2006/07/20(木) 07:22:50
こんな関係無いスレに言いつけに来るなよ57w

自分の代わりに「敵」をやっつけてくれそうな猛者でも期待したのか?
残念だったなw

463 :デフォルトの名無しさん:2006/07/20(木) 15:16:44
65乙

464 :デフォルトの名無しさん:2006/07/20(木) 15:28:38
こんな関係無いスレに言いつけに来るなよ57w

自分の代わりに「敵」をやっつけてくれそうな猛者でも期待したのか?
残念だったなw

465 :デフォルトの名無しさん:2006/07/20(木) 15:36:12
>>460
ゴキブリはチョンSPさっさとゴミ箱に捨ててNDSで知育ゲームでもやったら?

でないとおまえ本気で社会復帰できないよwwwwwwwwwwww

466 :デフォルトの名無しさん:2006/07/20(木) 15:41:55
          /∧    /∧
         / / λ   / /λ
       /  / /λ /  / /λ
      /   / / /λ   / / /λ
    /          ̄ ̄     \
   /     / ̄\     / ̄\\
   /      |   ●|     |   ●|  ヽ
  |       し ̄ヽJ     し  ̄ヽJ   |         ―→>>463
  |             '"""         |
   \        丶 ___人___ノ    /
    \_        ヽ―/   __/ < うぷぷぷ
     /          ̄ ヽヽ   \
    /


467 :デフォルトの名無しさん:2006/07/20(木) 19:39:57
ひどいな
そんな気に障るようなレスだったのかね

468 :デフォルトの名無しさん:2006/07/21(金) 05:31:40
まぁ57にとっては
気に障るなんてもんじゃなかったんだろうな。
こんなとこに泣きついてくるくらいだから。

469 :デフォルトの名無しさん:2006/07/21(金) 14:39:22
>>468
いつまでも粘着してるお前の方がどうかと思うぞ

470 :デフォルトの名無しさん:2006/07/21(金) 14:51:03
>プログラム全体にわたっての型の整合性は
>コンパイルが通った時点で保証されている、と信じたいから
OCamlではこれがあるから、実行時エラーが少なくてすむ。

471 :デフォルトの名無しさん:2006/07/21(金) 15:20:04
いや、型周りに穴があるC++でそれを期待するのは間違いって話じゃないの?

472 :471:2006/07/21(金) 15:31:30
見てきた。
違うみたいだな。
視野の狭い人間が偉そうにしてるって話か。
くだらん。

473 :デフォルトの名無しさん:2006/07/21(金) 16:22:48
>>461
否定してるだろうが
よく読め馬鹿

68 名前:デフォルトの名無しさん[] 投稿日:2006/02/16(木) 21:50:14
>>66
お前も死ねよ。ド素人が

>>472
どこをどう読めばそうなるのかなーwww
チョンは氏ね

474 :デフォルトの名無しさん:2006/07/22(土) 04:26:44
あーあ泣き出しちゃったw

475 :デフォルトの名無しさん:2006/07/22(土) 05:03:14
>>474
誤爆か?

476 :474:2006/07/22(土) 05:05:46
>>475
頭がかわいそーな人ハケーン

477 :デフォルトの名無しさん:2006/07/22(土) 05:43:46
>>476
誤爆か?

478 :デフォルトの名無しさん:2006/07/22(土) 21:16:57
Haskellが下火になってきたな
みんな飽きてきたらしい

479 :デフォルトの名無しさん:2006/07/23(日) 00:48:54
まあ、アルゴリズム関連は処理速度が遅い、GUIも苦手と来れば使い道ないもんな。
一通りのことを勉強したらそれで終わりって感じ。

480 :デフォルトの名無しさん:2006/07/23(日) 04:22:24
よーし、ついに Lisp 時代の到来だ

481 :デフォルトの名無しさん:2006/07/23(日) 05:02:47
  ( ゚д゚)      
_(__つ/ ̄ ̄ ̄/_
  \/    /
     ̄ ̄ ̄

  ( ゚д゚ )
_(__つ/ ̄ ̄ ̄/_
  \/    /
     ̄ ̄ ̄

482 :デフォルトの名無しさん:2006/07/23(日) 06:44:19
もっと見てv

483 :デフォルトの名無しさん:2006/08/17(木) 02:38:05
  ( ゚д゚ )
_(__つ/ ̄ ̄ ̄/_
  \/    /
     ̄ ̄ ̄

  ( ゚д゚)      
_(__つ/ ̄ ̄ ̄/_
  \/    /
     ̄ ̄ ̄

484 :デフォルトの名無しさん:2006/08/17(木) 04:17:25
見〜て〜よ〜ぉぉ!!!

485 :デフォルトの名無しさん:2006/08/30(水) 09:01:25
>>417
括弧なくせばイイんじゃね?


それなんてFO…


486 :デフォルトの名無しさん:2006/08/30(水) 12:08:55
>>402
BibTeX の bst ファイルは後置記法でそんな感じだなあ。
おもっくそ読みにくいよ。

487 :デフォルトの名無しさん:2006/09/01(金) 21:24:44
>>402 >>417 >>485-486
Haskell の $ の逆で
行始からそれまでの式を
一発で括る記法作ったらどうよ

488 :デフォルトの名無しさん:2006/09/08(金) 03:28:09
Dなら
arr.map((int n){return n * b;}).writefln();
とかできるが

489 :デフォルトの名無しさん:2006/09/11(月) 16:56:02
infixl 1 %
(%) = flip ($)
main = [1..10] % map (*5) % print

490 :デフォルトの名無しさん:2006/09/11(月) 18:48:12
>>488
感動した。Cもついにここまで来たか。

491 :デフォルトの名無しさん:2006/09/11(月) 19:19:27
だからCじゃないって。

492 :デフォルトの名無しさん:2006/09/11(月) 22:58:26
C -> C++ -> D


493 :デフォルトの名無しさん:2006/09/12(火) 07:37:27
        ↑いまここ

494 :デフォルトの名無しさん:2006/11/04(土) 13:04:31
「手続き型」も一種の「関数型」と見なしていいんですよね?

495 :デフォルトの名無しさん:2006/11/04(土) 16:04:24
J - C++ for Haskeller
http://d.hatena.ne.jp/w_o/20061008#p1

> C++とは、以下のような特徴を持ったプログラミング言語です
>
> 参照透明(!)
> 出現評価(occurrence evaluation) (などといういかがわしい単語をつくる)
> パターンマッチできる
> 全く直感的でない構文
> IOモナドを書くための大量のsyntax sugarがある

クソワロタ

496 :デフォルトの名無しさん:2006/11/04(土) 16:54:21
何が面白いんだ?

事実そのままやん
初心者には、面白く感じるんかね?

497 :デフォルトの名無しさん:2006/11/04(土) 17:28:00
俺も初心者だけど、ワロタw

498 :デフォルトの名無しさん:2006/11/04(土) 17:28:40
>>496
上級者はお前しかいないみたいだ。よかったな。

499 :デフォルトの名無しさん:2006/11/04(土) 19:06:22
笑うのは puts("hello, world") のとこだけだろ

500 :デフォルトの名無しさん:2006/11/04(土) 19:14:49
>>499
人に「ここで笑え」と指示するなんて、さすが上級者ですね^^

501 :デフォルトの名無しさん:2006/11/04(土) 19:37:17
連想配列のくだりで腹を抱えて笑った俺は初心者。

502 :デフォルトの名無しさん:2006/11/04(土) 20:10:44
>>500
存在しない「指示」を読み取っちゃうのは
コミュニケーションの初心者だな

503 :デフォルトの名無しさん:2006/11/04(土) 20:22:14
>>502
行間を読めない人なんですね^^;

504 :デフォルトの名無しさん:2006/11/04(土) 21:10:36
まぁ、無いものをあると言い張る時には便利な言葉だ<行間

こうして「解釈の違い」に逃げていくのもお約束

505 :デフォルトの名無しさん:2006/11/05(日) 00:42:00
>>504
と言えば勝った気になれるのもお約束^^

そんな不毛な話がしたいの?
上級者って忍耐強くて尊敬できますよ。

506 :デフォルトの名無しさん:2006/11/05(日) 10:36:02
突然勝ち負けの概念を持ち出すと、
それにこだわってたのが自分だってバレちゃうよ。

507 :デフォルトの名無しさん:2006/11/05(日) 12:19:31
>>506
自分も持ち出してるくせに、よく言うよ。

508 :デフォルトの名無しさん:2006/11/06(月) 00:42:57
負け組乙

509 :デフォルトの名無しさん:2006/11/06(月) 01:06:29
オマイらいい歳こいて、子供みたいな喧嘩してるなあ、あはは

510 :デフォルトの名無しさん:2006/11/06(月) 01:33:16
おっさん乙

511 :デフォルトの名無しさん:2006/11/06(月) 08:55:35
ゴルァ!


512 :デフォルトの名無しさん:2006/11/06(月) 09:38:06
年寄りは国の宝なんだから大事に扱えよ

513 :デフォルトの名無しさん:2006/11/06(月) 10:04:58
国のお荷物が何を言っているんだか

514 :デフォルトの名無しさん:2006/11/06(月) 19:49:44
お荷物はニートのお前だろw

515 :デフォルトの名無しさん:2006/11/07(火) 03:31:21
よく考えたらそうだったwwww

516 :デフォルトの名無しさん:2006/11/10(金) 16:45:11
チンボぶっ飛ばすぞお前ら。

何がモナドだ。

schemeで継続やっときゃいいんだよ。

517 :デフォルトの名無しさん:2006/11/11(土) 04:40:16
型のない継続なんてダメダメ

518 :デフォルトの名無しさん:2006/11/11(土) 11:31:25
今時LispやらSchemeやらが最高だと思ってるやつは時代遅れ

519 :デフォルトの名無しさん:2006/11/11(土) 12:34:31
lispやschemeが流行り廃りに左右されるものだと思ってる奴は致命的

520 :デフォルトの名無しさん:2006/11/11(土) 14:02:45
lispやschemeの問題点が見えないのは致命的。というか、無学。

521 :デフォルトの名無しさん:2006/11/11(土) 18:41:36
>>520
その問題点は言語的な方か商業や政治的な方かで話がだいぶ違うわけであるが。


522 :デフォルトの名無しさん:2006/11/11(土) 20:42:35
無学というからには、言語的なほうじゃないのか?

俺としては遅いぐらいしか問題点思いつかないけどな。

523 :デフォルトの名無しさん:2006/11/11(土) 21:05:12
M式ってなんですか?

524 :デフォルトの名無しさん:2006/11/11(土) 21:37:31
>>521
商業や政治的には、問題点云々以前の問題外だろw

525 :デフォルトの名無しさん:2006/11/11(土) 23:44:40
思ったよりバカが多いな。

526 :デフォルトの名無しさん:2006/11/11(土) 23:45:33
>>522
quote についてどう思う?

527 :デフォルトの名無しさん:2006/11/12(日) 13:00:32
なんで急に「わかったふり」の一行レスばっかに(^_^;

528 :デフォルトの名無しさん:2006/11/12(日) 13:20:19
そんなことはどうでもいい

529 :デフォルトの名無しさん:2006/11/12(日) 13:25:35
誰も答えられないので、Lispはクズということですか。

530 :デフォルトの名無しさん:2006/11/12(日) 17:25:57
そうだね、lispやschemeは結局クズっていう結論でいいと思うよ。
ハスケルとかもっとキャッチーな言語にうつつをぬかしておけばいいんじゃない?

531 :デフォルトの名無しさん:2006/11/12(日) 18:00:30
>>530
その言い方だと、Haskellはクズじゃないと思っているみたいだけど、
うつつを抜かす、というのはどういう意味で言っているのかな。
別に批判的な意味で質問しているのではないけど。

532 :デフォルトの名無しさん:2006/11/12(日) 18:04:10
>>531
俺は>>530じゃないが、たぶんお前は>>530を誤読していると思う。
もう一回読み直してみれ。

533 :デフォルトの名無しさん:2006/11/12(日) 23:27:55
馬鹿に向かってそういう冷静なアドバイスをすると
噛み付かれるよ

534 :デフォルトの名無しさん:2006/11/12(日) 23:49:36
と、すでに噛みついている狂犬くんでした

535 :デフォルトの名無しさん:2006/11/13(月) 02:23:58
嫌味が解らないと2chは難しい


536 :デフォルトの名無しさん:2006/11/13(月) 06:00:09
悪い意味でピュアな子には難しいな。

537 :デフォルトの名無しさん:2006/11/13(月) 18:07:10
>531
Haskellを直接クズとは書かれていないが
「うつつを抜かす」で暗に否定してるだろ

538 :デフォルトの名無しさん:2006/11/13(月) 18:09:56
クズな言語があるならクズじゃない言語もあるはずだが(相対的)
具体的にクズじゃない言語を言ってみて。

539 :デフォルトの名無しさん:2006/11/13(月) 22:52:55
Rubyとか

540 :Ruby使い:2006/11/14(火) 15:56:58
>539
言語の基本的なところは良いんだけど
(まー他言語の良いトコ取りで悪いのも困るが)
開発者や周辺の人達の人格がおかしすぎるのが問題
RubyスレでMLについてのレスを見ればよく判る

541 :デフォルトの名無しさん:2006/11/14(火) 15:59:13
まぁ、コミュニティにもともと学術関係者すくないですから。

542 :デフォルトの名無しさん:2006/11/14(火) 16:57:24
一番の難点は宗教が絡んでいるところ。

543 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/11/18(土) 16:00:38
Pythonは実用的
Haskellは使い物にならない

547 :デフォルトの名無しさん:2006/11/18(土) 22:07:51
PythonってLispのマクロに当たるもんあるの?
後遅いという話を聞いたとですが。

548 :デフォルトの名無しさん:2006/11/18(土) 23:00:49
ないよ
遅いよ

549 :デフォルトの名無しさん:2006/11/19(日) 00:15:55
んじゃ、ただの動的で使いやすい言語でしかない感じ?

550 :デフォルトの名無しさん:2006/11/19(日) 02:36:46
> 使いやすい言語
重要じゃないですか

551 :デフォルトの名無しさん:2006/11/19(日) 03:05:23
はい

552 :デフォルトの名無しさん:2006/11/19(日) 03:51:01
Pythonみたいな文法の言語で
Lispマクロっぽいのって
やったらすごそうだなw

553 :デフォルトの名無しさん:2006/11/19(日) 04:14:37
http://pc8.2ch.net/test/read.cgi/tech/1158259643/

554 :デフォルトの名無しさん:2006/11/19(日) 04:18:36
>>552
良く知らんけど、Clean はマクロあるらしいよ。

555 :デフォルトの名無しさん:2006/11/20(月) 18:32:14
>>542
自分の慣れ親しんだパラダイムの生産性が高く見えるというのは
確かにあるだろうな。
さらに厄介なのは、そのパラダイムがその人にとっては実際に
生産性が高い、ということがあるかも知れないという点だ。
こうなるとパラダイム間の比較はほとんど不可能だと思う。

>>554
ちょっと見た感じでは、マクロの引数から情報を取り出す手段がないので、
Lispのマクロのような使いかたはできないように感じた。

556 :デフォルトの名無しさん:2006/11/25(土) 12:05:11
手続き型は関数のインターフェイスと実装の結びつきが曖昧。
関数型は関数のインターフェイスがそのままアルゴリズムに直結してる。
そんな印象。
どっちが分り易いかといえば関数型なんだけど、その分りやすさを
コーディングの段階で作り出せるかっていうとそれも難しい。
難しさがそのまま関数型の言語の扱い難さに直結してる。
そんな印象。

557 :デフォルトの名無しさん:2006/11/25(土) 17:00:26
> 手続き型は関数のインターフェイスと実装の結びつきが曖昧。
> 関数型は関数のインターフェイスがそのままアルゴリズムに直結してる。
プログラム例を希望


558 :デフォルトの名無しさん:2006/12/09(土) 20:39:44
何一つ有意義な意見もなく無事終了

120 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)