関数型言語Part2
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/tech/987954395/
0159デフォルトの名無しさん
NGNGアクターっすね。
SMTPとかの非同期通信経路を使った、分散オブジェクト とか SOAP で実現されつつあるような…
0160デフォルトの名無しさん
NGNG高階関数は関数型の特徴ではないと言うことかな?
0161デフォルトの名無しさん
NGNGそれをしだすと話が大幅にずれるし、スレタイトルとも異なってくる。
俺が属性と方法の区別を言い出したのは、
高階関数との絡みでだ。
話すなら関数型に関連付けて話してくれ。
0162デフォルトの名無しさん
NGNG関数型「だけ」の特徴ではなくて動的な言語の特徴だと思う
0163デフォルトの名無しさん
NGNGそれは要するに特徴ではないと言うことを言いたいのか?
他にもあるから。
0164デフォルトの名無しさん
NGNGうーん。
高階関数とは何かと考えると、
1・関数を変数として扱える。
2・新しい関数を定義できる。
になると思うのだが、1はCでさえ実現できてしまい、2を考えると「動的である」と
同値になってしまう。
「int型があるのはJavaの特徴か?」ときかれているような気がする。
特徴の一つではあるが、関数型を他から隔てているものではないと思う。
0165デフォルトの名無しさん
NGNGeval等のメタ機能で動的に関数を作れることと,計算モデルに最初
からファーストクラスの関数が入ってることは区別してほしいな.
Perlのevalで「動的に」関数を作れるといってるのは,Cでsystem
を使ってコンパイラを呼び出し,コンパイル結果を動的リンクして
「ほら関数が動的に作れたよ」といっているのと一緒.
関数型言語の本質的な特徴は,(1)リダクションにもとづく意味論と
(2)高階関数になるのでは.(1)だけだと項書換え系一般になっちゃう
けど,(2)を入れることで関数型を特徴付けられる.
このスレで困るのは,「他のパラダイムにおいて高階関数を表現でき
るので,高階関数は関数型を特徴付けるものではない」という不思議
な議論をする人がいること.関数型と他のパラダイムは必ずしも対立
するものではない(特にオブジェクト指向とは直交しているといって
もよい)ことに注意してほしいな.
0166デフォルトの名無しさん
NGNG高階関数は関数型の必要条件だが十分条件ではない。
これが一番簡潔な言い方か。
0167デフォルトの名無しさん
NGNGCだとclosureというか、環境とか実現できんぞ。
0168デフォルトの名無しさん
NGNGを特徴づけるのは
(1)(高階)関数による情報の表現と,
(2)リダクションによる計算の実行
を主な基盤としていること.これは理論的には(1)(2)だけで全て
(チューリング等価な世界を)表現できるというところから出発して
いるが,実際の処理系ではそれ以外に不純なものも混じっている.
他のパラダイムで(1)(2)に相当することを表現できるが,それは
そのパラダイムが関数パラダイムを内包していることをいっている.
それをイイ悪いの議論に持っていく人もいるのが2chの面白いところ.
でもそれは技術的な議論にはならない.
関数型の面白いところは,(1)(2)だけで世界が表現できることを
示して,現在の計算機アーキテクチャ上でそれなりに効率的な実行
ができることを体現しているところにある.
0169165,168
NGNG他のパラダイムから隔てている特徴は,「基本的に上の(1)(2)だけで
世界を表現すること」では駄目か? 高階関数もリダクションも他の
パラダイムでなんとか表現できるが,それらだけを純粋に取り出した
のが関数型.(現実の処理系に副作用があるのは目をつぶる)
プログラミング言語研究の道具としてこれだけ関数型がメジャーなの
は,手続き型やそれをベースとしたOOなどのパラダイムが関数型を内
包しているから.つまり関数型が提供している計算モデルはそれだけ
普遍的だということができる.
0170デフォルトの名無しさん
NGNG内包とはいわんだろ。
0171デフォルトの名無しさん
NGNG>eval等のメタ機能で動的に関数を作れることと,計算モデルに最初
>からファーストクラスの関数が入ってることは区別してほしいな.
これを区別するのは賛成だが、どちらも高階関数であることには違わない。
もしCの言語仕様にevalがあるのなら「Cでは高階関数がかける」というだろう。
その機能が明白に意味付けできるかどうかは別の議論だ。
・数学的にきちんと意味を定義出来る高階関数が関数型の特徴だ
というのは納得するが。
0172デフォルトの名無しさん
NGNGタプリタなどを書かなくても)他のパラダイムでコーディングできる
ということをいったつもり.きちんと定義するのはちょっと難しい.
0173デフォルトの名無しさん
NGNG0174デフォルトの名無しさん
NGNGしかし、高階関数は関数型の中にあってこそ、
始めてその表現力の飛躍的増大を図ることができる。
つまり、imperativeとは異なり、
プログラムがコマンドの羅列ではなく関数の集合になっている
関数型であってこそ、
高階関数は表現力増大の為に生きてくると思うが。
従って、高階関数が関数型の特徴であると言う時、
それは「int型があるのはJavaの特徴か?」と言うのとは異質だろう。
0175デフォルトの名無しさん
NGNGまあそうなんだけど、int型だって
「int型は細かく型チェックするタイプの言語にあってこそ有効だ。VBみたいなバリアント型
がある言語ではその力を十分に生かしきれない。」
とも言えると思うぞ。
俺も高階関数は関数型の中心的な要素だと思う。でももうちょっと考えてみるとそれ
は高階関数と言う概念よりも他の概念のほうがしっくり来るような気がしたのでつい
反論したくなっただけだ。
0176デフォルトの名無しさん
NGNGスタートしたもんだと思ってたんだけど、それは違うの?
高階関数が関数型プログラミングで重要な概念だってことは認め
るけど(高階関数なしに関数型プログラミングするのは効率悪い
からな)、
1)高階関数をサポートしないが、代入を排除しているプログラミング
2)高階関数をサポートしているが、代入を排除しないプログラミング
を比較すると、1の方が関数型プログラミングになっている気
がするんだけど。
0177デフォルトの名無しさん
NGNG0178176
NGNGたとえばJavaあたりで代入を使わずにプログラミングしたら、
それは関数型プログラミングになってるって感触があるし、
Lisp系でグローバルオブジェクトをあちこちから操作しまく
ると高階関数を上手に使っていても関数型プログラミングに
なってない(バグがとりにくい)って思うから。
0179デフォルトの名無しさん
NGNG>>純粋なオブジェクト指向言語で対称的(訂正)だから。
>これは理由にならない。
>何度も言うが、言語の完成度なり純粋性は俺の話の反論にはならない。
反論ではありません。OOの議論になぜ欠かせないか答えただけです。
>またプロパティはここでは関係がない。
>と言うより、どう関わってくるのかが
>俺には今一つ分からんので説明してください
属性のアクセスを抽象化できる。
関数型とOOがある意味逆というのは
関数型はデータ抽象化しないってこと?
0180デフォルトの名無しさん
NGNG>関数型とOOがある意味逆というのは
>関数型はデータ抽象化しないってこと?
↑
前スレコピペ
>OO言語では、その機能を十全たるものにするためには
>しっかりしたクラス設計が欠かせないとされている。
>そして、その際には、属性と方法を適切に弁別する作業が欠かせない。
>つまり、「良い」OOからしてみると、
>属性と方法が渾然一体となってしまうような状態は好ましいとはいえない。
>一方で、関数型は、OO的に言うところの方法が
>同時に属性でもあり得ることを奨励し、
>そのことによってより抽象的なアルゴリズムを構築でき、
>表現力が高まるとしている。
>その意味においては、
>両者は理想とする方向が逆なのではないかと思った。
0181デフォルトの名無しさん
NGNG本当に?
まあ、不必要に属性を公開すべきでないってことなら賛成だけど。
メッセージパッシングとネームスペースを同じドット記法で
書くから混乱しているだけってことかも知れないけれど。
でも、値を利用する立場からすれば、それが式であることには
代わりはないんで、別にどうでも良い気がするんだけどな。
0183デフォルトの名無しさん
NGNG私は割りと好きな手法だ
というのは私はアセンブリ思考の高級言語プログラマーなので
人間側はプログラミング言語よりも仕様書メインで
プログラムは最終的にCPUからみて考えるので
当然goto文相当のものも多く使う、がある程度分離させている。
クラス化(OOP)なものも使うができるだけポインタ渡しの関数を使うようにしている。
その最大の理由は改良や互換性において相互依存度が大きくならないことと
プログラム内に不必要なインスタンスが多数出現するのがいやなため。
これの例で具体的にはOpenGL V.S. DirectXがあると思う
OpenGLはWin95時からずっと同じOpenGL32.dllであり関数型
おんなじかんすうだが実はデバドラのほうへの橋渡しなので
デバドラが新しい関数を提供してくれたら
従来のルーチンに上乗せする形でそれが使える。
一方のDirectXはOOPである。
OOPだから基本クラスを改良すると一から全部やり直し
それでも一応下位互換ルーチンを残しているからいいけれど
新しいインターフェースで作ったプログラムは選択の余地なく
新しいDirectXを入れていないパソコンでは初期化すらできない。
資源の再利用とかはあまり興味ないけれど、環境の変化に対してOOPは弱いのでは?
0185デフォルトの名無しさん
NGNG全然違う
逝け
0186デフォルトの名無しさん
NGNG関数型は名前の通り関数(写像)で記述(モデル化)するって事だな。
0187デフォルトの名無しさん
NGNG副作用のある不純関数型言語だと、高階関数(実装的にはclosure)
ってJavaのインスタンスとほとんど等価だよね(既出だが)。
で、属性の読み出しは引数のないメソッドとみなせるし、属性の
更新も1引数のメソッドと見なせる。
逆に、SmalltalkやJavaのインスタンスは高階関数のようにも使える。
高階関数とか属性はFPLとOOPLとを弁別するキーには全くならんと
思うが。
0188デフォルトの名無しさん
NGNGそんなこと言ったらCで関数ポインタを含む構造体のインスタンスは
javaのクラスインスタンスと等価とか言えるんじゃないの?
キリないよ。
結局字面の問題でしょ。
0189デフォルトの名無しさん
NGNGそれを言いだすと、
ほとんどの言語は関数型言語をエミュレートすることで
高階関数を扱える、とか言っちゃったりするわけで...
字面の問題とまでは言わないけど、
言語自体が「高階関数」という概念を提供しているかどうかは
大きな違いがあると思う。
0190デフォルトの名無しさん
NGNG0191デフォルトの名無しさん
NGNG>副作用のある不純関数型言語だと、高階関数(実装的にはclosure)
>ってJavaのインスタンスとほとんど等価だよね(既出だが)。
>で、属性の読み出しは引数のないメソッドとみなせるし、属性の
>更新も1引数のメソッドと見なせる。
>逆に、SmalltalkやJavaのインスタンスは高階関数のようにも使える。
>高階関数とか属性はFPLとOOPLとを弁別するキーには全くならんと
>思うが。
↑
>>174
>しかし、高階関数は関数型の中にあってこそ、
>始めてその表現力の飛躍的増大を図ることができる。
>つまり、imperativeとは異なり、
>プログラムがコマンドの羅列ではなく関数の集合になっている
>関数型であってこそ、
>高階関数は表現力増大の為に生きてくると思うが。
0192デフォルトの名無しさん
NGNG何故、高階関数(実装的にはclosure)なのか、教えて下さい。
0193デフォルトの名無しさん
NGNG0194実装から曲解
NGNGclosureが返るから、高階関数=closure と解釈した
のかな?
0195デフォルトの名無しさん
NGNGクロージャに関数スロットと属性スロットをカプセル化する。
それを見て、高階関数=クロージャと解釈したのかも知れないけど、
高階関数の典型的な使い方からは外れているよね。
0196179
NGNG>クラス設計をする際には、
>インターフェースと(属性とメソッドの)実装に分ける。
は正確ではないので
クラス設計をする際には、
インターフェースと実装に分ける。
に訂正します。
>>126
「属性とメソッドを弁別して抽象化する」というのに反論したんです。
この表現はクラス設計のとき属性とメソッドを区別して設計するみたいです。
これはC言語はグローバル変数とグローバル関数を区別して
設計すると言ってるみたいなものです。
こんな表現は奇妙です。
言ってることは分かったので主張そのもに反論はありません。
0197デフォルトの名無しさん
NGNG>「属性とメソッドを弁別して抽象化する」というのに反論したんです。
どこで言っていた?
ちゃんと摘示しろ。
それから、ObjectとClosureとについて
変な文を見つけたのでコピペする。
まあ、どうでもイイかもしれないが。
An object is a piece of data with procedures attached to it...
A closure is a procedure with a piece of data attached to it.
0198デフォルトの名無しさん
NGNGついでに"Lambda: the Ultimate Declarative"モナー
Actors ≡ Closures (mod Syntax)
という章に、ObjectとClosureがなぜ等価であるのかちゃんと書いてある。
0199デフォルトの名無しさん
NGNGOOPは「メッセージパッシング」のメタファで抽象データ型をサポートするけど、
FPはクロージャでそれを実現するし、本質的にそれらは等価だってことか。
[aReciver Message] = (aClosure Proc)
みたいな理解でいい?
0200124 128 179 196
NGNG関数型とOOが逆というのは高階関数とクラスは違うということらしい。
高階関数とクラスが違うというのは同意。
しっかりしたクラス設計とは
インターフェースと実装を適切に弁別することであって
属性とメソッドを弁別することではない。
>>197 >>180です。
0201デフォルトの名無しさん
NGNGOOPにおけるクラス設計も、より抽象的で本質的なクラスを、
より具象的なクラスから抽出してスーパークラスにまとめて
いく分析・設計プロセスがあるよね。デザインパターンにも
よく出てくる。具象的なクラスばかり作っていてもコードの
共有が進まないからだな。
関数型プログラミングも、共有コードを増やしたいと願って
いることには違いがないから、結局、より抽象的でより本質
的な関数を抽出しようとする。やっていることは同じじゃな
いかと思う。
# というより、デザインパターンの研究は、関数型プログラ
# ミングの研究成果からのフィードバックが大きいと思われ。
0202デフォルトの名無しさん
NGNG真面目な質問なんだが、
(本質的に)等価であるとは一体全体どのような意味だ?
そして、それは、
そのビヘイビアにおいて同形であるということと
どのように関わって来るんだ?
0203デフォルトの名無しさん
NGNG>デザインパターンの研究は、関数型プログラ
>ミングの研究成果からのフィードバックが大きいと思われ。
それはどうかな。
なんともいえないと思いますが。
0204デフォルトの名無しさん
NGNG>しっかりしたクラス設計とは
>インターフェースと実装を適切に弁別することであって
>属性とメソッドを弁別することではない。
しっかりしたクラス設計 = インターフェースと実装を適切に弁別すること。
≠ 属性とメソッドを弁別すること。
>>180
>しっかりしたクラス設計が欠かせないとされている。
>そして、その際には、属性と方法を適切に弁別する作業が欠かせない。
この文は、
しっかりしたクラス設計 = 属性と方法を適切に弁別すること
なのか?
それよりもさ、君>>200の場合、
属性と方法を区別するOOPLが欠陥があるといえるならば、
Class diagramでの属性とオペレーションの区別が
どのような意味を持つかについて答えてよ。
やはりシンタックスシュガー或は便宜的区別なのか?
今更だがsageる。
0205デフォルトの名無しさん
NGNG>OOPにおけるクラス設計も、より抽象的で本質的なクラスを、
>より具象的なクラスから抽出してスーパークラスにまとめて
>いく分析・設計プロセスがあるよね。デザインパターンにも
>よく出てくる。具象的なクラスばかり作っていてもコードの
>共有が進まないからだな。
>関数型プログラミングも、共有コードを増やしたいと願って
>いることには違いがないから、結局、より抽象的でより本質
>的な関数を抽出しようとする。やっていることは同じじゃな
>いかと思う。
質問です。
考えてみると、この発言の趣旨が分かりません。
結局何がいいたいんでしょう?
共有を進めるためのおよそ全てのより本質的な抽象化への努力は
皆お友達だと言いたいのでしょうか?
0206201
NGNGリストのような単純なデータ構造を基盤とする言語の場合はともかく。
強く型付けされた関数型言語の場合、
ある関数の適用範囲は厳密に、揺るぎなく、決定されている(シグニチャ
等を利用してポリモーフィズムを実現したとしても、適用範囲が静的に
決定できることには変わりがない)。
それは、OOPにおいて、クラスの中にメソッドがカプセル化されている
状態と本質的には同じことだと思う。
0207145
NGNG145 です。このスレの行き先が心配になってきたもので...
1. 「属性とメソッドの区別はシンタックスシュガー」というのは、
オブジェクト指向言語を「関数モデル」から見た場合の話です。(>>145,前レス109のFP)
2.オブジェクト指向言語を、DOA や OOA の観点から見る場合は、
・属性とメソッドの区別 (>>149)や、
・インターフェース(分析モデル) と 実装 を分ける事(>>128)は、
重要だと思います。
上記二つの解釈の違いは、議論のベースとなる「計算モデル」の違いです。
オブジェクト指向と、ラムダ計算のクロージャ(?) との類似性は、
比較的古い ('80s) 議論だと思いますが、何か新しい要素はあるのでしょうか?
私としては、「オブジェクト指向言語意味論を、関数モデルでいかに解釈するか?」
といったあたり (>>148-149 のCardelli) に関心を持っているのですが。
0208デフォルトの名無しさん
NGNG0209145
NGNG疑問点:オブジェクト指向言語意味論を、関数モデルで記述しようとする試みの
メリット/デメリットは何か?
0210デフォルトの名無しさん
NGNGここでの論点は、俺的には、
高階関数は関数型の特徴と言えるか? これは概ね話がついた。
属性と方法の区別のあるOOPLは不完全或は欠陥があるのか? 未決
もし不完全でないとするならば、
高階関数を特徴とする関数型は属性と方法を区別するOOPとは
理想とする方向性がある意味逆と言えるか? 未決
ObjectとClosureが等価であるとは一体どのような意味か?
それは、そのビヘイビアにおいて同形であるということとは
どのような関係にあるのか? 不明
こんな感じだろ。
その209の論点は、とりあえずのところは今のトピックではない。
論点自体は至ってまともだが。
0211デフォルトの名無しさん
NGNG0212200
NGNG>しっかりしたクラス設計 = インターフェースと実装を適切に弁別すること。
> ≠ 属性とメソッドを弁別すること。
わかりやすい!
>属性と方法を区別するOOPLが欠陥があるといえるならば、
>Class diagramでの属性とオペレーションの区別が
>どのような意味を持つかについて答えてよ。
>やはりシンタックスシュガー或は便宜的区別なのか?
>>149から
>オブジェクト指向分析(OOA)では、DOA由来のデータ抽出に加えて、
>メソッド抽出も重要なので、アドホックに operation が加わった、という気がする。
属性とメソッドを区別しない ≠ 属性とメソッドは同じ概念
属性とメソッドは異なる概念です。(念のため)
区別しないというのは同じように扱うという意味です。
>>210
>属性と方法の区別のあるOOPLは不完全或は欠陥があるのか?
この問題は 関数型オブジェクト指向言語 と 手続き型オブジェクト指向言語 を
比較する方がいいと思います。
関数型オブジェクト指向言語 は
メソッドを高階関数で定義できる点で、手続き型オブジェクト指向言語 と異なります。
また、メソッドを引数として渡すと高階関数が Closure になります。
その他の点はほぼ同じです。(CLOSの多重ディスパッチのような反論はやめてください)
議論の混乱は 関数型言語 と 手続き型オブジェクト指向言語 を
比較したことが原因です。
関数型とOOの比較は
関数型言語 と 関数型オブジェクト指向言語 を比較する方がいいと思います。
0213デフォルトの名無しさん
NGNGクロージャと高階関数がまざってないかい?
「メソッドを引数として渡すと高階関数がClosureになります。」
がなんだか意味不明。
「Closureを引数または返値とするメソッドは
高階関数の実装として扱うこともできる」
とは言えると思うが、どうよ?
0214デフォルトの名無しさん
NGNGオブジェクト指向言語の型システムを形式化することで
異なる静的型オブジェクト指向言語間でオブジェクトを共有する際の
型検査/型推論のための参照基準ができる。
例えば永続オブジェクトの動的型を表現する時などには
Cardelliの型システムが役立つと思われ。
0215デフォルトの名無しさん
NGNGActors ≡ Closures (mod syntax)
というのは、そのまま読むと、
ActorsとClosuresはSyntaxを法として合同であるということになる。
そして、そのような場合においては、知られているように、
ActorsとClosuresは「同値」関係にある。
つまり、Actors is equivalent to Closuresということになる。
これは残念だが、等価であるとはいわない。
等価であるというと意味が変わってしまう。
0216215
NGNG間違えた。
0217212
NGNG>>210
>属性と方法の区別のあるOOPLは不完全或は欠陥があるのか?
>もし不完全でないとするならば、
>高階関数を特徴とする関数型は属性と方法を区別するOOPとは
>理想とする方向性がある意味逆と言えるか?
この問題は 関数型オブジェクト指向 と 手続き型オブジェクト指向 を
比較する方がいいと思います。
関数型オブジェクト指向 は
メソッドを高階関数で定義できる点で、手続き型オブジェクト指向 と異なります。
また、高階関数の Closure を使える点でも異なります。
その他はほぼ同じです。
議論の混乱は 関数型 と 手続き型オブジェクト指向 を比較したことが原因です。
関数型とOOの比較は
関数型 と 関数型オブジェクト指向 を比較する方がいいと思います。
>>213
>「Closureを引数または返値とするメソッドは
>高階関数の実装として扱うこともできる」
>とは言えると思うが、どうよ?
いえない。
0218デフォルトの名無しさん
NGNG関数オブジェクト
クロージャ
高階関数
オブジェクト指向
関数型オブジェクト指向
関数型言語
オブジェクト指向言語
だれか説明して!
0219デフォルトの名無しさん
NGNG0220デフォルトの名無しさん
NGNG0221デフォルトの名無しさん
NGNG>メソッドを高階関数で定義
定義した時点でクロージャになると思うがどうよ?
0222デフォルトの名無しさん
NGNG関数に属性を持たせる概念がクロージャ。
関数(高階関数含む)自体も属性の1つ。
0223デフォルトの名無しさん
NGNG0224デフォルトの名無しさん
NGNG環境っつーのは、ものすご乱暴に言うと、関数が呼び出されようとしている
瞬間の引数や関数から参照される関数の外にある変数の一覧。
スナップショットみたいなもん。
っていうふうに、俺は理解してるんだが。
どーでしょか?>議論中の方
だから、インスタンスのように振舞うこともあるって感じですかね。
0225デフォルトの名無しさん
NGNGあっちこっちもって歩けるようにしたもの。
高階関数は、関数オブジェクトを引数にとる関数。
あ、関数オブジェクトを返すのもそーですっけ?
0226デフォルトの名無しさん
NGNG関数型言語とevalはまったく関係ないよ。
(C言語でeval実装〜とか言っていた人がいるので念のため。)
'eval'つーのはLISPで動的にリスト(データ)を評価する手段ってだけ。
不要なevalはなるべく使わないで書くのが良いスタイル。
Schemeの規格でも最近までevalは含まれなかったし。
0227デフォルトの名無しさん
NGNG0228デフォルトの名無しさん
NGNGを読んだが、関数言語と妙にシンクロする。
第3章「もの」と「働き」より
「…群論が現れるまで数学者の考える対象は数か図形に限ら
れていた。…
現代の数学でとくにいちじるしい対立をなしているのは
「もの」の概念と「働き」の概念である。もちろん、一つの
文章はすでに「何かのものが何かの働きをする」という形を
とっているのと同じく、数学のなかにもこの二つが対立して
いることは当然であろう。ガロアの輝かしい功績は、この
「働き」をきわめて明瞭な姿で数学のなかに持ちこみ…」
オブジェクトとか高階関数の話と似てるような気しない?
0229デフォルトの名無しさん
NGNG0230デフォルトの名無しさん
NGNG0231デフォルトの名無しさん
NGNG数学的記述を目指して開発されたのが
関数型であることを考えるならば、
それはごく当然だろう。
指摘するまでもないことのように思うが。
0232デフォルトの名無しさん
NGNGカリー化された関数('a -> 'b -> 'c)なんかも高階関数と呼ばれるよね。
>>217
ハア?じゃあ、メソッドは関数の実装といえると思うが、どうよ?
0233231
NGNG計算機科学は「いかにして」の概念を精密に扱う枠組を
提供しようとするものだとされており、
それに対して、数学は「なんである」の概念を
精密に扱う枠組を提供するものとされている。
というか、SICPにはそうある。
しかし、群論などでわかることは、
その「いかにして」を扱うことが
現代数学の主要な特徴になっているということだ。
その意味である種の重なりのようなものを見るのは
いたって自然なことなのかもしれない。
0234デフォルトの名無しさん
NGNGActors ≡ Closures (mod syntax)
Guy Steeleが著者の一人にもなっているHackers' Dictionaryの
moduloの項目を見ろ。(今ならJargon Fileとしてwebで読める。)
Lisp Hacker用語ではmoduloはexceptと読むのだ。
つまり、上は、
「Actorsは(見かけの違いを除けば)Closureとおんなじ」
という意味なのだよ。
0235デフォルトの名無しさん
NGNGおれの感覚おかしい?
0236デフォルトの名無しさん
NGNG板違いだけど、群論入門の良書って何。教えて。
HaskellのMonadなんかも半群うんぬんの話がでてきた。
群論って少しは知ってた方がよさそう。
0237仕様書無しさん
NGNG『数学小事典』 ブルーバックス P.148より
【群】
一般に、集合Gにおいて、Gの任意の元a,bに対し、
Gのある元a・bが対応して、次の1〜3の公理をみたすときに、
集合Gは群と呼ばれる。
公理1 (結合法則)
Gの任意の三つの元a,b,cに対して
([a]・[b])・[c] = [a]・([b]・[c])
が成り立つ。
公理2 (単位元の存在)
Gの任意の元aに対して
[e]・[a] = [a] = [a]・[e]
となるようなGの元eが存在する。
公理3 (逆元の存在)
Gの任意の元aに対して
[a]^{-1}・[a] = [e] = [a]・[a]^{-1}
となるGの元a^{-1}が存在する。
誰か簡単な説明と表記の間違い指摘を頼む(w
0238三歳児
NGNG1*a = a = a*1
(1/x)*x = 1 = x*(1/x)
(a+b)+c = a+(b+c)
0+a = a = a+0
(-x)+x = 0 = x+(-x)
0239デフォルトの名無しさん
NGNGそうなのか、なんか笑っちゃうね。
最初からそんな風に書かなければいいと思うが、
その定義はあとづけだな。要するに。
それを天才というべきなのかは議論の余地があるな。
個人的には、"isomorphic in their behavior"に
説得的なものを感じていただけに、少し残念だ。
0240デフォルトの名無しさん
NGNGまあ、群論というか、代数学は基本的には、
計算機に大きく関係する方だと思うよ。
数を扱っているからね。
0242デフォルトの名無しさん
NGNGなんか果てしない泥沼にはまりそうで怖くなるね。
短い人生をああいうものに賭けるのは漢だ!w
0243デフォルトの名無しさん
NGNG俺にはActors≡Closures(mod Syntax)が
言葉遊びには見えないんだがな。
ActorsとClosuresは、Syntax、
つまり、言葉なり記号なりの配置の仕方
と言う観点からみると、同様の役割・機能・振る舞いのようなものを
持っていると、そういうことを言いたいのではないかと思った。
それを別の言い方で言うと、振る舞いにおいて同形であると、
そういうことなのではないだろうか。
そう考えた方が整合的だと思うが。
それをJargon等を読むような連中には同形の意味がわからんので、
modはexceptなんだといっているのではないだろうか。
言葉遊びと言うにはいささかお粗末だしな。
まあ、俺がいったようなこともある意味言葉遊びだが、
それでもそちらの方が整合的だ。
0244デフォルトの名無しさん
NGNGどう公理系を構築すれば大体の場合において支障をきたさずに済むか、だからね。
どんな論もある前提において成り立つにすぎない。
ユークリッド幾何学しか知らない中学生がヒルベルト空間をどう思うか。
0245デフォルトの名無しさん
NGNG0246217
NGNG手続き型OOのClosureを引数または返値とするメソッドは
高階関数とは少し違うような気がします。
正確に知ってる人がいたら教えてください。
>>232
>ハア?じゃあ、メソッドは関数の実装といえると思うが、どうよ?
メソッドの定義は関数の実装といえるという意味なら同意。
0247デフォルトの名無しさん
NGNG>高階関数とは少し違うような気がします。
そうだね。
戻値として返される関数は、そのメソッドが所持してる変数などを
「知っている」場合があるし。
関数の振る舞いはメソッドの中身と密接に関わっている。
0248デフォルトの名無しさん
NGNGとりあえず、「群(グループ)」についてそれでは意味がわからんので、
計算機科学的に引き直して言っておくと、
なんかしらのassociation(メソッド、関数、演算等)が定義されている
メンバ(属性、変数、数値、文字等々)の集まりだ。
それで、そのassociationがその規則を満たすというものだ。
あくまでも計算機科学的引きなおしだから、
参考程度にとどめて置くように。
0249248
NGNGその結合は、勿論メンバの中に含まれている。
つまり、結合もメンバだ。
0250デフォルトの名無しさん
NGNG428には「結合」という単語は使われていないようだけど、
「その結合」って何のこと?
0251デフォルトの名無しさん
NGNGん?
associationだけど、なんか変か?
まあ、というか、ある種の働きと言うか
関係と言うかそういうもんなんだが。
>誤解のないように言っておくが、
>その結合は、勿論メンバの中に含まれている。
>つまり、結合もメンバだ。
なんか意味不明な表現になってしまっていて
申し訳ないが、
結合(働き、関係)もメンバ(要素、元)になり得ると言うことだ。
どうでもいいかもしれんが、
一応これから出かけるんで、
質問などにはしばらくは答えられない。
0252デフォルトの名無しさん
NGNGもう結合は終わりましたか?
0253デフォルトの名無しさん
NGNGJargon Fileを読んで面白く感じないなら
LispもSchemeも面白いと思わないだろうな...
それはどうでも良いが、Steeleの文章はこの手の言葉遊びばっかりだよ。
RMSらとともにLisp hackerdomの中心にいた人だしね。
moduloをexecpt (for)と読むのが後付けなわけがない。
Imperative論文はjargon-1より後だもの。
自分の勝手な解釈を後付けで補強しようとしてないか?
0254デフォルトの名無しさん
NGNGオマエモナー
0255GLS
NGNGmoduloは「except for」と読みますが何か?
0256デフォルトの名無しさん
NGNGちょっと聞きたいんだが、
もしexceptならば、
その除外されるSyntaxとは何だ?
また、≡とはJargon的にはどのような意味だ?
0257デフォルトの名無しさん
NGNGというか、moduloがexcept forだなんて、
言葉遊びでもなんでもないぞ。
どうしてこれが言葉遊びになるのか…
ただの間違いだ。それも初歩的な。
それを「言葉遊びだ」なんて言われて、
「はいそうですか」とか真に受けるなんて、
お前は「馬鹿」ではないのか?
しっかし、どうしてもそんな数学的に
粗雑な話をするとは思えないな。
お前はそれで幸せなのかもしれんが。
それは具体的にJargon Fileのどこに書いてあるんだ?
本当に「その部分」の作成に関わったのか?
0258デフォルトの名無しさん
NGNG俺はimperativeは読んでないが…
>それは具体的にJargon Fileのどこに書いてあるんだ?
http://www.tuxedo.org/~esr/jargon/html/entry/modulo.html
ミラーも山のようにあるからすぐ見つかるはずだが。
別に粗雑とは思えん。(なんか意地になってる?)
>本当に「その部分」の作成に関わったのか?
http://www.tuxedo.org/~esr/jargon/html/Revision-History.html
を見るとほとんどの版の出版に関与してるね。俺もSteele-1983版は読んだ。
その項目を最初に書いたかどうかはしらんが関わったのは確かだろう。
■ このスレッドは過去ログ倉庫に格納されています