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

関数型言語Part2

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさんNGNG
前スレ
http://pc.2ch.net/test/read.cgi/tech/987954395/
0809デフォルトの名無しさんNGNG
>>803
条件分岐がパイプラインを詰まらせるって、
関数型言語を実行しても分岐だらけに変わりないだろ。
その関数型言語のソースコードレベルに「if」があまり直接出ないだけで、
機械語レベルでは条件分岐だらけだと思うが。
0810807NGNG
>>808
 >>803は、
 「関数型言語だと静的解析が容易だから、
  投機的実行を含む、CPUパイプラインのスケジューリングが容易、
  だから今時のCPUは関数型言語に向いている(コンパイラーを作成しやすい)」
 ってなニュアンスかな。
 で、詳細に検討しようとすると、例えば >>809 みたいな疑問/反論が出る、と。

>>806
 面白そうな話題ですね。Embedded UML & OCL でしょうか?
0811デフォルトの名無しさんNGNG
条件分岐はパイプラインを詰まらせるのではなくて壊すが正解
パイプラインが詰まる原因はスケジューリングが難しいケースに起こるが正解
だと思う
803 の言いたいことは参照透明が維持されていれば、
その先のことを考えなくても済むので、スケジューリングをするときの障害が少ないと言う事では?
0812デフォルトの名無しさんNGNG
>条件分岐がパイプラインを詰まらせるって、
>条件分岐はパイプラインを詰まらせるのではなくて壊すが正解
ちなみに分岐は条件分岐ではなく、無条件分岐のことをいっていました。
確かに、説明不的確ではあります。
さらに、パイプラインが詰まることと分岐とは別問題です(まったくという訳ではないのですが・・・)。
あと説明中の OOPL が良くないですね、別に OOPL に限った事ではなく
「手続き型」と「関数型」の違い・・・ひょっとしたら「手続き型」と「それ以外」
かもしれませんが・・・

シンプルに説明しますと、

スケジューリングするとは、式の評価順序を入れ替える

というです。

手続き型では、例えばメソッドはプログラムの「評価されるにしかるべき行にあること」が重要な訳です。
ここで「評価順序を入れ替」に対して「評価されるにしかるべき行にある」はお互いに相反する事です。
関数型では、評価結果が次の評価に必要になる前ならばどこにあっても良いのです。
だから、制限付きながらも「評価順序を入れ替」を許容するわけです。
「評価順序を入れ替」が可能なら、スケジューリングも可能ということになります。
「手続き型」では入れ替えしても問題ないものを無理矢理探し出す作業が出てくるわけですが、そんなものはそれほど巧くいくわけもないのは道理たと感じています。

>その関数型言語のソースコードレベルに「if」があまり直接出ないだけで、
>機械語レベルでは条件分岐だらけだと思うが。
これは実装次第です、コンパイラ屋の気合次第です。(^^;
ちなみに僕は条件選択よりも、高階関数が嫌いです。
高階関数にも良い方法があるらしいのですが、まだ調べていません。
0813デフォルトの名無しさんNGNG
それは関数型言語が
並行処理に適合しているということにも繋がりますかね?
0814デフォルトの名無しさんNGNG
ベータ簡約だっけ?
0815葵NGNG
この問題を教えて下さい
3×3行列Aに対し
1,Aを読み込みAの行列式を出力
2,Bを読み込みA×Bを出力
3,|A|≠0の時のA^-1を出力
0816デフォルトの名無しさんNGNG
>>815
ふぅ。宿題は自分でやれ。
0817デフォルトの名無しさんNGNG
みんな! tail recursionとtail-call optimizationを混同しちゃ駄目だ!!
tail recursionはtail-call optimizationの特殊な場合にすぎなくて、
(相互再帰は駄目だけど単独再帰なら)JVMでもgotoで簡単に実装できるし、
stack inspectionの問題もないはずだ!!!

亀レス&もし既出だったらスマソ
0818デフォルトの名無しさんNGNG
素朴な疑問で恐縮なんだが、
VMで実装することになんか意味あんの?
だいいち使うのか?
あんまりすごさを感じないんだよね。
0819デフォルトの名無しさんNGNG
インタプリタ型言語に多少メリットがあるんじゃないかな?
多様な言語->共通言語->機械語の形態で
各種コンパイラ言語 -> C -> 機械語
によって各種機種依存から逃れるという目的の流れが
JAVAその他インタプリタ言語 -> JAVAVM -> 機械語(なんかちょっとずれている気もする)
に変わった方がインタプリタには都合が良いということでは?
よく言われるマシンアーキテクチャの共通化とかいう旗印はCに出来なかった以上JAVAVMにも不可能と見た。
考え方は時代の違いくらいだしね・・・
0820デフォルトの名無しさんNGNG
個人的には、あの重さにいまいちなじめない。
インタプリタ:遅いけど手軽
コンパイラ:コンパイル作業あるけど、速い
って言う発想になじんじゃってるから、
コンパイル作業あるし、速さもたいしたことない
っていうのには抵抗感あるよ
0821デフォルトの名無しさんNGNG
>>812
パターンマッチなんてifだらけだよ.
0822デフォルトの名無しさんNGNG
インタプリタ: 遅いが簡単
コンパイラ: 速いが面倒
なんとかならないの?

そんなあなたに partial evaluation (w
0823デフォルトの名無しさんNGNG
>>821
そういうレスはなんか意味があるのか?
0824デフォルトの名無しさんNGNG
dat落ち防止age
0825デフォルトの名無しさんNGNG
SML/NJなら(対話的環境という意味で)インタプリタで、かつ
実行する瞬間にコンパイルもしてくれるが、どうよ?
0826デフォルトの名無しさんNGNG
それはVMの話とは関係にゃーでよ
0827デフォルトの名無しさんNGNG
何とはなしにageてみる
0828デフォルトの名無しさんNGNG
.
0829デフォルトの名無しさんNGNG
>>176
初学者です。
「代入をしない」で初期設定ファイルから初期設定ができるん
ですか?
Schemeでは下の様にすると代入してます。さらにdataを
変数に代入しないとプログラミングなんてできないと思うの
ですが。
(define data (call-with-input-file "./data.db" read))
0830デフォルトの名無しさんNGNG
>>829
はあ、普通に束縛するだけで破壊代入する必要はないと思うけど…
何となく「代入しない」を勘違いしてるように見えます。
まずは関数型言語の入門書でも読んでみたらどうでしょ?

お勧めとしては武市先生の「関数プログラミング」が入門者向けでかつ分量もたいしたことない。
その本が手に入らなければ、MLの入門書はいろいろ出てるみたいだから読んでみたら?
0831デフォルトの名無しさんNGNG
「環境の中に入ってしまう」という感覚が
わからないと難しいと思われ

はぎゃ先生のほうの「関数プログラミング」の
ほうがいいかも。
0832デフォルトの名無しさんNGNG
>>829
・変数の出現と同時に値の「代入」を行なう。(未定義の値を排除)
・「代入」は一度だけしか行なわれない。(値が変わらない)
という考え方です。(変数の生存期間中値が変わらない)

そして、関数型言語の人たちはこれを「代入」とは呼びません。
C言語の人たちも「定義」と呼んでいます。
0833C言語のひとNGNG
「初期化」と呼んでいます。
0834デフォルトの名無しさんNGNG
>>832
schemeの場合は同ブロックの既存の変数を上書きdefineした場合、
古い値は永遠に参照できなくなるから、意味的には完全に「代入」。
つーか、環境書き換えるってことはシンボルの意味が変わるってこと。
関数型の視点からみると、ネストされたletが>>832のそれに当たると思う。
またはlambdaのネスト。
0835デフォルトの名無しさんNGNG
>>834
LISP系やScheme系が「代入」を持っているのはその通りだが、
ラムダ束縛が「代入」に相当するとは思わない。
0836デフォルトの名無しさんNGNG
>>834
define で変わるのって、 symbol に対応する address とか…だよね。
普通の意味での「代入」って、 set! とかの方だと思う。
define だと…例えば、既存の closure からは、古い値が見えるから。
0837石敢當NGNG
ICFP Programming Contest のページができました。

http://icfpcontest.cse.ogi.edu/
0838デフォルトの名無しさんNGNG
 別の板で下のようなのがありました。関数型でドンピシャなのって
ありますか?
 Cleanなんて近そうですが・・

>質問
(1) >UnixとWindowsで使えて
(2) >GUIと日本語(出来ればUTF8がいいな)が使えて
(3) >GPLじゃないバイナリがつくれて
>ありますか?
0839デフォルトの名無しさんNGNG
つーかマルチだろ。
0840デフォルトの名無しさんNGNG
>例えば、既存の closure からは、古い値が見えるから。
名前でアクセスすりゃ見えねえよ
0841LISPスレ 686NGNG
>>839
失敬な。>>838 は私ではありません。誰か別の人です。
とは言え、Scheme に限らずとも知りたくはありますね。
0842デフォルトの名無しさんNGNG
>>838
Gaucheはどうよ。GaucheはSchemeの一実装。
次のバージョンでGUI対応。いつ出るのかは不明。
0843デフォルトの名無しさんNGNG
OCaml
0844デフォルトの名無しさんNGNG
Gaucheはインタプリタ・・・
バイナリ作れるのか・・・?
というか、目的ちがくないか・・・?
0845デフォルトの名無しさんNGNG
おれの!

schemeは!

バイナリ作れるにょー
0846コギャルとHな出会いNGNG
http://kado7.ug.to/net/


朝までから騒ぎ!!
   小中高生
 コギャル〜熟女まで
   メル友
  i/j/PC/対応

女性の子もたくさん来てね
  小中高生大歓迎です                 
全国デ−トスポット情報も有ります。
全国エステ&ネイル情報あります。

  激安携帯情報あります。
0847デフォルトの名無しさんNGNG
OCamlって、
Win版だと、VCが無いといけないのか?
0848あげNGNG
>>847
cygwin版もあるょ
0849デフォルトの名無しさんNGNG
ょ、ってまさか・・・
0850デフォルトの名無しさんNGNG
半導体チップ設計で最大手(だと思う)のCadence社
のある設計ツールのスクリプト言語がSKILL++というので、
Schemeだった.manualにも
Cadence-supplied Scheme called SKILL++
とか
SKILL++ is designed with IEEE Scheme and CFI Scheme compliance in mind,
とか書いてある.ファイルを見たら括弧だらけでびびった.
なんでSchemeだったんだろう.
(1)たまたまそのツールを作るチームでSchemeが好きなやつがいた.
(2)Schemeをスクリプト言語とすると半導体チップが非常に協力に
  設計が出来る何かしらの理由がある.
もし(2)なら是非知りたいものだ.
そんだけ.
0851デフォルトの名無しさんNGNG
>>850
(3)MIT出身者がいるとか(w
アプリケーションの補助スクリプトとしてLISP系を選ぶ利点は
emacsやAutoCADとかで証明されてると思うけど、わざわざ
CommonLISP互換にしたり、オリジナルな独自LISPを一から設計
するよりは、お手軽にschemeを使った方が良いと判断された、
ってこともあるんでは。schemeなら機能的に不足は無いし。
メジャーなLISP系としては仕様が一番軽いし、組みこみでも実績あるし。
使う側からすれば、分厚いマニュアルを読まなくても良いに越したことはない。
0852デフォルトの名無しさんNGNG
逆にschemeのデメリットってなんでしょうか?
0853デフォルトの名無しさんNGNG
ライブラリが少ない。
0854デフォルトの名無しさんNGNG
あとは?
0855デフォルトの名無しさんNGNG
わかる人が少ない。
「普通のやつらの上を逝け」には競争相手が知らないことは逆にメリット
だみたいな感じに書いてあった、、気がする。
0856デフォルトの名無しさんNGNG
LISPがメジャーになったら、それはそれで嫌だぞ。オレは。
0857デフォルトの名無しさんNGNG
>>856
何で?
0858デフォルトの名無しさんNGNG
>>857
想像力が無いな。
例えば、もしも2ちゃんに「LISP板」が立ったら、を考えてみろ。
0859not 857NGNG
>>858
別に良いんじゃないの
0860デフォルトの名無しさんNGNG
>>858
「C板」すらないのに、そんな心配いらねーよ!
0861デフォルトの名無しさんNGNG
>>851
ああ、(3)が一番しっくり来る.それだ.
たしかに関数型言語でOCamelとかじゃなくてschemeを選ぶというのは
分かるのですが、
関数型言語を選ぶというのは(AutoCADなどで実証されたとありますが)
なぜなんでしょう?アプリのカスタマイズ用スクリプトはやることが決まっている(emacsはいろいろできるけど)から、ライブラリの
少なさが問題にならない、とか?たしかにAutoCADなら文字列操作や
ネットワークやらの操作をするための部品をあらかじめ用意しておかなくても
全然OKなわけで.

そういえばGIMPもそうですな.(AutoCADがそうだったというのは初めて
知りました.)
0862デフォルトの名無しさんNGNG
>>852
括弧の多さが可読性を低下させている
0863デフォルトの名無しさんNGNG
なんでみなさん、gccに対するプラグインという形ではなく、一から
コンパイラを作りたがるんでしょうか?こんなんだからいつまでたっても
メジャーな処理系が出てこないと思うんだけど。
0864デフォルトの名無しさんNGNG
>弟子が尋ねた。「先生、私は先生がカッコをまるで魔術師の ように扱ってい
>るのを常々敬服しています。どうすれば先生のようになれ るのでしょうか?」
>師「えっ? カッコ? あ、そうか。そんなものもあったな。いやあ、 すっかり
>忘れておったわ」
0865デフォルトの名無しさんNGNG
>>864
んなこといってるから、メジャーにならないという罠。
0866デフォルトの名無しさんNGNG
セミコロンがセパレータだったりターミネータだったりよくわからなかったり、
省略可能だったり、とか考えると、すんげー単純でイイ、と思うけど > 括弧

>>863 gcc のフロントエンドにコレ系の言語を載せるには、
gcc というフレームワークと gcc のバックエンドには荷が
重いと思われ。
0867デフォルトの名無しさんNGNG
>>858
car板とcdr板は立ったから、あともう一息。
0868デフォルトの名無しさんNGNG
じゃあ次はcons板で。
0869デフォルトの名無しさんNGNG
gccってコンパイラとして使われてる技術は古いよね
0870デフォルトの名無しさんNGNG
それらに加えてatom板とeq板が立ったら
五色不動の完成だな。
0871デフォルトの名無しさんNGNG
>>869
最新のコンパイラ技術とはどんなのですか?
たしかにgccの実装技術に関する参照論文は古いのが多いですが。。。
0872デフォルトの名無しさんNGNG
>>861
構文が基本的に()だけで済むっていうのは
補助言語としては使いやすくていいのでは。
()の上に構築される文法は仕様が基本的にかっちりとあるわけだし。
Lisp知らない人が多いのが問題だとは思うが‥
(GIMPの script-fu も確かにそうですね)
0873デフォルトの名無しさんNGNG
MIT出身者ワラタ。(笑)
0874デフォルトの名無しさんNGNG
MITってなに?マサチューセッツのMITですか?
0875デフォルトの名無しさんNGNG
>>863
関数型言語の有名人を集めたMSがどんな仕事をしてくれるのか
とくと拝見させて頂きましょう。また先生方の実務能力も。
そして我々GNUツール大好き人間はその成果を頂くと。。。
0876デフォルトの名無しさんNGNG
>>875 MSR の成果が単純に MS に行くわけじゃない。
例えばラシッド先生とかさ。知らない?

先生方の能力はghcがバンバンバージョンupしとることと
バンバン論文が出とることで証明済みと思う。C# が c--
だったらなぁ、とは思ったけど。

>>874 Wizard Book が Scheme 本としても MIT の
教科書としても有名ですが何か
0877デフォルトの名無しさんNGNG
>>874
武蔵工大じゃねぇの?
0878デフォルトの名無しさんNGNG
>>876
ghcって、Glasgow Haskell Compiler?
0879デフォルトの名無しさんNGNG
だからghcはあんなにパフォーマンス悪いんだな

ナットク
0880デフォルトの名無しさんNGNG
実務能力ってコーディングすることなのか?
0881デフォルトの名無しさんNGNG
最近元気ないね。どうしたの?
0882デフォルトの名無しさんNGNG
夏バテ
0883デフォルトの名無しさんNGNG
>>862
括弧の多さは可読性低下には繋がらない。
慣れだよ。
0884デフォルトの名無しさんNGNG
>>883
繋がるよ。括弧に頼ってインデントが減る傾向にあるから。
お手本とされるプログラムでも、大抵はCより減ってる。

それに、インデントがもっとあっても、他の言語よりは、慣れるまで
に少し時間を要する。
0885デフォルトの名無しさんNGNG
あと、Cは、()と{}と何もなしと、ただのインデントの四種類によって、
ネスト関係が一目でわかりやすい。括弧が一種類しかないLispよりも。
0886デフォルトの名無しさんNGNG
CでLispのように{}を使いまくったプログラムは書いちゃいけないの?
0887デフォルトの名無しさんNGNG
いけないの
0888デフォルトの名無しさんNGNG
()ばかり使わないで[とか]も使えよ。
もっとも初心者には余計読み難くなるけどな。
0889デフォルトの名無しさんNGNG
>>884
> 繋がるよ。括弧に頼ってインデントが減る傾向にあるから。

具定例を挙げてみてくれ。
インデントが減るだけでなく、可読性も減ると貴方が思う例を。
0890既出か?NGNG
プログラミング言語の概念と構造[新装版]
http://www.pearsoned.co.jp/washo/prog/wa_pro59-j.html

>本書は、アジソン・ウェスレイ発行/星雲社発売で1996年に発行された、Ravi Sethi著『Programming Languages』の
>初版の翻訳です。品切れになっていたものですが、、このたび新装版として発行しました。したがって、内容
>には変更がありません。


うれしぃぃぃぃぃいぃぃxぃぃぃぃぃぃーーーーーーーーーーー。
0891デフォルトの名無しさんNGNG
日本語版チラリと見て、
これは買わなくてヨシと思いつつ、
原書の方は買ちゃた覚えが(汗だく
0892デフォルトの名無しさんNGNG
こっちではまだ見れない。
http://www.amazon.co.jp/exec/obidos/ASIN/4894717700/
0893デフォルトの名無しさんNGNG
関数型言語を勉強するときはまったく新しいことを勉強するつもりで
英語オンリーでやるのが良さそう。日本語文献はいいのが少ないからね。
0894デフォルトの名無しさんNGNG
http://japan.cnet.com/Enterprise/News/2002/Item/020902-3.html
0895デフォルトの名無しさんNGNG
つかよ、新装版じゃなくて、
第2版翻訳しろよ。
0896デフォルトの名無しさんNGNG
>>893
よくある発想だが、
それに頓挫するのもよくあることだ。
0897美しいNGNG
美しいわ
0898デフォルトの名無しさんNGNG
>>896
英和辞書引いても、今度はその日本語の用語を理解しないと
いけないからね。Cができる人がJavaを覚えるのとはちょっと違う。
数学辞典の英訳書があると何かと便利かな。
0899デフォルトの名無しさんNGNG
関数型言語は、HPCに向いてるのか?
0900デフォルトの名無しさんNGNG
>>899
研究費をもらってくるための旗印としては、
データフロー記述だから並列実行に適しており云々
とかいうあたりがありがちかな
0901デフォルトの名無しさんNGNG
ぐぐればたくさんでてきそうだにゃ〜
0902デフォルトの名無しさんNGNG
HPCって何?
0903デフォルトの名無しさんNGNG
High Performance Computing
http://www.dcs.qmul.ac.uk/SEL-HPC/Articles/HpcArchive.html
http://www.dcs.qmul.ac.uk/SEL-HPC/Articles/GeneratedHtml/hpc.functional.html
0904デフォルトの名無しさんNGNG
ホシュ
0905デフォルトの名無しさんNGNG
C++プログラマのためのラムダ入門
http://www.sun-inet.or.jp/~yaneurao/intensive/spt1.html
0906デフォルトの名無しさんNGNG
つかな、そう言うのって微妙に話が違うんだよな。
0907名無しさん@EmacsNGNG
>>905
「C++プログラマのためのHaskell入門」とか、正面から入門してちゃんと習得
できるようなアプローチだったらいいのだけれど、C++な頭脳のままで理解で
きるところだけつまみぐいしようとすると結局
「よくわからん」や「それって**で済むじゃん」とかいうもったいない結論
になってしまう罠。
0908デフォルトの名無しさんNGNG
Yutaka Oiwa, Eijiro Sumii, and Tatsurou Sekiguchi

この人らはどこの学校の人?
俺学会はよく知らないんで、教えて欲しいんだが。
レス数が900を超えています。1000を超えると表示できなくなるよ。