1read 100read
2011年10月1期プログラム関数型言語Part5 TOP カテ一覧 スレ一覧 削除依頼
・ 次のスレ
アセンブラ初心者スレッド
形態素解析と日本語処理
C言が全く分からない俺を神が救ってくれるスレ
【Lisp】プログラミング言語 Clojure #2【JVM】


関数型言語Part5


1 :09/09/09 〜 最終レス :11/12/17
Lisp Scheme ML Haskell FP Mirranda など
関数型言語について話し合いましょう。
前スレ
関数型言語Part IV
http://pc12.2ch.net/test/read.cgi/tech/1083649982/
関連スレ
Lisp Scheme Part27
http://pc12.2ch.net/test/read.cgi/tech/1248657331/
関数型言語ML (SML, OCaml, etc.), Part 6
http://pc12.2ch.net/test/read.cgi/tech/1245017721/
関数型プログラミング言語Haskell Part11
http://pc12.2ch.net/test/read.cgi/tech/1252382593/
Emacs Lisp 3
http://pc12.2ch.net/test/read.cgi/tech/1191875993/

2 :
テンプレ追加情報よろしく

3 :
【関数】Erlang【エリクソン】
http://pc12.2ch.net/test/read.cgi/tech/1176479959/
【.NET】F#について語れ【OCAML】
http://pc12.2ch.net/test/read.cgi/tech/1186030985/

4 :
関数型言語の定義なんて
・関数がファーストクラスオブジェクトとして扱える
・リスト操作が簡単
・ラムダが簡単
としか思っていないし、それ以上のことはどうでもいい
純粋とか非純粋とかマジどうでもいい

5 :
参照透明性ぢうやう

6 :
>>4
考えを改めると世界がよりよく見渡せるようになると思う。
今後もそんな目は要らないと言うのなら、どーでもいいが。

7 :
>>6
別にそんな一所懸命、何かをわかってるフリしなくていいです。

8 :
劣化の件は私も余計だと思ってましたので取り下げます
失礼しました
ところで、前スレの990の
>ソフトウェア設計(あるいはプログラミング)という行為を、(理論を背景にして)
>より抽象的に、より形式的に実践しようとすることは大切だし、それを多くの人に広めたい。
というのは同意見です
現場でも理論的な背景を知り実践していくべきです
そういう意味ではHaskell, OCaml, Scala, haXeあたりを進んで実戦投入していけば、
いやでも広まると思います
もし現場で設計を担当していて、開発言語を決定できる権限のある方はこれらの言語を推してください

9 :
>>4
JavaScriptは関数型言語か否か

10 :
>>8
納期に間に合わなかったら誰が責任とるの?

11 :
>>7
分かってないけどいーじゃん、フリぐらいさせろ。
別に大きく間違った事は言ってないよな。

12 :
>>10
Haskellじゃなくて他の"一般的な"言語を使っていたら納期遅れの責任を回避できるの?
どの言語を使おうが、責任の所在は変わらないと思う

13 :
>>8
末端の単純労働力のレベルを知ってて仰ってるのん?

14 :
>>13
はい、ある程度は知っています
C++やPHPを使わせるよりは逆に安全だと思っています
実際に某関数型言語(詳しくは書けません)で協力会社さんに依頼を出したことがあります
確かに出来上がったコードは期待以下でしたが、それでもヌルポが頻発するよりましでした

15 :
趣味で押しつけたのが原因ならお前のせいなんじゃねーの

16 :
当り前過ぎてためらいますが、やや気遅れしている人もいるかもしれず、関数型言語普及のために書きます
システム開発の現場の方へ:
もし趣味で学んだ関数型言語がシステム開発に有用だと思ったら、
上長やリーダー(システム設計の責任者)にその件をぜひ提言して下さい
その提言が受け入れられたからといって、万一プロジェクトが失敗した責任があなたに
降り掛かってくる事はありません
安心して提言しましょう
システム設計責任者へ:
どの言語を選ぼうが、結局のところ設計責任はあなたにあります
胸を張って自分がいいと思う言語を選択してください
たとえそれが趣味であろうとなかろうと
一般的であろうとなかろうと

17 :
などと供述しており動機は不明

18 :
当たり前過ぎるけど、
実用プログラミング言語なんて、
それをつかう一般的プログラマにとって、
言語自体が把握できる大きさと複雑さに抑えられていて、
対象とする問題記述に可能な限り簡易であればそれでいいのだと思う。

19 :
>>18
そうだとするとC++なんて実用言語としては論外だなw
C++をもちだすのはスレチだろうけど。

20 :
>>19
まったくその通り。
念のため>>18ではライブラリも含めての複雑さ大きさ。

21 :
>>20
でも複雑で巨大でも、使うプログラマからすれば必要な部分だけチョイスして
プログラムできればそれでいいんじゃないかと思うよ。
C++の全仕様を把握してるプログラマとかANSI CLの全ライブラリを熟知してるプログラマとか
存在しない(と思う)けど、別にそれは問題ないだろ。

22 :
K&R C が最強
はい論破

23 :
>>21
必要な部分だけ選択することができて、
名前などがうっかり重複してしまっても問題ないといいですね。
>>22
対象とする問題の種類と大きさによる。

24 :
>>23
大抵のプログラム言語は名前空間なりパッケージシステムなりで
名前の重複は実用上問題にならないか、問題が起きても発見できるんじゃねえ?

25 :
テンプレにScalaスレが無い……

26 :
Scalaスレあったのか……

27 :
プログラミング言語 Scala 2冊目
http://pc12.2ch.net/test/read.cgi/tech/1246289771/

28 :
Scalaスレも有るんでスカラね。

29 :
スッカラ忘れてたYo

30 :
Lisperってどこにいけば会えるんだ
色々と質問攻めしたいんだけど

31 :
http://pc11.2ch.net/test/read.cgi/prog/1234958064/
マ板の名物精神病者につき、無視推奨

32 :
面白そうなヤツじゃないか。
Languageもまともに綴れないようだし。

33 :
ここにLisperなんてロートルを超越した◆XaaQNk.がいるから、議論するといい
http://pc12.2ch.net/test/read.cgi/tech/1242484767/

34 :
うゆって去年まで学生だったのか
おっさんだと思ってた
おっさんは頭おかしい奴多いからな

35 :
なあ、Jのスレ立てたら誰か来るかい?

36 :
>>4
> ・関数がファーストクラスオブジェクトとして扱える
> ・ラムダが簡単
なんだこれは。ちゃんと整理しろ。

37 :
これほどまでに簡潔に整理された定義は無いと思うが。

38 :
関数型言語のより簡潔な定義:
関数の返り値を使って処理を行うスタイルが徹底されている言語

39 :
ttp://live24.2ch.net/test/read.cgi/livebase/1269588909/94
94 :どうですか解説の名無しさん:2010/03/26(金) 16:46:32.35 ID:A/YF/FyF:

40 :
確かに神IDだけど受ける層狭すぎだろw

41 :
まだあったのか

42 :
あげ

43 :
ほしゆ

44 :
Lisperに、質問攻めしたかったんだけど、
もう、それはいいや
その段階は超えた
関数型言語って、わずかにズレてんだよなぁ・・・・
クラスなんてものを使わず、関数でかいていくのはいいんだけど、
それだけじゃダメで
根底に1つ、クラスが必要であって
そのクラスオブジェクトにlambdaやメンバ変数やメンバ関数を、 オブジェクトインスタンスごとに付け加えていく感じ
それによって、型 = データとなって、
プログラム中に同じ型が存在しなくなるみたいな、そういうやつ
関数型言語は、まだそれを夢想している段階の言語で、決定的なものが抜けているからオブジェクト指向言語にすら勝てない
2011年の今現在、関数型言語で関数型プログラミングするよりも
オブジェクト指向言語にて関数型プログラミングしたほうが圧倒的に優位

45 :
そういうノリで笑ってもらえるのは高校までだなあ

46 :
>>44 OOPと関数型の関係に興味あるなら、下を読むとよい。
OOPの発想をSMLで表現する方法が載っている
http://mlton.org/ObjectOrientedProgramming

47 :
というか、オブジェクト指向の機能持った関数型言語がないと思ってる時点で、
不勉強な馬鹿丸出しなんだが。
同時代関数型言語でオブジェクト指向機能ないのを探す方が難しい。

48 :
>>46-47
いやいや、君ら最近覚えたような人だろうけど、
そういうことじゃないんだよね
上のコテの「OOPLで関数型」は散々議論をし尽くされた上での結論なんだよ
ひよっこには理解はできんだろうが、まあ可能性を探してくれたまえよ・・・

49 :
自演の練習をしたほうが良いかと思いました

50 :
そうそう認めたくないんだよな
判る判る・・・

51 :
おっとsage忘れた
関数型の関数は重すぎるってことだな
さよなら・・・

52 :
>>48
(注:◆KOAgYBL/Xgは うゆのトリップのひとつ)
うゆ君は英語論文も英語ブログも全然読めないですよね。
「散々議論をし尽くされた」とはどこの議論の事でしょうか?
ム板で技術に関する嘘をまき散らすのは止めてください。

53 :
副作用がないオブジェクト指向設計は
実現可能か?
俺は無理だと思う。
オブジェクト指向と関数型は
相容れない。

54 :
副作用のない実用性のあるプログラムは実現可能か?
俺は無理だと思う。

55 :
xmonadやdarcsは実用的なうちに入らないんだな

56 :
関数型言語には副作用がないというのも初級者の陥りがちな間違い。
λ計算じゃないんだから。

57 :
つまり>>53は初心者と

58 :
>>56
純度を高くすると限りなくラムダ計算に近くなって、無くなると思うぞ

59 :
Haskellには副作用がないけど破壊的更新や入出力のあるプログラム書けるよ

60 :
変数への代入も副作用なんだね。

61 :
ラムダ計算自体と副作用の有無って無関係なんじゃないの

62 :
関数型言語というのは、条件分岐(if等)と繰り返し(for等)を
変数なしに実行できるような文法を持ってる言語のことだよ。

63 :
結論としてテンプレートメタプログラミング最強と

64 :
再帰呼び出しがあれば、すべて関数型言語ということか

65 :
>>63 いや、むしろテンプレートメタプログラミングで関数型言語的なもの
に興味を持って、解読不能なコンパイルエラーでいやになって、MLに移った
のだが。まあ、gcc2.95の時代なので、もっとましになっているとは思うが。

66 :
ばかじゃん

67 :
Haskellに副作用がないなんてよく言えるなあ。
>>58
思うって言われても…
現実のプログラミング言語で極限に近づいたものは何があるの?

68 :
また具体的な話なしか

69 :
>>67
言語の問題ではなく、スタイルの問題だよ
純度の高いスタイルで書けば、副作用は限りなくゼロに近付くということ

70 :
いや言語の問題として、Haskellには(参照透明性を破るという意味での)
副作用を持つ関数がほとんど存在しない
例外はunsafePerformIOなど使って定義された関数

71 :
ああん?お客さん?ああん?

72 :
>>70
ああん?生き別れの兄弟さん?ああん?

73 :
ああんっ…

74 :
2011年になっても未だにJAVA使い続けてる奴ってさ
仕事で仕方なくならわかるけど
家でもJAVAやってるなら本当にバカだよね。哀れ
ゴミ

75 :
Javaバカにしてる子ってさ
変数に$ついてる言語触ってるって事だよね
いちいちSHIFT+4キーおして $ 打ちまくってる感触はどう?

76 :
Javaバカにしてるレスなんて最近ないだろ

77 :
>>70
これでもYOME
http://en.wikibooks.org/wiki/Haskell/Understanding_monads/IO

78 :
え?オブジェクトって内部状態を持つものじゃないの?
副作用のないオブジェクトって何なの?

79 :
>>78
javaでいうとStringとか。
オブジェクトはメッセージに対応するメソッドを持っていればいいだけで
別に内部で状態を変化させなきゃならんとかいう決まりはないよ。
newObject = Message( oldObject, arg1, arg2 );
こういう形で十分成立する。

80 :
十分ではない
加工せず作って捨てる発想だと
効率が悪すぎるのさ
まあ幼稚園児では判らないかもしれない
つまり関数型の発想は園児レベル
その根底をぶち壊すしかない

81 :
破壊的変更を許しても意味的にimmutable、みたいな考え方をc++で見た気がするが
なんか名前がついてたと思うんだが思い出せない

82 :
もしかして: mutable

83 :
それだ。なんかワロタw

84 :
>>80 副作用を許しながら完全性・健全性を保っている言語は70年代からありますが

85 :
ループを再帰でやる、
比較をパターンマッチでやる、
辺りの概念は同意できるんだけど。
副作用そのもの扱いが確立されてない。
モナドみたいなごまかし方ってどうなのかね。

86 :
>>81
本当はCOWの事いいたかったんちゃうの?

87 :
つーか、変数に代入すること自体が
副作用なんだけどね。
副作用がだめというのなら
変数に入れてはいけない。

88 :
>>80
何が効率悪いの?
空間?速度?

89 :
>>87
イヤ。
10 = Xであるとき 11 = Xになってはいけないだけの話。
数学であるでしょ。アレがもとになってんの。

90 :
>>89
どうやったら、10=Xのとき
11=Xになるというんだ?

91 :
>>90
int X=10;
X=11;

92 :
やっぱり変数に代入することが
副作用じゃんw

93 :
f( x, e ) = if( x == e ) f( x + 1, e) else 0;
y = f( x );
ただし、これは副作用があるとは言わない。

94 :
f( x, e ) = if( x != e ) f( x + 1, e); else x;
y = f( 3, 5 );
間違えた、こんな感じか。意味ないけど。

95 :
もう少し具体的な説明を残しておこう。
ちょっと書きなおしたが関数の定義がこんなかんじだとする。
f( x, e ) = if( x - e ) x; else 1 + f( x + 1, e );
関数の呼び出しはこんな感じ。
y = f( 3, 5 );
で、関数というのは数だ。
数学表記で y = x + 1 なんかを関数というが正しく処理じゃなくて数なんだ。
関数定義というのは数式に名前をつけただけ。本来は関数の中には数(数式)が入る。
さっきの例で言うと
6 = ( if( 3 - 5 ) else 3; 1 + ( if( 4 - 5 ) else 4; 1 + ( if( 5 - 5 ) else 5; 1 + (・永遠に続く・) ) ) )
というひとつの式になる。
0 = ( if( 3 - 5 ) else 3; 1 + ( if( 4 - 5 ) else 4; 1 + ( if( 5 - 5 ) else 5; 1 + (・永遠に続く・) ) ) ) - 6
仮に方程式にしても通じる。もし、ここで変数への代入があった場合は?
考えてみたらわかるが5 = 4のような矛盾した数式が発生するため式として成立しなくなる。

96 :
このようになにをやっているのか
訳が分からなくなるのが関数型言語です。

97 :
うむ
>>95を1行で要約すると?
↓よろー

98 :
1+1=田

99 :
まぁ、数学が解からんヤツには、式に矛盾がないことによる見通しの良さなんて解からんだろうて。
猫に小判、豚に真珠、馬の耳に念仏、非理数系に関数型。

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 削除依頼
・ 次のスレ
アセンブラ初心者スレッド
形態素解析と日本語処理
C言が全く分からない俺を神が救ってくれるスレ
【Lisp】プログラミング言語 Clojure #2【JVM】