トップページ⇒tech
1001コメント349KB

関数型言語Part3

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
前スレ

関数型言語Part2
http://pc3.2ch.net/test/read.cgi/tech/1007387924/
0153デフォルトの名無しさんNGNG
>>152
一行に要約して下さい。
0154デフォルトの名無しさんNGNG
>>149
Lispでは関数が擬似ファーストクラスだということなんだが。
ファーストクラスが関係ないとなると、
関数型言語の輪郭は益々ぼやける。
0155デフォルトの名無しさんNGNG
関係ないってことはない。
必要条件だけど充分条件じゃないってこと。
0156デフォルトの名無しさんNGNG
>>155
関数がファーストクラスでないと関数型言語とはいえないということになりますか?
0157デフォルトの名無しさんNGNG
「関数プログラミング」バード&ワドラー著 武市正人 訳 近代科学社
引用開始
関数プログラミングとはプログラミングを数学的な活動として
とらえる考え方であり、本書ではそれを特定のプログラミング言語
にはよらず数学の表記法を用いて紹介する。
引用終わり
0158デフォルトの名無しさんNGNG
>>157
関数型言語の定義はどうなってますか?
0159デフォルトの名無しさんNGNG
>>157
上記の本では特に定義されていません。
Miranda、MLなどが関数型言語と考えられているようです。
bit 1999 3月号 で武市先生による関数プログラミングの解説が
あります。私見ですが、数学的活動ととらえる関数プログラミングを
支援する機能をもつものが関数型言語ではないでしょうか。
0160デフォルトの名無しさんNGNG
"式"を記述した関数を組み合わせて"計算"を行うのが関数型プログラミングであり、
それを支援するのが関数型言語だと認識してる。
命令型言語でも注意すれば関数型っぽいことできるけど、Rubyを関数型言語とは言わないしね。

あなたが関数型言語だと思うものが関数型言語です。
ただし他人の同意を得られるとは限りません。
0161デフォルトの名無しさんNGNG
関数型言語のメリットって何?
0162デフォルトの名無しさんNGNG
>>161
何だと思う?
0163デフォルトの名無しさんNGNG
数学での式って何か考えてみたけど、要は等式に代表される関係式でしょう。
だからむしろPROLOGみたいな宣言型とかOPALのような代数型の方が数学っぽい。
0164デフォルトの名無しさんNGNG
で?
0165デフォルトの名無しさんNGNG
163 みたいなのしかいないのか?
0166デフォルトの名無しさんNGNG
言語ごとの機能によるけど
引数と返り値に関係づけをつくることができて
それが数学ぽかったり、見たまんまだとよりいい。

で、入出力にはそんな関係づけはないと。
0167デフォルトの名無しさんNGNG
>>164-165 このスレ、こういうやつがたびたび湧いてくるけど
なんなんだ?おれの予想はRuby厨、Java厨、boost厨のどれかだと
読んでるけどあたりですか?
0168デフォルトの名無しさんNGNG
数学っぽさが関数型言語の指標かどうかは分からない。
計算の単位が全て関数であることが重要なんであって、
数学らしさとは必ずしも一致してないような。
0169デフォルトの名無しさんNGNG
プログラムのソースコードをそのまま明細書にはっつけて
アルゴリズムの申請がみとめられるような言語、はまだですか?
0170デフォルトの名無しさんNGNG
余代数的な対象も代数的に書かなければならないところが気持ち悪い。
0171デフォルトの名無しさんNGNG
【何処も】情報科学総合スッドレ【板違い】
http://science.2ch.net/test/read.cgi/rikei/1046173479/
0172デフォルトの名無しさんNGNG
結局、誰も関数型言語の定義を知らないと。

へ
0173デフォルトの名無しさんNGNG
>>172
ホントに知りたいならcomp.lang.functionalでも見てた方がよいかと
0174デフォルトの名無しさんNGNG
要するにデータも命令も関数になってるのが関数型言語じゃないの?
ラムダ計算とかさあ
0175デフォルトの名無しさんNGNG
ソフトウェア考現学 萩谷昌己 著 CQ出版
p152より引用
引用開始
関数的プログラミング(というプログラミング.スタイル)を
具現化したプログラミング言語を、関数型言語という。
引用終わり

0176デフォルトの名無しさんNGNG
プログラミング言語 武市正人 著 岩波講座 ソフトウェア科学
p8より引用
引用開始
プログラムによる計算過程は、通常の計算機のハードウェアの仕組みと
独立して考えることもできる。関数型言語(functional language)、
あるいは作用型言語(applicative language)とよばれるものは、
数学における関数(function)の適用(application)によって
アルゴリズムを表現しようとするものである。
引用終わり
0177デフォルトの名無しさんNGNG
なんせ、関数型言語は使いこなすだけでそうとう高度な
スキルを要するし、それにかかるお金も大きいほうなのだから。
0178デフォルトの名無しさんNGNG
>>177
「使いこなす」というのがどの程度なのかわからないけれども。
プログラミングを楽しむ程度なら高校数学の知識と推論能力
があれば十分だと思うよ。
0179デフォルトの名無しさんNGNG
関数型言語って、教育用言語として定着しつつあるよね
0180デフォルトの名無しさんNGNG
やっぱJavaとかBasicじゃないの?
教育用といえば
0181デフォルトの名無しさんNGNG
>>180
現実はそうかもね。高校はBasicかぁ。
Schemeの方が絶対に良いと思う。
0182デフォルトの名無しさんNGNG
でも学校出た後のことを考えるとjavaの方が就職率高いと思う。
教育のためなのか?就職のためなのか?
ということなんでしょうね。
0183デフォルトの名無しさんNGNG
http://www.shiro.dreamhost.com/scheme/trans/icad-j.html
を見て思ったのですが「Lispのユニークさ」の2番、3番、5番、6番
の条件が満たされていれば、関数型言語?
0184179NGNG
>>180-182
>>179 関数型言語って、教育用言語として定着しつつあるよね
大学の情報系限定のお話だけど。
0185デフォルトの名無しさんNGNG
http://www.shiro.dreamhost.com/scheme/trans/icad-j.html
Lispのユニークさ

1, 条件式。
2. 関数型。
 Lispでは関数は整数や文字列と同じようなデータ型のひとつだ。
 リテラル表記を持ち、変数に代入できて、引数として渡せる、というようなことだ。
3. 再帰。
4. 動的型付け。
 Lispでは全ての変数は実質的にポインタだ。変数ではなく値の方に型が付いており、
 代入や束縛は実質的にポインタのコピーで行われ、ポインタが指されるものには作用しない。
5. ガベージコレクション。
6. 式でプログラムが構成されること。
 Lispプログラムは式の木であり、それぞれの式が値を返す。
 これはFortranとそれを引き継ぐ多くの言語とは対照的だ。それらの言語は式と文を区別している。
7. シンボル型。
 シンボルは実質的にはハッシュテーブルに格納された文字列へのポインタである。
 これによって、文字をひとつひとつ比較しないでもポインタの比較だけで済む。
8.シンボルと定数の木によってコードを表現すること。
9. 言語の全てが常に在ること。
 読み込み時、コンパイル時、実行時が明確に分離したステップになっていない。
 読み込み時にコンパイルしてコードを走らせることもできるし、
 コンパイル時にコードを読んだり走らせたりすることもできるし、
 実行時にコードを読んだりコンパイルしたりすることができる。
0186デフォルトの名無しさんNGNG
漏れ的には、>>151 に載ってる特徴が、関数型言語を良く表していると思った。

http://www-6.ibm.com/jp/developerworks/linux/010615/j_l-prog.html
個人的には、大まかに言って、関数プログラミングとは、
以下の特性のうちの少なくともいくつかを備えたものであると考えています。
関数言語と呼ばれる言語は、以下のことを行いやすくし、 その他のことを困難または不可能にします。

1. 関数が最初のクラス (オブジェクト) である。
 つまり、「データ」について行えることはすべて、
 関数自体についても (関数を別の関数に渡すなどの方法で) 行うことができます。
2. 主要な制御構造として再帰が使用される。
 言語によっては、それ以外の「ループ」構成は存在しないことがあります。
3. リスト処理に主眼が置かれている (たとえば、Lisp という名前にもこれが表れています)。
 多くの場合、ループに代えて、リストがサブリストの再帰とともに使用されます。
4. 「純粋な」関数言語は副次作用を避ける。
 これにより、最初にある値を変数に割り当て、
 次に同じ変数に別の値を割り当ててプログラム状態を追跡するという、
 命令型言語に付き物と思われるパターンが除外されます。
5. FPはステートメント の使用を思いとどまらせるか、あるいは完全に拒絶し、
 代わりに式 (つまり、関数に引数を加えたもの) の評価を行います。
 純粋な場合、1つのプログラムは1つの式 (およびそれをサポートする定義) になります。
6. FPは、どのように 計算するのかということよりも、 何を 計算するのかということを気にします。
7. 多くのFPは「高階」関数 (つまり、関数を操作する関数を、操作する関数) を利用します。
0187デフォルトの名無しさんNGNG
>>186
関数プログラミングのプログラマーからも、一貫性のある意見を得ることは困難です。
群盲象をなでる、という言葉がぴったりです。

…というあたりも、>>145の状況をよく表している様な.....
0188デフォルトの名無しさんNGNG
結局、関数型というのはパラダイム(考え方、捉え方)ということか。

そのうち誰かがC言語でも関数型プログラミングは出来る。
とか言ってくれないかな?オブジェクト指向の時のように・・・・
0189デフォルトの名無しさんNGNG
C=プロレス=最強
0190 NGNG
>>188
ぐぐれ!
http://www.google.co.jp/search?q=functional-c+programming-language
0191デフォルトの名無しさんNGNG
>>188
Schemeをやって、Cに戻ったら以前よりうまくプログラムを書ける
ようになったって話もあるようだよ。
0192デフォルトの名無しさんNGNG
>>188
できるよ。
効率性も含めて犠牲になる部分が多いが。
0193デフォルトの名無しさんNGNG
で、関数型言語って何ですか?
0194デフォルトの名無しさんNGNG
>>193
君と僕にはそれはCだったということさ
0195デフォルトの名無しさんNGNG
要するに、関数型言語って覚える必要の無い単語なのですか?
0196デフォルトの名無しさんNGNG
>>195 知ってても得になるとは限らないが、知らないのは論外、てな知識と思われ
0197デフォルトの名無しさんNGNG
必要って、何の必要性だよ
事業目的に使えるかどうかならば、F#でも勉強しとけ
0198デフォルトの名無しさんNGNG
嬰ファがどうかしましたか?
0199名無しさん@EmacsNGNG
つべこべ言わずにLispやっとけ。
おまいらに関数型言語は無用だ。
0200デフォルトの名無しさんNGNG
関数型言語は無用
関数型言語は無用
関数型言語は無用
関数型言語は無用
0201デフォルトの名無しさんNGNG
嵐は無用。
0202デフォルトの名無しさんNGNG
川端康成の作品を読んだことがなくとも、日常の読み書きには困らないだろうと思う。
でも、日本語が読めるなら一度は読んでおいて損はないだろう。表現が豊かになる。
関数型言語も。いろいろとチャレンジしてみるのは良いことだと思うよ。
0203デフォルトの名無しさんNGNG
Cの変わりになり得る関数型言語ってあるの?
当然インラインアセンブラとかもOKで。C++っていうのは
なしね。
0204デフォルトの名無しさんNGNG
インラインアセンブラだとちょっと違うか。
関数型言語なりのそれに代わりうるものがあれば
なにもいらないんだけど<インラインアセンブラ。
0205デフォルトの名無しさんNGNG
>>203 観点が違うと思われ。もし無理にでもってんなら、caml の カテゴリカル・アブストラクト・マシーンとか
0206デフォルトの名無しさんNGNG
>>205
前にちらっとみただけなんだけど、あるWebサイトに
MLでOSとそれに最適化されたツール群を作るって言う
研究が乗ってた。どうも見た感じだとコンパイラの
製作(そのために言語の拡張をしてたのかどうかは分からない)
で撃沈してた模様。UNIX/Cに変わりうるようなパラダイムが
関数型言語の方面から出てくるのかなあなんて思ったりも
してたけど、実際は難しいみたいね。
0207デフォルトの名無しさんNGNG
>>203
分かってにゃい証拠ハッケツ
0208デフォルトの名無しさんNGNG
>>203
20年前にタイム・スリップして、TI Schemeマシンとか、Lispマシンを買ってきて貰いたまえ
0209デフォルトの名無しさんNGNG
>>206
BSD UNIXって、Lisp研究用のブートローダだったと暴言する人も居たとか居ないとか・・・
0210デフォルトの名無しさんNGNG
>>205
categorical abstract machineですか。
なにやらえらい難しそうですねえ。
いつも思うんだけど、citeseerなんかを眺めていると、
実装レベルとは関係無しに理論的にはどんどん進んで
いるんだなあと実感します。頭のいい人は凄いね、ホント。

>>207
分かってたらこんなアホなこときかないって

>>208
Lispマシンというのは実はUNIXよりもあまりにも技術的に進んで
いたがために、廃れてしまったのですかねえ。よく知らないですが。
まあUNIXならどんなヘタレでも使えるからね。こういうのも悪くないね。
0211デフォルトの名無しさんNGNG
>>209
WindowsやOSXにしても、OSの枠組みとしては
UIの話を抜けば、4.2BSDからは何も進歩してないように見えるね。
そもそも進歩する素地があったとしても金にならなそう。。。

食えない分野の代名詞として理論物理というのがよく言われるけど
もしかして計算機科学の人もそうなんでしょうか?理論に裏打ちされた
技術って誰も興味なさそうですよね。。。
0212デフォルトの名無しさんNGNG
>>210
>まあUNIXならどんなヘタレでも使えるからね。
Java と Lisp みたいなもんかも?
0213デフォルトの名無しさんNGNG
>>211
でもないよ.最近,形式的表明をなんとかして
ソフトウェア工学に応用しようと頑張ってる.

ミサイルの制御系とか,バグの無いコードのために
従来は無茶苦茶な工数を掛けていたのを,形式的
表明の助けを借りて軽減しよう,という感じらしい.

OSX は漏れ,知らんけど,Windows は COM とか
でかい進歩と思うが?

>>210
廃れた理由は,汎用ワークステーションの性能向上が
激しくて,ハードウェアで実現するよりソフトでやった
ほうが断然イイじゃん,ってことになっちまったから.

でも聞くところによると,NTTのアレとかは結構高性能だった
とかいうことだけどどうなんだろ.

絶対的に間違ったアプローチだったということはない,
というのは AS/400 が証明してる(と漏れは思う)

タグ付きアーキテクチャの真似とかをソフトでやるには
限界あるもんね.

>>209
BSD のカーネルイメージのファイル名が vmunix なのは
VM が実装されたためで,なんで実装したかっていうと,
メモリ空間食いまくりの Lisp を動かすためだった,とか
いう伝説があったりとかね.
0214hosyuNGNG
http://www.cafeshops.com/cp/store.aspx?s=lambda
0215デフォルトの名無しさんNGNG
なんかの宗教みたいだな
0216デフォルトの名無しさんNGNG
λ教?
・・・って昔どこかで聞いたような・・・。
ぐぐったら見つかったのはコレ↓だった。
ttp://www.namazu.org/~satoru/programming/sicp.html
0217デフォルトの名無しさんNGNG
>>214
もはやラムダは円マークだろ
0218デフォルトの名無しさんNGNG
ヌ
0219デフォルトの名無しさんNGNG
ttp://www.kurims.kyoto-u.ac.jp/~cs/lambda.html
↑総本山はココの山中にある,λ文字山算法寺と簡約神宮で,
修行を終えると単位互換制度により
ttp://burks.brighton.ac.uk/burks/foldoc/3/64.htm
↑λ算術騎士団と共通の徽章を貰うことになっている.

狂信的 Lisper は,構文解析はカッコで括れば全て
済むと考えており,BNF を毛嫌いしているため,
↓の最後のパラグラフにある
ttp://www.huis.hiroshima-u.ac.jp/jargon/LexiconEntries/BNF.html
black-on-green BNF buttons とλ騎士団の徽章が近くに
存在する状態は危険である.
0220デフォルトの名無しさんNGNG
宗教法人作ろうぜ!
0221デフォルトの名無しさんNGNG
ジェダイ騎士団みたいな奴か?
0222デフォルトの名無しさんNGNG
0223デフォルトの名無しさんNGNG
>>214
λティディ・ベアはSUNのティディ・ベアと互換性があるのか?
λTシャツを着ると、アポー信者や2ちゃねらーと、勘違いされるのではないか?

よく検討してから、購入させて頂きます。
0224デフォルトの名無しさんNGNG
特攻野郎λチーム
・
・
・
MITで鳴らした俺達特攻部隊は………ダメだ思いつかないや.
0225デフォルトの名無しさんNGNG
comp.lang.functionalのウォッチスレはここですか?
0226デフォルトの名無しさんNGNG
どこにそんな話題が?
0227デフォルトの名無しさんNGNG
hosy
0228C magaNGNG
unlambda
0229デフォルトの名無しさんNGNG
Part2スレの141に
>俺は、数式処理系(Macsyma〜Mathematica) と 命題処理系(ML?)に
>類似性を感じて、興味を持っていたので、乱入大歓迎。

という意見があったけど、実際の所どうよ?
雰囲気は確かに似ている様な気がせんでもないが
0230デフォルトの名無しさんNGNG
C MagazineのC言語の連載にCは関数型言語であると書いてたんですけど
ほんとですか?ならボクにもやれそう....
0231デフォルトの名無しさんNGNG
>>229
どうよ、と言われてもなー。
どっちも派生元である原始言語はLISPなんだよね。
類似性ってのはそういう事かと。
0232デフォルトの名無しさんNGNG
>>230
違うってばよ。
Cマガの記事はたまに素人が書いてるので鵜呑みにできない。
「関数型言語*風*にも書ける」と書いてあるなら、あながち
間違いとは言えないけど、正解では絶対にない。
点数付けるなら、100点満点中25点ぐらい。

これはね、
「Cでもオブジェクト指向(風に書くことが)できる」
と言ってるのと同じ。

C言語と、関数型言語として洗練された構文と意味論を持つ
専用言語では、記述の幅からして比較にならない。
0233デフォルトの名無しさんNGNG
MLの説明だけど、関数型言語の取っ掛かりとして参考になるんでは。
SML(Standerd) 演習
http://a414s1.it.nanzan-u.ac.jp/smlbook/smlwww/
初級ML講座
http://nt-p.net/adx/e/ml/mlkouza.html

C言語の時と同じ使い方をしようとしても、有り難味が判らないんじゃないかな。
論理学とか数学の知識は多少でもあった方がいい。
0234アシュル ◆adhRKFl5jU NGNG
コンパイラの最適化に関してはまだまだgccに勝てる処理系はないみたいですが、
関数型言語の共通コンパイラバックエンドを作ろうというプロジェクトなどが
計画されたことなどあるんでしょうか?聞いたことないですが。
0235デフォルトの名無しさんNGNG
gccは中間コードにlispを採用しています。
lispだと最適化がやりやすいため。
0236アシュル ◆adhRKFl5jU NGNG
LISPはS式を使っているが、S式はLISPとは限らないべ
0237デフォルトの名無しさんNGNG
> コンパイラの最適化に関してはまだまだgccに勝てる処理系はないみたいですが、
....
0238名無しさん@EmacsNGNG
>>237
ACL以外で、まともな最適化まで考えられてる
処理系とかあるの?
0239デフォルトの名無しさんNGNG
lispはdynamic typing・・・
0240デフォルトの名無しさんNGNG
>>229
MLって元は定理証明システム用言語だった訳だけど、
数式処理も一種の定理証明システムなのではないか…
ちうあたりで、同じ様な処理が求められているという意味かも?

>>231
MLと断ってあるし、原始言語(LISP)はあまり関係ないと思う
0241デフォルトの名無しさんNGNG
>>234
>関数型言語の共通コンパイラバックエンドを作ろうというプロジェクトなどが
>計画されたことなどあるんでしょうか?聞いたことないですが。

これなんてどうなんでしょう?
http://cs1.cs.nyu.edu/leunga/www/MLRISC/Doc/html/
0242デフォルトの名無しさんNGNG
>241
なにこれ?
0243デフォルトの名無しさんNGNG
GCC では ML や Haskell を扱ってくれないから、自分たちで作っちゃおう
ってゆー噺だと思われ
0244デフォルトの名無しさんNGNG
そういや、HaskellコンパイラのGHCは中に丸々GCC抱え込んでたけど、
あれは、GCCの公式配布パッケージの中に取り込んでもらえないのかな?
0245デフォルトの名無しさんNGNG
>>244
若干意味不明
0246デフォルトの名無しさんNGNG
gccに含まれるのかどうかというのは何がポイントと
なるんでしょうか?バックエンドとしてgccを使うのは
なにもHaskell4.0Xだけではなかったように覚えてますが。
0247デフォルトの名無しさんNGNG
s/Haskell4.0X/ghc-4.0X/
0248デフォルトの名無しさんNGNG
O'Caml 入れた。感動した。ところでこれって読みはオキャムルで良いの?
0249デフォルトの名無しさんNGNG
ラクダの絵が描いてあるから「お、キャメル」でわ
0250デフォルトの名無しさんNGNG
漏れは、オッカムとかけてるのかと思ったが、違うか。
0251名無しさん@EmacsNGNG
>>250
漏れもそうだと思ってたけど、
例の剃刀との関連が今一というか。
0252デフォルトの名無しさんNGNG
>>248-251
スレ違いと思うのは漏れだけ?

関数型プログラミング言語ML
1:デフォルトの名無しさん :02/01/31 11:43
  関数型言語ML(SML/Caml/Ocamlなど)についてのスレッドです。
             ̄ ̄ ̄ ̄ ̄
http://pc2.2ch.net/test/read.cgi/tech/1012445015/
■ このスレッドは過去ログ倉庫に格納されています