トップページ⇒tech
986コメント341KB

関数型言語Part2

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
前スレ
http://pc.2ch.net/test/read.cgi/tech/987954395/
0357 NGNG
OHaskell?
Haskellの何処をいじったら、オブジェクト指向になるんだろう?
いまいち想像出来ないな。
0358デフォルトの名無しさんNGNG
>>356
>結局その用法が広まることはなかったようだね

なかった?
もう2002年になろうという現在においてさえも
絶版ではなく売れているらしいがな。

というかな、この本は、「数学への招待」として書かれた本なんだよ。
厳密に何かを語ると言うよりも、
多くの人に平易に数学の概念を教えようとしている本だと思うがね。
お前はどうやら遠山が数学教育に力を入れていたことは知らないようだな。

>今現在の数学体系の集合論的定義からすると
>何かが「特別」な概念であるとか「厳しい」条件である
>ということ自体古臭い言い回しになってしまってる感が
>(私には)ある。

こういう下らんことを言うな。
それも出版年は1952だ。時代を考えろ、ボケ。
0359デフォルトの名無しさんNGNG
というか
「カントールの集合論が破壊しつくした廃墟の上に、「結合」
という一つの新しい相互関係を打ち立てるのが新しい代数学
である。」 「無限と連続」遠山啓著 より

昭和20年代の本だけど、数学の入門書でこれよりおもしろい
のないね。
 
0360デフォルトの名無しさんNGNG
>>358
>>結局その用法が広まることはなかったようだね
>
>なかった?
>もう2002年になろうという現在においてさえも
>絶版ではなく売れているらしいがな。
実際に使われていないな

>それも出版年は1952だ。時代を考えろ、ボケ。
?
0361デフォルトの名無しさんNGNG
>>360
>>それも出版年は1952だ。時代を考えろ、ボケ。
>?
?


君は結構もぐりだね。
その「無限と連続」を知らないなんて。
0362デフォルトの名無しさんNGNG
アフォが1匹おるよ。アフォが。
0363デフォルトの名無しさんNGNG
>君は結構もぐりだね。
>その「無限と連続」を知らないなんて。
?
0364デフォルトの名無しさんNGNG
>>363
>>君は結構もぐりだね。
>>その「無限と連続」を知らないなんて。
>?
?

じゃあ、知ってたし読んだ事もあるってこと?
?だけじゃ駄目だと思うよ。
どのような点がどういう風に分からないのかを明らかにしないと。
それができなければ来ない方がいいと思うよ。
もう恒等関係の話も止めるべきだと思うし。
0365デフォルトの名無しさんNGNG
>>364
この話にどう関係があるんだ?
0366デフォルトの名無しさんNGNG
>>353
例えばCLOSでそうじゃないOOをどうしろと言うのかね。
メンバ変数が状態以外の何を保持すると言うのかね。
へたくそとか言う問題じゃなかろ。
「状態」の塊だからこそGUIの構築がOOでやりやすいわけだし。
「状態」の塊でないコードへのポインタを切にキボンヌ。
0367デフォルトの名無しさんNGNG
>>355
2は同意ですね。なにもHaskell使わんでもとおもいますけど。
1は不同意。GUIとかいいだしたらどうにもならないけど、
そうでないなら別に問題無いとおもいます。
しばらく前に、10個ぐらい関数があって、それの合成の順序を総当たりして(nPn個)
それに無限数列食わせてドウコウってことをやる必要があったんですが、
Haskellだとすぐでした。CやFORTRANでやれと言われたら泣きます。
ま、私にとっては無いと困る「実用的」プログラムだったわけです。
なんかGUIがいるなら別の言語でそれだけすりゃいいんですし。
たしかにMLやHaskellでオフィススイート書けとかいわれたら首吊りたいかも。
0368デフォルトの名無しさんNGNG
>>366
Smalltalkのクラスのソースでも読んでみろ。
0369デフォルトの名無しさんNGNG
なんか話が関数型の話に回帰して来ていい感じ。
恒等関係ねぇ。任意の同値関係が成り立つ関係でいいんだよね。
ああ、ばかばかしい。=を一般の同値関係に使わないってのはデマだよね。
誤解が生じなければ混用していいし、されてるんだけどね。
なんか元の話の流れから馬鹿みたいにずれててウザイ。
ただのアナロジーを遊び心で記号使って表現しただけでこんなになるとはね。
Actorsとclosureの実質的な内容に話を戻すか350からのネタを引っ張るかに
しようという方向で逝きましょう。
0370デフォルトの名無しさんNGNG
>>368
それは何か違う気が。いや、366への答えにはなってるけど。
Smalltalkのクラスはそれ自体オブジェクトだからなぁ。
ここで366が問題にしてるのはクラスとオブジェクトを峻別するタイプの
OOPLのことなんだろうな。そういう言語で実行時に作られるオブジェクトが状態の塊なのは
事実でしょ。
まあ、だとするとCLOSは例としては間違いなんだけどさ。
0371デフォルトの名無しさんNGNG
>>366
>「状態」の塊だからこそGUIの構築がOOでやりやすいわけだし。
GUIが状態の塊だってだけだろ、でOOはそれ「も」扱いやすい。
まぁ、「メンバ変数」とかのたまってるってことは、C++とかJavaくらいしか頭に無いんだろう。
いや、もしかしたら>>366が言っているのは、逐次実行型のマシンが、そもそも状態の塊だというのかもしれん。
それなら理解はできる。
SmalltalkはOOとしては、すでに1世代以上前ってきがするから、最近のOOの代表にはならないかもしれないが、
インスタンス変数にcontents以外を持たないクラスってのは、結構多かった気がする。
それでも、たとえば、Collectionクラスが#(1 2 3 4 5)っていうのを持っていて、それが「状態」だというなら、
オブジェクトすなはち状態、という意見として聞いておいてもいいがろう。
納得はしないけど。
0372371NGNG
>>370
OOの「使いドコロ」としてGUIが挙げられる事が多いけど、それがそもそもOOの誤解への第1歩って思う。
0373デフォルトの名無しさんNGNG
内部状態のないオブジェクトなんか役に立つのか?
0374371NGNG
>>373
内部状態のあるオブジェクトの例をなにかあげて欲しい。
0375デフォルトの名無しさんNGNG
関数型からOOに話がずれてるな。350のねたに話を戻そうYO
0376371NGNG
あ、まさか「内部状態のあるオブジェクトなんかあるのか?」っていう意味じゃない。
内部状態のあるオブジェクトがOOであるがゆえに内部状態を持たなくちゃ行けない、
しかし、関数型言語で同じ事をしようとした場合、内部状態を取り去ることが出来るっていう
例があるなら、知りたい。
0377デフォルトの名無しさんNGNG
>>374
ほとんど全てのオブジェクト。
最も簡単なのは1ビットのメモリ。
カウンタなんかよく例に使う。
0378デフォルトの名無しさんNGNG
>>377
ほうほう、じゃぁ、カウンタを例にとって、関数型言語では、どーするの?
0379デフォルトの名無しさんNGNG
>>376
あるわけがない。
0380デフォルトの名無しさんNGNG
>>378
カウンタに相当するものは(副作用のない)関数型にはない。
同じ機能を全く違う方法で実現するだけ。
0381デフォルトの名無しさんNGNG
>>365
つまり、数学知ってそうなのに
恒等関係という言葉を知らない人がいて、
ただそれはその本見れば載っているわけで、
更にいうと、その本は結構有名な本なわけで、
だからもぐりなのかなと。
ただそれだけのことなんだけど。
恒等関係の意味が判らんって言ってた人がいたような気がしたんで。

この発言はそのまま通りすぎてください。
0382デフォルトの名無しさんNGNG
>>378
こういう質問が出るってことはおまえさん関数型使わない方?
いや、OOは構わんが関数型も宜しくね。
GUIじゃないOOといえば、培風館のLispの本に例があったなぁ。
0383371NGNG
つまりだ、OOが状態の塊なんじゃなくて、状態の塊のようなGUIみたいなサービスを提供するのに
比較的向いているってことだろ。
(副作用の無い)関数型言語はそれには向いていない。
だから、OOが向いている分野のために、関数型言語にOOを取りいれてみる実験は、アリだとおもうが。
どーだろう? >>350の答えになってるだろうか?
0384デフォルトの名無しさんNGNG
>>381
恒等関係という言葉は多くの本に載っていないから
一般的な言葉ではないだろう。遠山啓の創作か?
どうでもいいが。

>任意の同値関係が成り立つ関係
この定義は分かりやすくていいね。
0385382NGNG
>>371=383
うまくまとまった感じかな?
でも関数型言語の利点は副作用が無いことだけじゃなくて、
数学的な感覚をそのまま持ち込めるところなんじゃないのかともおもったり。
367なんかはそういう意味での関数型の恩恵をもろに受けたってことだろうか。
とするとだ、関数型言語にOOを採り入れると言うよりOOを関数型でやってみる
実験って事だな。だとすれば面白いかも知れないな。副作用を許すと言う妥協をしなければだが。
0386371=378NGNG
>>382
関数型言語は、実際に仕事で使う場面はあんまりないです。
ただ、その前段階の調査とか、検算とか、そういうときにたまにつかいます。
0387デフォルトの名無しさんNGNG
微妙にネタ切れか?
むぅ。関数型は学生とか言語理論とかやってると絶対使うよな。
仕事(アプリケーションソフトのプログラマ?)とかでは確かに使いがたいんだろう。
新人教育するのにコストかかりすぎるだろうし。Schemeは構文覚えんのは簡単だけど使いこなすのは
とても難しいよな。Haskellなんか覚えんのも使うのも難しいし。大体、入出力があんな
有り様じゃ確かに普通は使いたくなかろう。そこに萌えるのが学生たるゆえ。
Haskellがメジャーに成る日を夢見て今日もλ式。
0388デフォルトの名無しさんNGNG
>Haskellがメジャーに成る日を夢見て今日もλ式。

なんかカワイくてウケたのでage
0389デフォルトの名無しさんNGNG
関数型言語で直接プログラミングする機会がどれだけあるかは疑問でも、
JavaやRubyなんかで関数型プログラミングを併用するのはデバッグ効率
が向上するのでステキだよ。

# 無用な代入を避けたり、メソッドオブジェクトを引数に渡したりね。
0390デフォルトの名無しさんNGNG
まあ、関数プログラミング、というかプログラミング言語理論に関して
一通り勉強した人間なら、
≡とでたら、同値、
isomorphismと出たら、同型、
とまずは訳してみるよな。
いきなり「同じ」とは訳さないよな。
まあ、全部読めば要するに同じってことかと
思えてくるのかもしれないけど。
0391デフォルトの名無しさんNGNG
つーかレコード型のポインタ渡しが理解できない人が余りに多かったから
発生したんじゃないのか?OO

逆にOOでオブジェクトを構築しておいてそのポインタを渡してやる関数ってのは
関数志向でもありOO志向でもあると思うのだが

出来上がったプログラムの動きを考える場合ooだとプログラム自体の複製が
複数できるので非効率という気がする。
仮想関数関係も関数自体のポインタで切り替えたりできるわけだから
結局は個人の好みとせいのうじゃないの?

oo否定派だけど低レベルとのクッションとして4世代くらいの継承までは
まぁ許容かなってかんがえている。
もっともそうでないとCOMとかも使えないし
0392デフォルトの名無しさんNGNG
>つーかレコード型のポインタ渡しが理解できない人が余りに多かったから
>発生したんじゃないのか?OO
こういうのって、どの人のOOの捉え方を反映してて、おもしろいよね。
0393デフォルトの名無しさんNGNG
>OO志向
オブジェクト指向志向?
0394392NGNG
どの人→その人
0395デフォルトの名無しさんNGNG
>>384
そう言うことじゃなくて、
やっぱりどの分野にも良書といわれるものがあって、
それを読んでいないで何かをいうのはどうかなって。
つまり、良書とされているものを読まずに
一般的でないとかいうことで知らないことが免責されるかのようなことは、
どうかなと思ったんですよ。
だからもぐりって言ってみたんです。
0396デフォルトの名無しさんNGNG
>>395
そうは言えある本を必ず学び準拠するべき「良書」と
決めてしまうのは単なる権威主義とでもいうべきものであって、
過去の業績を踏襲しつつも常に反省を忘れないことが重要な
学問にあってそれは望ましいことではない。
それぞれ多種多様な方法で学んだ者々がそろって
時には相対する立場にたって議論をすることが学問の進展や、
個人の理解の促進に貢献すると思われる。ある一つの本を読んでおらず、
そしてそれ故その本における定義や方法を知らないという理由で
議論を拒み非難の対象とするのはいかにも「幼稚」であり、また
「非学術的」な行いではないだろうか。これが個人に対してでなく
派閥間で生じれば互いに意思疎通のない「宗教」とでもいうものにでも
発展しよう。第一そのような事を行えば、どちらが「優れて」いるかなど
永遠に知りえない。常に相手の考えを理性的に判断する態度が
学問には必要だろう。

また、常に進展してゆく学問においてその書物の蓄積は膨大になる。
幸いなことに科学的学問はその結論に一定の収束を見せ、
誰が語ったかは問題にならない。その結果、過去の良書のエッセンスを
取り入れつつ更に改良をほどこし時には新しい結果を盛り込んだ
書物が次々と出版されている。よって過去に良書であった本に
大きく捕われる事はあるまい。ユークリッドの原論は今でも良書と
呼ばれはするがその業績は多くの本に取り入れられており、
我々が顧みることはあまりない。時代の変遷、多種多様な環境の中様々な
方法で勉強するものがおろう。己のたどった過程を相手も
たどるとは限るまい。そのような人々を「もぐり」と言ってしまうのは
いかにも度量が小さいといえよう。また相手もそう思っているやも知れぬ。
0397デフォルトの名無しさんNGNG
2001年糞スレプログラミング言語部門にノミネートされました。
0398デフォルトの名無しさんNGNG
>>391
>逆にOOでオブジェクトを構築しておいてそのポインタを渡してやる関数ってのは
>関数志向でもありOO志向でもあると思うのだが

値同値と参照同値の問題はどうなるの?
参照透過性を失ってしまえばもはや関数型とは呼べないような・・・・
「-3」を表現するのに整数クラスのインスタンス「-3」を一意に作って
それへのポインタを使うだけにすると言うなら参照同値=値同値と言うことになるのかな?

関数言語処理系の作成者とかなら必要なんだろうけど、普通のプログラミング
の時にそんな事はしてられないんじゃ? というか、Cで関数指向するくらいならさっさとMLなり
Haskellなりを使うほうがストレスに成らないような。
0399仕様書無しさんNGNG
遠山先生もいいけど、N.Bourbakiでそ
0400デフォルトの名無しさんNGNG
>>377
immutableなオブジェクトを作ったり使ったりしたことない人?
0401デフォルトの名無しさんNGNG
>399
激しく同意。ブルバキだよな、やっぱり。
あ、でも基礎論の当たりちょこっとうさん臭かったりするんだよな。
正則性公理のあたりとか。
つうか、最近の学生は遠山先生の本なんかよんでないだろ。
0402デフォルトの名無しさんNGNG
>つうか、最近の学生は遠山先生の本なんかよんでないだろ。
ブルバキはもっとだろ。
0403デフォルトの名無しさんNGNG
ブルバキの本を最近の学生が読むなんて一言も書いてないけど(爆
いや、良書なのになぁ。
でも、ずっと上のほうにあるような言われ方する程遠山センセの本が読まれているわけもなく。
0404デフォルトの名無しさんNGNG
>>396
つか、そんな大仰な話をしているのではなくて、
なんというか、恒等関係なんて言葉はないというようなことを
言っている人がいたので、
そのことでなんと言うかあげつらっている人がいたようにも見えたので、
ただまあそう言ってみたんだけど。
例えば、関数型言語では、武市さんの本なんかは、
必読とまでは言わないような気もするけど、
やっぱ一通り読んでおかないと議論に参加するのはどうかなとも思うし。
まあそんなようなことを言いたいんだけど。
0405デフォルトの名無しさんNGNG
もうこの話題止めて398からの話題をひっぱりましょうね。
得るものが少なすぎます。
0406デフォルトの名無しさんNGNG
議論の相手を選ぶ基準は色々あるだろうが
本を読んだかどうかで決めるなら、スレタイトルは
「武市ってどうよ?」とかにするべきだな。
0407391NGNG
OO=クラス型≠非関数型 って認識じゃないのか?

折がいいたいのは
クラス型=クラス変数文メンバー関数の本体をメモリに展開する
関数型=作成済み関数のポインタのみを扱う
というのがコンパイラ自体の違いだから使いどころとしてクラス型を使っても
全体的に関数型にできるということ。
あとローテクでいうならば関数型とOOの違いは関数に対してBレジスタなりが
スタックフレームになっているかなっていないかということなんじゃないの?

あとOOじゃないと保持状態が作れないというけれど
レコード型変数で保持してポインタ渡しにするならば
関数自体はコンパイル時に直接生成されるけれど変数は動的に作れるから
プログラムはOOではないけれど機能的には同じで多分実行時メモリは小さい。

これは少なくとも>>376への答えにはなると思う。
例えば>>378はカウンタを例に出しているが

カウンタ値は変数なりファイルなり、あるいは名称や最終更新時間をもったレコードだとして
それがデータベースやファイル、変数やリストになっているとすれば
関数型で先頭アドレスと処理内容を渡してやれば作業はできるし
コードも複雑化しない
OOの場合は実装コードもクラスに記述するか継承するので
パラメータ無しのメンバー関数が作られるが実質的にはスタックフレームが暗黙的に形成されていて

Windowsの場合コントロールごとのステータスと挙動をOOで記述するとわかりやすい気がするが
レコード型の記述と関数型のほうが効率は良い。
実際OOでもソースの中低レベルはそうなっているはず(Ex.DirectXのEnum関係とか)

ということでどう?
0408407NGNG
>>398 特定の学会に属していなければ関係ないんじゃないの?---参照透過性
できるのとやらないのは違うと思う。
別にレコード参照型で新しいレコードを生成するならば
学者さんいわくところの”関数型”になると思う。
ポインタは保存場所なんだから
プログラマーが節約のために同じところにするかどうかというだけの話

とりあえず折がいっているのはOOに対する関数型
どうしてもProcedure型の関数がいやだというなせば
関数の返り値が新しいレコードのインデックスかポインタになれば
へっぽこがくしゃさんでも気が済むでしょう。
ようは元を残してコピーを作るか、上書きするかってことだと思うよ。−−参照透過性

極端をいうならばアキュームレータの中身はかわるよね。
AccA+AccBをコンピューターでやる場合
結果はAccAに入る
この大原則がある上で参照透過性うんぬんというのは単なる無知とはいえないか?

言語というからには”翻訳”や”変換”があるわけで
卓上でぐだぐだいって単位が取れたり本をだせたとしても
翻訳結果や変換結果を無視してたら意味がない
0409デフォルトの名無しさんNGNG
>>406
なんていうか、そういうことを言いたいんじゃないんだよね。
恒等関係を知らないなら知らないと言えばいい訳で、
そんな言葉はないとかいうのはおかしいなって思っただけなんだけど。
知ったかぶりはよくないんじゃないかって思うんだよね。
その知らないことについて議論に参加するのも何だか滑稽だし。
0410デフォルトの名無しさんNGNG
>>408
>極端をいうならばアキュームレータの中身はかわるよね。
>AccA+AccBをコンピューターでやる場合
>結果はAccAに入る
>この大原則がある上で参照透過性うんぬんというのは単なる無知とはいえないか?

>言語というからには”翻訳”や”変換”があるわけで
>卓上でぐだぐだいって単位が取れたり本をだせたとしても
>翻訳結果や変換結果を無視してたら意味がない

それは、ひとつの見識として納得のいくものですけど。
でも、高級言語の価値は低水準の実装を隠すところにありますよね?
関数型言語の良さっていうのは、手続き型高級言語がなんだかんだ言っ
てアセンブラにおける常套句を言語構造に翻案したに過ぎないところ
とは別次元のものだと思うんですよね。
手続き型高級言語がメモリやI/Oのアクセスと制御構造によって成り
立っているのに対して、関数型言語は意味を定義する。その違いは
syntax sugarではないと思うんだけどね。
0411デフォルトの名無しさんNGNG
>>407
「OOじゃないと保持状態が作れないというけれど」
え、誰が言ったの、そんな事。 (驚愕
0412デフォルトの名無しさんNGNG
>>408
参照の透明性は
「変数の上書きをしない」ってことよりも、
「同一表現式は同一の値を表す」ことのほうが本質だと思うが。
つまり、同じ変数は常に同じ値を表すだけでなく、
同じ関数に同じ引数を与えてやると、同じ返り値が返ってくるってことが大事。
0413デフォルトの名無しさんNGNG
>>409
ある用語が正しいか或いは正しい用法かどうかなど
個々の信念の問題であって知識の問題ではあるまい。
もちろん正しい用法においてその言葉は「ある」のであって
そうでなければ「ない」言葉を使っていることになる。
流行語などに対して文句を付けるのをたまに聞くだろう?
「ない」という主張が「おかしい」などということは全くない。
そしてこれは概念を理解しているかどうか、すなわちその事を
知っているかどうかとはまた別問題だ。その点で
「知ったかぶり」という言葉で表される事態では全くない。

この「恒等関係」にしてもその内容からすれば「汎同値関係」とでも
名づけたほうがよっぽどましだろう(と私は思う)。あなたは
そのような言葉は「ない」と主張するかも知れないが。

専門用語でこの様なことはよく起こる。それは研究者同士の
交流が希薄だったり或いは稀に対立したりするからだ。
その場合相手の用法を全く知らないことが多い。
それは「知らないならば議論に参加する資格がない」などと
済まされる問題ではなく、一々確認を必要とする。
最終的な用語についても歩み寄りがない場合もある。
2chでの様に喧嘩腰の人はまずいないが。
0414デフォルトの名無しさんNGNG
>>413
409が問題にしているのは用語の正誤じゃないでしょ。
はっきりいって、「そのような用語はない」はすごく強い言明だよ。
よっぽど確信がないかぎり、使うべきものじゃないと思うが。

まあ、2chみたいな場で
「これを読んでない奴は議論に参加するな」ってのも
ちょっと乱暴だと思うけど。
0415376>>391NGNG
答えになってなさそうです。
そもそもCPUに近いところでの動作の話になると、たいていの言語は、
コンパイル後のコードやVMの動作の話になって、その言語の持つ特徴
が、どっかいっちゃうから。

>あとOOじゃないと保持状態が作れないというけれど
おれは>>376ではそんなこと書いてない。
OOであるがゆえに状態を持っている→関数型で書きなおすと状態がなくなってすっきり
っていう例があるのか?って書いたんだ。>>411には通じてるね。
だから答えにはなってないんだよ。

俺があと言いたい事は>>410が書いてるのとだいたい一緒。
0416415NGNG
376>>407=>>408 (あとで自分で見る時用))
0417デフォルトの名無しさんNGNG
>>414
>「そのような用語はない」
これは用例がないことを意味するのではなく
それを誤りであるとする言明。用例があるのは
用例に対する応答である以上当然ある。この発言が
発言者の言語に関する正誤感覚に基づいているのは
言うまでもない。この点においてもちろん「すごく強い言明」で
あり、強い信念を感じとれる。この時どの程度多数の支持が
あるかは(発言者に影響しはするが)、特に妥当性に関しての信念ならば
多くの発言者は別問題と考えるだろう。
0418デフォルトの名無しさんNGNG
>>414
んー、議論に参加するなって言うか、
知ったかで参加するなって言うことなんだけど。
知らないということを前提にして
聞く意味も込めて参加するということならば
2chを問わずかまわないと思ってるけど。
0419デフォルトの名無しさんNGNG
どれが知ったかなのかをどいつが決めるんだ?
>>418か?おまえは神か?
0420 NGNG
知ったかの本人が気を付ければいい。
0421デフォルトの名無しさんNGNG
「無知の知」を他人に要求するとはすごいね。
0422 NGNG
別にすごくもないと思うが。
ある程度は誰でもやってる。
0423デフォルトの名無しさんNGNG
あーあ、こうやって粘着君がいるとせっかくのスレが台無しだよな。
わかった、わかった、知ったかは良くないよ。それは事実だよ。
あなたの主張は認めるよ。
だから関数型言語の理解・研究・発展に貢献する発言をしてください。
あるいは関数型言語のここがダメとかさ。
0424デフォルトの名無しさんNGNG
>>423
君もね
0425デフォルトの名無しさんNGNG
>>419
言うことが大げさ
0426ageNGNG
http://www.dream-fact.com/lovers/
http://anny.kir.jp/bbs-a/imgboard.cgi
モロダシ画像、チャイルドポルノ、バンバンアップ!!
おめ@丸見え!!
他では有料のアノ画像常時アップ!!
0427デフォルトの名無しさんNGNG
前にもどこかで書いたんだけど、関数型言語を使っているときはUnitTestとか
要らない印象があるのね。手続き型言語だと、UnitTestを使って定義域での動
作と定義域外での動作をきちんと検証しないと気が済まない(テスト中毒って
奴ですか)。だけど、Schemeとか使っているときは、テストとプログラミング
が一体化しているというか、わざわざテスト用のコードを書いたりしないな。
まだ経験が浅いからかしら。それとも関数型言語だからかしら。
0428デフォルトの名無しさんNGNG
>427
テストが問題になるような規模のコードを書かない/書けないから
0429デフォルトの名無しさんNGNG
>UnitTestを使って定義域での動作と定義域外での動作をきちんと検証しないと気が済まない(テスト中毒って奴ですか)。
きちんと検証するのが、ごくごくあたりまえです。
むしろ、きちんと検証しないとあとがたいへん。
でもしない人も結構多くて、そういうやつがプロジェクトの足を引っ張るんだよなぁ…
0430デフォルトの名無しさんNGNG
武市先生の訳は巧いと思ふ今日この頃。
0431デフォルトの名無しさんNGNG
って武市正人(翻訳)「関数プログラミング」ですか?

本屋で見比べて、萩谷昌巳 著「関数プログラミング」
買っちゃいました!
0432デフォルトの名無しさんNGNG
どの言語が一番おすすめ?
0433デフォルトの名無しさんNGNG
Prolog
0434デフォルトの名無しさんNGNG
>>428
>テストが問題になるような規模
ってどれぐらい?
0435デフォルトの名無しさんNGNG
>>432-433 ってなんだー!Prologは一階述語論理に基づく論理型言語。
     宣言的プログラミングが良く似合う。

     ところでどっかに書いてあったProlog++, Mercury てナニ?
0436デフォルトの名無しさんNGNG
>>435
Prolog スレにでてたね。

Mercury は
http://www.cs.mu.oz.au/research/mercury/
> Mercury is a new logic/functional programming language
ということで (FAQ for comp.lang.functional にも載ってるし)
このスレ向きですかね。
0437デフォルトの名無しさんNGNG
http://pc.2ch.net/test/read.cgi/tech/1008220265/n170-171
俺も訊きたい。
0438デフォルトの名無しさんNGNG
>>434
>>テストが問題になるような規模
>ってどれぐらい?
関数言語厨房が書ける最大の行数+1
0439デフォルトの名無しさんNGNG
>>438
おいおい、一行か?
0440デフォルトの名無しさんNGNG
禿しく一行!
0441デフォルトの名無しさんNGNG
>>427

Hoare Logic とか Curry-Howard isomorphism のあたりかな?
プログラム検証を支援する仕組みとして、
・型システムの導入とか、
・事前条件/事後条件の記述(Eiffel)とか、
・形式的仕様記述言語による仕様記述とか、
いろいろありますよね。

関数型言語だと、どうして「検証するまでもなく」って感じるのかな?
副作用が少なくて、見通しがよいからかな?
0442デフォルトの名無しさんNGNG
>>435-437 ぁ誤爆してる...

高階関数 と 高階論理 の (類似性) を
誰か教えて頂けないでしょうか?

あとついでに、本スレの流れでいうと、
リフレクション(特にjava.lang.reflect) と 高階関数 って、
何か関係あるんでしょうか、教えて下さい.
0443デフォルトの名無しさんNGNG
>>442
>高階関数 と 高階論理 の (類似性) を誰か教えて頂けないでしょうか?
はぁ?ちゃんとわかるように質問しろよ。

>リフレクション(特にjava.lang.reflect) と 高階関数 って、
関係無い。
0444442NGNG
>>443 話をスムーズに進めるために、後者の件から片付けておきます。

>>442
>2.リフレクション(特にjava.lang.reflect) と 高階関数 って、
> 何か関係あるんでしょうか、教えて下さい.


Javaで高階関数を作れないか、という話題がありました。この話題を考えるに、
Javaでは、メソッドの引数や戻り値に、メソッドを指定する事ができないので、
  (1)Javaのリフレクション機能(java.lang.reflect.*)を使って、Methodクラスを返すとか、
  (2)事前に定義済みの内部クラス・インスタンスを返すとか、
  (3)動的にクラスを生成する拡張機能(jakarta.apache.org/bcel や Java上の言語処理系)を使う、
といった答えしか思いつきませんでした.


ラムダ計算やコンビネータ論理が、プログラムの形式的モデルとして有効であるならば、
高階関数ってのは、オブジェクト指向言語実装系において、どのような意味を持つのでしょうか、
あるいは、オブジェクト指向言語を、ラムダ計算やコンビネータ論理でモデル化するのは
適切なのでしょうか?


かなりいい加減に、

  実は「リフレクション」あたりに対応させる事ができるのではないだろーか、

と思いつき、先の質問2. をカキコいたしました。
0445デフォルトの名無しさんNGNG
http://www.research.avayalabs.com/user/wadler/pizza/Docs/Tutorial/week3/week3.html#firstclass

pizzaでfirst-class functionsだべさ
参考にするべさ

これはinner classとしてJavaにあるということになっとるべさ
0446444NGNG
>>445 お、これまたずいぶん関数言語っぽいJavaの拡張ですね。>>piza
#  (Generic Java や、JCP14: Adding Generic Types to the Java の祖先ですか.)

結局、この問題は、
「Javaでは first-class functionsの代わりに inner classが実装されているから、
 それを使えば高階関数を作れる」
という回答でよろしいでしょうか?

#  オブジェクト指向の形式モデルなんて言い出したのヴァカみたい>>俺
0447プロジェクト・リーダーNGNG
プロジェクト・リーダーの役割とは何か?
お教え下さい。
0448デフォルトの名無しさんNGNG
>>447 すいません、また誤爆しちまったよ.
0449デフォルトの名無しさんNGNG
また、ってあーた、前科あり?
0450デフォルトの名無しさんNGNG
>>442
>高階関数 と 高階論理 の (類似性) を

高階論理では述語だけでなく、述語に関する述語や、さらにその上の述語...
などが記述できます。さて、集合A上の述語PというのはPの特性関数
X_P:A->boolと同一視できるので、A上の述語の述語が書けるというのは
(A->bool)->boolという高階関数が書けると言いかえられます。

というように結びつけられると思われ。
0451デフォルトの名無しさん NGNG
プログラムの検証理論に関して何かよいお手本はないでしょうか?
0452デフォルトの名無しさんNGNG
プログラム検証ツールは前スレにも出ていたPVS
http://pvs.csl.sri.com/
の他にどのようなものがあるのでしょうか?
ちなみにPVSはマスターするのに最低6ヵ月必要らしいの
ですが、他のものもやはりそれぐらいかかるものですか?
0453デフォルトの名無しさんNGNG
こっちにも貼っておかなければ…

"Why Functional Programming Matters"の日本語訳
http://www.sampou.org/haskell/article/whyfp.html
0454デフォルトの名無しさんNGNG
>>452
検証とは違うけどCafeOBJも面白いよ。
0455 NGNG
>>453
それなかなかいいね。
0456デフォルトの名無しさんNGNG
lispコミュニティにも当てはまるかも…
http://www.towelrecords.com/varitext/001.html
■ このスレッドは過去ログ倉庫に格納されています