関数型プログラムと論理型プログラムって何?

公開日: : 最終更新日:2015/10/01 プログラミング , , , ,

1: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 15:21:23.552 ID:0Soylz2v0.net

おせーて

手続き型プログラム
オブジェクト指向プログラム
Javaのラムダ

は理解してる

2: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 15:27:27.970 ID:0Soylz2v0.net
お前らよく語ってるだろ
教えてくれよ

 

3: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 15:37:38.366 ID:0Soylz2v0.net
もしかして理解しないくせに使ってた?

 

4: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 15:38:27.646 ID:GTJq4qQzM.net
>>3
理屈はどうでも動けばいいんだよ

 

12: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 15:51:26.543 ID:ZiKJwAUQ0.net

プログラムってそもそも機械語を人間に可読性を与えたものじゃね?

でもその可読性を与えられても可読できない問題が出てきた

解決するためにより可読しやすい方法を色々考えた

でも制限がある状態で細かいことやるには向いてない

だから低級言語も残ってるみたいなかんじじゃね?

つまんねーことこだわる必要ないんじゃね?

 

スポンサーリンク

13: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 15:57:05.338 ID:0Soylz2v0.net
さてはお前らも分かってないだろ?

 

14: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 15:58:04.225 ID:GTJq4qQzM.net
>>13
わかってないしわかりたいとも思わないしわかる必要性も無い
現場ではとにかく動けばいいんだよ

 

16: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:01:11.349 ID:ZiKJwAUQ0.net

じゃあ、RISCでパイプラインふやしてきた理由ってなに?

言語にこだわる意味ってなに?

あらたなアーキテクチャで一新する可能性って何?

 

19: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:03:20.955 ID:0Soylz2v0.net

>>16
RISCでパイプラインふやしてきたのは実行速度の向上のため

残り2つは質問の意味が分からない

言語にこだわる意味ってなに?
あらたなアーキテクチャで一新する可能性って何?

 

20: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:05:41.210 ID:ZiKJwAUQ0.net

>>19
命令セットだって増やそうと思えばふやせんじゃね?

その命令セットのなかに今までと違う考え方の物が増えたとき

アーキテクチャ側にも影響を多大に与えることもあんじゃね?

 

22: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:07:09.918 ID:0Soylz2v0.net
>>20
アセンブリのこと分かってる?
分かってるならもうちょっとポイントが分かるように質問して欲しい

 

24: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:08:45.498 ID:ZiKJwAUQ0.net

>>22
クロックサイクル計算してドライバのタイミング設計とかする必要なくなったし

専用レジスタ使えばいいやん!

 

25: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:09:59.654 ID:0Soylz2v0.net
>>24
それと関数型か論理型がどう関係するのか?

 

26: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:12:18.590 ID:ZiKJwAUQ0.net

>>25
そもそも関数って何で生まれたんだ?

ライブラリの自作とかしたことある?

 

27: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:13:18.089 ID:0Soylz2v0.net

>>25
あるよ
手続き型言語は理解してるって書いたろ

関数型言語で言う関数とCの関数は違うことは認識してる?

 

28: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:14:59.825 ID:ZiKJwAUQ0.net
>>27
じゃあ論理回路の自作と順序回路の自作は?

 

29: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:15:51.331 ID:0Soylz2v0.net

>>28
それはやってない

関数型プログラムと論理型プログラムからどんどん遠ざかってるぞ

 

31: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:18:08.790 ID:ZiKJwAUQ0.net

>>29
遠ざかってるか?

プログラムの省資源化とか考えるようになんじゃね?

 

21: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:06:55.864 ID:ZfmEpp0h0.net
マジレスするとWindowsとMacを比べれば一目瞭然。

 

23: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:07:36.760 ID:0Soylz2v0.net
>>21
どっちがどっちなんだよ?

 

30: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:16:29.006 ID:ZfmEpp0h0.net
Windowsは関数型だからDLLで埋め尽くされるという現象が発生する。
Macは関数型ではないのでライブラリで埋め尽くされるというようなことはない。

 

33: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:19:53.770 ID:0Soylz2v0.net

>>30
そうなのか???
Macは知らないから否定できないけど今のMacはUNIXがベースなんだろ

そしたらその説明は違和感あるなあ
どういうことだろ?

 

43: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:33:40.069 ID:ZfmEpp0h0.net
>>33
CPUがi386型に依存するかどうかしか考えられない。

 

37: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:24:27.595 ID:GTJq4qQzM.net
動けば何でもいいと思っているのだが強いて言えば
組み込み系は関数型が多いかねえ
ハード屋さんがこしらえた関数を呼び出すのがプログラマの仕事
関数を呼び出すときのパラメータ値で光ったり回ったり動いたり
グラフィックプロセッサ制御なら〇描いたり△描いたり□描いたり消したり

 

38: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:26:26.727 ID:0Soylz2v0.net
>>37
手続き型じゃなくて関数型なの?
Cは普通は手続き型言語って呼ばれるし、Cの関数は使うよ

 

40: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:28:23.525 ID:GTJq4qQzM.net

>>38
Cは手続き型なの?
関数型じゃないの
よく知らんが

関数型ってどういうものか、>>1は詳しそうだから教えてくれ

 

39: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:26:47.940 ID:GTJq4qQzM.net
お金の計算がメインの事務系なら繰り返し型プログラムが多いかねえ
条件次第でお金をあっちの項目、コッチの項目へ振り分けるとか
COBOLはこのような処理にとっても向いている
これをjavaでやろうとするのだからそりゃ大変だよ

 

44: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:34:00.834 ID:GTJq4qQzM.net

めんどくせえがちとググってみた
関数型言語として定義されているもののほとんどは実用に耐えないものだな
学者とか研究者とかおまえらニートの遊び道具でしかないんじゃないの
この中で俺が使ったことがあるのはLISPだけだな
それもemacsのカスタマイズしただけだww

現場じゃ効率よく書けて動けば何でもいいんだよ

 

45: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:34:52.736 ID:0Soylz2v0.net

言葉の基本的な定義に戻ったほうがいいな

手続き型プログラムはCとか従来のプログラムの方式
関数で処理を定義して関数を呼び出す

オブジェクト指向プログラムはデータとそれに対する操作をオブジェクトとしてまとめる
オブジェクトの相互作用としてコードを記述する

関数型プログラムは多少あやふやな理解だが関数は処理の塊を表す
関数を置き換えたり、組み合わせることで処理を構成する
それを実現するために関数は入力を変えないことが原則である
入力をもとに何らかの処理を行って結果を出力する
で、その結果を次の関数に渡すというイメージ

論理型プログラムは謎

 

46: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:37:32.042 ID:0Soylz2v0.net
手続き型の関数についての説明を聞いてる訳じゃないのだよ
関数型と論理型について教えて欲しい

 

49: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:41:32.359 ID:GTJq4qQzM.net
>>46
wiki読んで自分なりに考えてみた方が解決は早いと思うぞ
vipにいるプログラマはきっと誰も知らんだろう

 

51: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:42:53.467 ID:0Soylz2v0.net
>>49
知ってる人と語って教えて欲しい気分なんだよ

 

53: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:45:15.047 ID:ZiKJwAUQ0.net

>>51
とあとえばカンブリア紀に生命の分類とかにこだわる必要ないんじゃね?

意図しない(または意図した)誤りが混入している可能性がありますってかんじだしw

 

54: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:46:46.960 ID:0Soylz2v0.net

>>53
手続き型言語とオブジェクト指向言語は設計思想から違う
Javaのラムダを使おうと思うと考え方を変えることが必要な部分もある
それによって便利になることもいろいろある

そういったことを聞きたいの

 

55: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:49:30.187 ID:ZiKJwAUQ0.net

>>54
可読性についてはどう思ってるの?

自分で書いたコードが読めなくなった場合

どうしてる?

 

56: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:50:50.341 ID:0Soylz2v0.net

>>55
自分の書いたコードが読めなくなることなんてないよ

それに質問が関数型と論理型とどう関連するのか分からない

 

58: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:57:36.271 ID:ZiKJwAUQ0.net

>>56
本当にない?

でっかいプログラムくんでどこでバグってるかわからないときとかってない?

 

61: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:59:49.067 ID:0Soylz2v0.net
>>58
テストのためのコードも作るからない

 

62: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 17:02:43.039 ID:ZiKJwAUQ0.net
>>61
バグ起こしたことないってことは例外処理もくんでないってことだよね?

 

65: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 17:05:03.560 ID:0Soylz2v0.net

>>62
バグを起こしたことあるからこそテストコードを書くんだが…

質問の意図が分からない
関数型と論理型とまったく関係ない書き込みであることは自覚してるよね?
プログラムの開発手法について語りたいのかな?

 

66: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 17:07:13.428 ID:ZiKJwAUQ0.net
>>65
でかいプログラム組んだときそれで誤動作しない?

 

68: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 17:09:10.545 ID:0Soylz2v0.net

>>66
基本的にはない
あればテストコードを追加で作成する

で、質問の意図は何?

 

73: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 17:20:08.476 ID:ippw6bYs0.net
>>54
ダウト
手続き型かどうかと、オブジェクト指向かどうかは全く直交した概念
その証拠に、Javaは手続き型のOOP言語だ

 

74: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 17:22:11.087 ID:0Soylz2v0.net

>>73
直交って並立しないって意味か?

Javaにラムダ追加されたぞ

 

75: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 17:22:49.513 ID:ippw6bYs0.net
>>74
直交ってのは、独立した概念であって互いに全く関係がないってこと

 

76: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 17:23:31.727 ID:0Soylz2v0.net
>>75
つまり>>73はどういうこと?
分かりやすい言葉で頼む

 

78: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 17:24:56.649 ID:ippw6bYs0.net
>>76
Javaのような手続き型かつオブジェクト指向の言語が存在する以上、
>>54の「手続き型言語とオブジェクト指向言語が設計思想からして違う」という主張はありえない

 

82: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 17:28:34.675 ID:0Soylz2v0.net

>>78
関数型か手続き型かって評価は関数型が騒がれるようになってからだろ
それまでは手続き型がオブジェクト指向型かって視点で見られていた

それにJavaにラムダが追加されたからJavaは関数型でもある

 

85: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 17:32:02.347 ID:ippw6bYs0.net

>>82
それまでは(C的な意味の)関数型かオブジェクト指向型か、じゃね?

まあともあれ、「ラムダが追加されたからJavaは関数型」というのは間違い
それが許されるなら、CでもOOPはできるからCはオブジェクト指向型言語という事になってしまう

 

87: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 17:34:02.909 ID:0Soylz2v0.net

>>85
手続き型って言い方は昔からあったぞ

Javaは関数型じゃないっていうなら
関数型はなんなのってことを最初から聞いている
それを教えてくれ

 

90: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 17:36:23.251 ID:+DNfMGd40.net
>>87
関数がファーストクラスオブジェクトな言語が関数型言語

 

93: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 17:41:52.116 ID:0Soylz2v0.net

>>90
ようやく経験者に出会えた気がするよ

関数型言語にはデータと関数しかないってこと?
普通の業務システムだと商品やら従業員やらオブジェクトとして表したいデータが
たくさんあるけどどうするの?
そもそも業務システムには向いていないってこと?

 

102: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 17:53:06.694 ID:ippw6bYs0.net

>>93
実用性を全く無視した理想的な関数型言語があったとすれば、
入力さえ決まれば一意に出力が決まるプログラムしか書けない(数学的な関数は、入力から出力が一意に決まるものだから)

……なんだけど、そんなプログラムがあっても何の役にも立たないので、
関数型言語では、本来は実行ごとに変化する値を読み取って返す関数(ファイル入力とか)を、
「え? この関数は最初っからそういう値を返す一意な関数なんですよHAHAHA!」という欺瞞を使って実用可能なプログラムにしてる
その欺瞞を上手く使うと、まあ何だかんだで手続き型と遜色のない処理ができるって寸法

 

105: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 17:55:08.453 ID:0Soylz2v0.net
>>102
商品やら従業員やらを表すオブジェクトは作れるの?
それがないと手続き型言語の暗黒時代に逆戻り

 

107: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 17:57:08.584 ID:ippw6bYs0.net
>>105
単にデータ型をユーザー定義するだけ
OOPかつ関数型な言語は幾つもある
F#とか

 

109: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 17:59:35.125 ID:0Soylz2v0.net

>>107
ユーザー定義したデータ型にはメソッドも定義できるの?
それが定義できるならJavaのラムダと変わらない感じがするけど

関数型だと入力の不変性が強制されるけど
Javaではプログラマに任されてるって違いがあるってくらい?

 

112: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 18:03:00.161 ID:ippw6bYs0.net
>>109
どっちかっていうと関数のオーバーロードに近い概念になるな
a.hoge(); を hoge(a) と呼ぶイメージだから、ある意味でCに戻ってると言えなくもない
オーバーロードと違うのは、aの実行時の型に応じてポリモーフィングされるってこと
結果、あたかも継承と同じような事ができる

 

113: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 18:05:21.154 ID:0Soylz2v0.net

>>112
もしかして関数が特定のクラスに属するって構成になっていない?
関数の引数の型を定義しておいて
呼び出された関数の引数の型によって呼び出される関数が決まるみたいな

smalltalkがそんな感じだって読んだことがあるような

 

118: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 18:12:42.235 ID:ippw6bYs0.net
>>113
強いて言うなら名前空間に所属するくらいの事はあるかね
まあ、その辺は言語ごとに違ったりもするんで確実な事は言えないけど
(特に、元々は手続き型OOP言語のためのVMを使う関数型言語だと)

 

120: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 18:16:09.357 ID:0Soylz2v0.net

>>118
なるほどな
クラスとメソッドは必ずしも結び付けなくていいのかもしれないけど
セットで束ねたほうが確実に理解しやすい
メソッドとクラスが結びついていない言語にはなじめないなあ

本来の関数型だと入力の不変性が強制されるけど
Javaではプログラマに任されてるって違いがあるってことだな

 

50: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:42:41.971 ID:azQbtG+N0.net
関数型とか人工知能の研究者くらいしか使わないんじゃないの

 

52: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:44:06.388 ID:0Soylz2v0.net

>>50
Javaのラムダが出たから今後はそこそこ使われると思う

純粋な関数型言語から見てJavaのラムダがどこまで関数型言語の機能を
実現しているのかは分からないけど

 

57: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:57:20.142 ID:+eUHTpZCp.net
設計ドキュメントを残す
コメントを書く
これでコードが読めなくなることはない
僕の書くコードは半分くらいコメント

 

60: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 16:59:47.614 ID:sdBuw04H0.net
>>57
俺もそんな感じだ
設計書を書けない奴は居ても書かない奴は居ない
俺は書かないんだって言ってる奴は100%書けない奴

 

92: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 17:40:02.625 ID:+DNfMGd40.net
関数型言語を学ぶ意味ってのは、参照透明性とかを意識するようになることだと思ってる

 

94: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 17:42:41.570 ID:0Soylz2v0.net
>>92
もう一段階落とした文章で頼む

 

98: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 17:48:25.240 ID:+DNfMGd40.net

>>94
参照透明ってのは、ある関数に同じ引数が与えられたら同じ結果が返ってくること。

C言語とかだと、その時の状態によって結果が変わる可能性がある。グローバル変数とか。

参照透明の何がいいかっていうと、並列処理に向いていること。状態を持つ必要がないから、どのマシンで動かそうが結果は変わらないからな

 

100: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 17:50:59.505 ID:0Soylz2v0.net

>>98
あーそれのことか
Javaのラムダで学んだ

関数型だけで業務システムなんて組めないと思うんだけど
そうするとJavaのラムダって現実的な関数型ってなる気がするが

 

108: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 17:57:47.265 ID:+DNfMGd40.net

>>100
どんな業務プログラム想像してるのかわからんけど、関数型言語でもチューリング完全だからJavaなりで書けるなら関数型言語でも書ける

まぁ、書きやすいかと言われたら書きにくいプログラムもあるけどね。適材適所で選べばいいんじゃない?

 

110: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 18:01:42.634 ID:0Soylz2v0.net

>>108
例えば人事管理のアプリケーション

山田さんが平社員から係長に出世して給料が上がりまし、とか
今年は3%のベースアップがありました
みたいな情報をオブジェクトの属性を更新するって考えになじみやすい

これを関数型でやるのはしっくり来ない

 

114: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 18:06:25.793 ID:+DNfMGd40.net

>>110
だから、全てを関数型でやる必要はないんだって

例えば大量のログを統計処理して有用なデータを取り出すなんて処理には関数型で書くと書きやすい。並列処理が楽だから。

関数型でやりやすい処理には関数型、OOPがやりやすいならOOPで書けばいい。それじゃいかんのか?

 

116: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 18:08:42.041 ID:0Soylz2v0.net

>>114
俺はJavaは関数型も書けるって理解していたぞ
そうじゃないって意見もあったからそれじゃ関数型って何?って聞いただけで

Javaのラムダは関数型って呼んで良さそうだな

 

95: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 17:44:18.741 ID:sONq41Z50.net
関数型言語はすべての関数が変数
あと変数は使い捨て

 

96: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 17:46:10.516 ID:0Soylz2v0.net

>>95
それっぽい気はするんだけど
そうすると関数型言語が向いているのはどんな領域?

少なくても業務システムには向いてないと思う

 

103: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 17:54:35.552 ID:jk8WIQXMa.net
手続き型は処理を実行順に書いていくようなやつで
関数型は関数の実行でプログラムができてるみたいなやつだろたしか

 

117: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 18:11:09.500 ID:0Soylz2v0.net

関数型はだいたい分かった気がするんだが

論理型とは何ぞや?

 

119: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 18:14:20.987 ID:ippw6bYs0.net

>>117
論理型は超簡単

プログラム=満たすべき条件の集合で、
入力を入れると条件と矛盾しないものが出力されるだけ

 

121: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 18:17:02.353 ID:0Soylz2v0.net
>>119
プログラム内の関数?じゃなくて
プログラム自体がってこと?

 

123: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 18:24:04.177 ID:ippw6bYs0.net
>>121
プログラム自体が、例えば「犬->哺乳類」「哺乳類->動物」みたいな条件式の集合になってる
そこで「『犬->動物』か?」と入力したら犬->哺乳類->動物と推論して、「true」が答えになってくるようなイメージ

 

124: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 18:27:23.517 ID:0Soylz2v0.net
>>123
どんな領域で使われるの?
Webアプリケーションとか業務システムではないでしょ

 

125: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 18:31:00.450 ID:ippw6bYs0.net
>>124
問い合わせ以外の事ができないからアプリケーションは作れないな
一種のDBとして使うイメージ
まあ研究用が大半じゃね?

 

127: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 18:34:43.929 ID:0Soylz2v0.net
>>125
なるほど
SELECTだけのSQLって感じかしら

 

129: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 18:41:13.057 ID:ippw6bYs0.net

>>127
プログラムの入力がINSERTかな……
まあ、

% G(X)はX>=10の時に真、それ以外は偽であるものと定義
G(X) :- X>=10
% F(X,Y)はG(X+Y)が真の時に真、それ以外では偽であるものと定義
F(X,Y) :- G(X+Y)

みたいな関数タイプの条件指定もできるから、SELECTよりはだいぶ高度ではある

 

131: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 18:52:21.981 ID:0Soylz2v0.net

>>129
WHERE X + Y >= 10
で書けそうだけど

ロジックが複雑になると利点が出てくるのかな

 

132: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 18:54:02.543 ID:4eon6mNDa.net
話終わっちゃったけど関数型って数学の函数を体現した言語でしょ
だから副作用がなくてピュアピュア
副作用ありまくりなjavaのラムダなんて関数型じゃないし
そも◯◯言語って言語の設計思想の話だから関数型っぽいことができるから関数型なんて呼ばんだろ

 

133: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 18:58:03.408 ID:0Soylz2v0.net

>>132
Javaのラムダでも副作用のないように記述できるし
それが推奨されている

逆にオブジェクト的な考えのない関数型なんて使い道が狭いし

 

135: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 19:07:11.817 ID:i/NfkwE/a.net
>>133
言語的制約のない推奨ってただのコーディング規約じゃん
あと逆にが何に対する逆なのかが分からない

 

136: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 19:10:09.643 ID:0Soylz2v0.net

>>135
自分がミスすることのないものであれば問題ない

オブジェクトを持ってる関数型は純粋な関数型と言えるの?

 

140: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 19:19:20.137 ID:MdYxD+CLa.net

>>136
自分がミスしなければいいは程度が低い
人間はミスをする生き物だ

オブジェクトがあろうがなかろうが純粋だったら関数型だろ
そしてオブジェクトがなければ使い道が狭いという理屈も分からない
オブジェクト思考しか理解する気がないという意味にしか見えない

 

141: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 19:23:21.706 ID:0Soylz2v0.net

>>140
バグと変更するコードを意図的に書くって違う

従業員オブジェクトは所属する部署オブジェクトを参照している
組織改変で部署の名前が変わった
これをどうやって扱うんだ?

 

144: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 19:25:26.806 ID:ippw6bYs0.net
>>141
部署名のみを変更した新しいオブジェクトを作成する
DBに上書き保存する

 

145: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 19:26:54.653 ID:0Soylz2v0.net
>>144
はいバグ
落ち着いて考え直せよ

 

146: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 19:29:13.938 ID:ippw6bYs0.net
>>141
従業員オブジェクトも新しい部署オブジェクトにした新しいのに変えろって?
そんな事まで説明する必要あるのかよ

 

147: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 19:30:35.402 ID:0Soylz2v0.net

>>146
当然説明しろよ

で、部署オブジェクトから社員オブジェクトへの参照がない場合はどうするの?
オブジェクト間の参照が一方向しかないケースが珍しくないことは知ってるよね?

 

149: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 19:32:52.340 ID:Y3JKv16oa.net
>>147
遅延評価でステートレスが基本なのに参照云々ってなに?

 

151: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 19:35:42.934 ID:0Soylz2v0.net
>>149
ステートレスなら従業員と部署の関係はどうやって保持するのかな?
ってか遅延評価の意味分かってないだろ
知らない単語をがんばって使うな
文章としておかしいから

 

163: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 19:51:40.367 ID:AtkfzK9y0.net
>>151
それを保持し続ける必要あるの?どっかに永続化すればいいだろ
上にもあるけどDBの領分

 

166: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 19:55:34.077 ID:0Soylz2v0.net
>>163
部署オブジェクトと従業員オブジェクトがメモリ上にある間は
関係を保持するのが当然だと思うよ

 

167: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 19:56:08.541 ID:0Soylz2v0.net
>>166
参照を保持するって言ったほうがいいか

 

171: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 20:03:38.661 ID:ippw6bYs0.net
>>166
関数型の場合、「メモリにある間」ってのは「関数の戻り値として出てきて、別の関数の引数になるまでの間」な

 

174: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 20:05:52.575 ID:0Soylz2v0.net
>>171
部署と従業員の関連は業務要件としてちゃんと保持することが必要

 

177: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 20:06:48.692 ID:ippw6bYs0.net
>>174
それは型の定義として決める事であってオブジェクトが決める事じゃないだろ?

 

180: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 20:08:07.821 ID:0Soylz2v0.net
>>177
意味不明
個別の従業員と部署の関係をクラスが保持する訳ないのに

 

182: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 20:10:35.608 ID:ippw6bYs0.net
>>180
クラスというかこの場合は関数か
getterメソッドだけ考えろ
getterメソッドを使えば必要なデータが取れてくる、それ以上何か知る必要が?

 

185: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 20:13:47.981 ID:0Soylz2v0.net

>>182
getterは参照をたどるんだろ

なんかもういいや
レベルが低くて会話するのが面倒

 

190: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 20:16:41.651 ID:ippw6bYs0.net
>>185
参照を辿らないgetterじゃいかんのか?

 

192: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 20:17:40.831 ID:0Soylz2v0.net

>>190
毎回DBを参照するんじゃオブジェクトじゃない
ってすでに言ったろ

これ以降はすでに回答したことの質問は無視する

 

193: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 20:18:25.634 ID:ippw6bYs0.net

>>192
遅延評価により、使う場所でしかDBを参照しない

終了

 

148: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 19:32:40.057 ID:ippw6bYs0.net
まあそもそも関数型だと、「従業員オブジェクトが部署オブジェクトを参照している」っていう状態がおかしいのよね
「従業員オブジェクトが部署オブジェクトのIDを保持している」だから、部署オブジェクトの参照がどうなっていようと知ったこっちゃない

 

152: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 19:37:14.029 ID:0Soylz2v0.net
>>148
IDしか持っていないんじゃ
社員の所属している部署名の情報が必要になったらどうするのかなあ???
ぜひ説明して欲しいw

 

153: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 19:38:09.568 ID:ippw6bYs0.net
>>152
IDからサーチすれば一発だろ

 

155: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 19:42:22.411 ID:0Soylz2v0.net
>>153
そんなやり方じゃ部署オブジェクト使わないだろ
部署オブジェクト作成するってさっき言ったのにどうしちゃったの???

 

157: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 19:44:32.005 ID:ippw6bYs0.net
>>155
部署オブジェクトを使わなければいけない時には部署オブジェクトを使う
そうでない時には使わない
そんだけの話だろ

 

150: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 19:35:09.781 ID:POjdbyILd.net

なんか、最近オブジェクト指向について学んだ学生が、関数型言語をしって無理やりオブジェクト指向的に捉えようとしてハマってるって感じだな…

知りたきゃ試すなり友人なりに聞けばいいじゃん。haskellとは言わんでも、scalaやってる友人なら普通周りにいるだろ。優秀なプログラマー気取るからには。

それともほんとに孤独に勉強してるのかね

 

スポンサーリンク

160: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 19:49:04.346 ID:elbXqaNRM.net
従業員オブジェクトも部署オブジェクトも作り直すんじゃないの?

 

164: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 19:52:00.598 ID:0Soylz2v0.net
>>160
純粋な関数型だとそうするのかもしれないけど効率悪い
オブジェクト+関数型が現実的だと思った

 

168: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 20:00:36.114 ID:qr44s+Yia.net
関数型とか論理的とかそれ知ってると何かあんの?

 

170: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 20:03:18.323 ID:0Soylz2v0.net
>>168
個人的には
関数型はJavaのラムダで今のところ十分だと分かった
論理型は違う領域のものだからしばらく勉強する必要はなさそう

 

186: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 20:14:20.074 ID:jFrJkKKO0.net
基本的に手続き型プログラミングさえ分かればものづくりには困らない

 

187: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 20:15:05.203 ID:AwcBKA1Q0.net
関数型プログラムとはなんですか?

 

191: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 20:16:44.348 ID:0Soylz2v0.net
>>187
関数型プログラムにおける関数は処理の塊を表す
関数を置き換えたり、組み合わせることで処理を構成する
それを実現するために関数は入力を変えないことが原則である
入力をもとに何らかの処理を行って結果を出力する
で、その結果を次の関数に渡すというイメージ

 

197: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 20:22:20.347 ID:m142lB7+0.net

関数型プログラミングというのはCでもC++でもjavaでもなんでもいいけど以下の条件に沿っているものという認識

・インプットの値を変えない(javaのrefやcで言うところのポインタの参照先の値等)
・処理した結果をreturnで戻す

複数の処理から呼ばれる場合にいつも同じ動作をするという利点があると思っている
いつも同じ動作をするからいろいろつなげて複雑な動作も出来るねという認識
計算処理の共通部品とかでよく使う印象

関数型言語は知らない

 

200: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 20:24:55.183 ID:0Soylz2v0.net

>>197
そんな感じだな

本当に純粋な関数型言語は使い道が限定されるから
不変性についてはある程度許容するのがほとんどなんだろうと予想

 

204: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 20:33:58.886 ID:t0QQZJrr0.net
関数型プログラムのこと知らんけど
C#のLINQは、もうあれが無ければコレクション操作はやりたくない体になってしまった

 

207: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 20:36:43.876 ID:0Soylz2v0.net
>>204
Javaのstreamみたいなものかな
ラムダと組み合わせて使えるんだけどコレクションから条件で絞ったり
集計したり、いちいちループを明示的に書かなくていいから便利

 

205: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 20:34:14.366 ID:qr44s+Yia.net
Javaとかやってる時点で才能ない

 

208: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 20:37:37.410 ID:0Soylz2v0.net
>>205
Java楽しいのに
最初のjava.ioのせいで悪い印象を持つ人も多いと思う

 

214: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 20:42:21.214 ID:qr44s+Yia.net
>>208
昔からJAVAはゴミ

 

212: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 20:40:50.939 ID:t0QQZJrr0.net

C#やりなよ

Unityという超楽しいゲーム開発生活がはじまるよ

Unity5.2になって特別な準備なしにVisualStudioで開発できるようになった。
日本語情報もかなり充実してる。

ゲーム作成を趣味の一つにしたいと考えているなら検討する価値超あり

 

218: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 20:44:49.958 ID:0Soylz2v0.net
>>212
業務システム系のお仕事
ゲームは畑違いだからかかわることはないだろうな
面白そうだけど

 

222: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 20:57:42.906 ID:m142lB7+0.net

冷蔵庫に一個あるどら焼きをドラえもんが食べる処理を考えた

・手続き型言語の場合

冷蔵庫開ける

ドラえもんがどら焼きを一個食べる

どら焼き0になる

・関数型言語の場合

【冷蔵庫からどら焼きをマイナス1する関数】

ドラえもんが【冷蔵庫からどら焼きをマイナス1する関数】を呼び出す

どら焼き0になる

 

226: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 21:06:53.652 ID:ippw6bYs0.net

>>222
【行為者によって中のどら焼きをマイナス1コされた冷蔵庫を得る関数】

【行為者によって中のどら焼きをマイナス1コされた冷蔵庫を得る関数】に、どら焼きが1コ入った冷蔵庫と、行為者としてドラえもんを与える

どら焼きが0コ入った冷蔵庫を発見

こうじゃね?

 

229: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 21:08:29.462 ID:0Soylz2v0.net
>>226
不変性どこ行った?ってなる
ドラえもんしばりはきつ過ぎるから違う例を考えよう

 

232: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 21:16:39.131 ID:ippw6bYs0.net

>>229
1コ入った冷蔵庫は1コ入ったままだし、
0コ入った冷蔵庫は0コ入ったままだから、不変性は満たしてるよ

……いや他の例必要か?

 

225: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 21:04:18.458 ID:qr44s+Yia.net
たとえ話持ってくる奴ってそれが理解してもらえると思ってるからタチ悪い

 

227: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 21:06:59.559 ID:0Soylz2v0.net
>>225
そうなんだよな
説明したいことにぴったりのたとえってなかなかないからかえって難しい

 

230: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 21:09:36.543 ID:aWC1a1zB0.net
論理型プログラミング(特にPrologのことだけど)は事実を記述する言語だよ
プログラムに対して事実を問い合わせることで計算するよ
例えば「トマトは野菜である」という事実と「トマトは赤い」という事実を記述して
「赤い野菜は何」と問い合わせるとトマトが返ってくるよ

 

231: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 21:13:44.853 ID:0Soylz2v0.net
>>230
ほうほう
SQLよりも便利な機能とかこういうケースで役に立つとか知ってたら教えて

 

233: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 21:18:33.901 ID:aWC1a1zB0.net
>>231
SQLよく知らない
Prologで書くといいっていうケースも思い当たらないなぁ

 

234: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 21:21:02.876 ID:0Soylz2v0.net
>>233
基本的にはデータを分析するのに役立つって感じなのかなあ
なんとなく分かってきた

 

236: 以下、\(^o^)/でVIPがお送りします 2015/09/27(日) 21:28:20.506 ID:qr44s+Yia.net

無限リスト、イテレータ、再帰、ツリー、lambda
副作用なしで組む事の利点、組み方

ここら辺のノウハウを関数言語からオブジェクト指向言語に
引っ張ってくれば良いだけで
関数型オンリーでやる意味は無いんだよ
今どきの言語は殆どが関数型言語の上位互換だから
純粋関数型とかで組もうとするのは単なるマゾプレイ

 

237: 以下、VIPがお送りします 2015/09/27(日) 22:24:19.10 ID:6ADrk9xuh

そもそも0Soylz2v0.netがいっているのは関数型言語の思惑から外れている気がする

メモリ上にオブジェクトを作るのか、データはDB上において置いて都度処理をするのか
その言い争いになっているだけに見える

>業務系のシステムで状態保持が不必要って正直思いつかないけどどんなのだろ?
WEBAPIとかはそうだろうね

ドラえもんにたとえられないということは、同じものさしで話が出来ないということ

あとたとえ話が出来ないやつは理解してもらえないから仕事が増やせなくてタチ悪いと思うよ

引用元:http://viper.2ch.sc/test/read.cgi/news4vip/1443334883/

関連記事

javascript-2

javascriptで途中で関数止めたいんだけど、どうしたらいいの

1: 風吹けば名無し@\(^o^)/ 2015/09/17(木) 12:01:29.71 ID:W

記事を読む

https---www.pakutaso.com-assets_c-2015-06-PAK86_codeing20140517-thumb-1000xauto-17052 (1)

プログラミング習うなら、専門学校と大学どっちがいいの?

1: 以下、\(^o^)/でVIPがお送りします 2015/09/13(日) 19:21:28.3

記事を読む

bsPAK85_coding15095904

webプログラミング特技の社会人なんだけど、連休終わるまでになんかwebサービス作りたい。何かアイディアない?

1: 以下、\(^o^)/でVIPがお送りします 2015/10/11(日) 11:34:44.4

記事を読む

https---www.pakutaso.com-assets_c-2014-01-CSSS79_tabledesagyousuru20131019500-thumb-autox1000-4008

CSSのボックスの回り込みが上手くいかない…天才のVIPPER助けてくれ(´;ω;`)

1: 以下、\(^o^)/でVIPがお送りします 2015/05/06(水) 15:13:36.8

記事を読む

9021068066664569333

GitHubで世界で人気のプログラミング言語を発表 一番人気は皆が大好きなあの言語

1: バズソーキック(宮城県)@\(^o^)/ 2015/08/22(土) 19:54:42.2

記事を読む

20150731041947

プログラマーはwindows10に変更しないほうがいいぞwwwww

1: 以下、\(^o^)/でVIPがお送りします 2015/08/05(水) 08:13:43.1

記事を読む

unnamed

Excelの勉強してるんだけど、関数で挫折しそう。独学じゃ無理なのかな・・・・

1: 名も無き被検体774号+@\(^o^)/ 2015/11/21(土) 02:28:37.98

記事を読む

https---www.pakutaso.com-assets_c-2013-09-OZP88_jojopose01500-thumb-autox1000-3425

怒りをぶつける掲示板作ったけど誰も来てくれない(´;ω;`)ブワッ

1: 名無しさん@おーぷん 2015/05/26(火)22:20:25 ID:5iP 2週間たっ

記事を読む

bsLISA78_MBAsawaru20141018102912

こういうWEBサイト作り始めたいんだけど、色々教えろカス

1: 以下、\(^o^)/でVIPがお送りします 2015/10/08(木) 20:42:03.8

記事を読む

https---www.pakutaso.com-assets_c-2015-06-PAK88_tetuyaakenosyain20141123141151-thumb-1000xauto-18076 (1)

C言語PHPマスターしたけどプログラマーになりたくないでござる

1: 以下、\(^o^)/でVIPがお送りします 2015/07/06(月) 03:26:56.3

記事を読む

Huawei-Mate-8-benchmark-post-launch_1
Androidのベンチマーク、10万点を突破 インフレが止まらない

1: 番組の途中ですがアフィサイトへの\(^o^)/です (ニククエ

hGJvbfh
せっかくの休みだ。原付で>>5に行く。

1: 名無しさん@おーぷん 2015/11/29(日)06:13:2

9xHNnte
XperiaZ5からdocomoのロゴだけ消せるシートが発売開始

1: 番組の途中ですがアフィサイトへの\(^o^)/です (アウアウ

bsLISA78_MBAsawaru20141018102912
子供にプログラミング教えることになりそうなんだが、どうやって教えたら良いんだ?

1: 以下、\(^o^)/でVIPがお送りします 2015/11/2

top
国内で最大容量の8THDDが2万円台に値下がり

1: 海江田三郎 ★ 2015/11/29(日) 14:43:35.

→もっと見る

PAGE TOP ↑