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

関数型言語Part2

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
前スレ
http://pc.2ch.net/test/read.cgi/tech/987954395/
00021NGNG
このスレッドの趣旨は
「関数型言語からRubyへステップアップ」
です。よろしくお願いします。
0003デフォルトの名無しさんNGNG
関連スレ

関数型プログラミング言語Haskell
http://pc.2ch.net/test/read.cgi/tech/996131288/

ML!!!!!!
http://pc.2ch.net/test/read.cgi/tech/1002111468/

LISP Scheme Part2
http://pc.2ch.net/test/read.cgi/tech/1002584344/

Emacs Lisp
http://pc.2ch.net/test/read.cgi/tech/1004551074/

再帰
http://pc.2ch.net/test/read.cgi/tech/992241842/
00041-original>>2NGNG
死んでください
00051-originalNGNG
つーか、おれにできるのはここまでだょ。
勝手にスレ立てしてごめんょ。魔が差したんだょ。
あとは任せたょ。
0006デフォルトの名無しさんNGNG
だからlispは関数型じゃねーって。
0007デフォルトの名無しさんNGNG
えっ?
一応はしりだろ。
0008デフォルトの名無しさんNGNG
このスレッドの趣旨は
「関数型言語からRubyへステップアップ」
です。よろしくお願いします。
0009デフォルトの名無しさんNGNG
恐らく流れはこんな感じだろ。

lispは破壊的なリスト操作をしなくてもプログラムが書ける。
↓
代入が無ければ見通しがいいかも。
↓
変数なんて捨てちまえ。
↓
ついでに副作用なんて捨てちまえ。
↓
作用的評価順序なんて捨てちまえ。
↓
最近カレーがンまい!
↓
haskellの誕生。
0010デフォルトの名無しさんNGNG
―――――このスレで一番痛いところは、
関数型をほんとに理解してるやつが居るのかどうか
怪しいという点だ(おれも含めて)―――――
0011デフォルトの名無しさんNGNG
>>6

ttp://www.cs.nott.ac.uk/~gmh/faq.html
comp.lang.functional FAQを読むと、SchemeやMLは一応「副作用も許す
のでpureではない関数型言語」という扱いになっている。Lispは論外だ
ね(副作用なしではループも書けないから)。

ところで、FAQだとHaskellも「広い意味での純関数型言語」となってい
る。I/Oがpureとは言いきれないから、らしい。
0012デフォルトの名無しさんNGNG
>I/Oがpureとは言いきれないから、らしい。
これはどこに書いてある?
0013デフォルトの名無しさんNGNG
Haskellは完全にpureだろ。
0014デフォルトの名無しさんNGNG
関数型言語の有用性は、関数型言語のプログラミング作法を、関数型でない言語で試してみるとよくわかるよね。
余計な一時変数を作らないようにしたり、再帰でプログラミングしたりといったことは、関数型言語でなくてもできる(速度的に不利だとしても、ボトルネックだとわかるまではそのままにしておける)。
やってみればデバッグが楽になることがわかるし、その問題への本質的な理解が深まることがわかるよな。
0015デフォルトの名無しさんNGNG
>>12-13
http://www.cs.nott.ac.uk/~gmh/faq.html#purity
0016デフォルトの名無しさんNGNG
>Sometimes, the term "purely functional" is also used in
>a broader sense to mean languages that might incorporate
>computational effects, but without altering the notion of `function'

ここ訳してお願い
0017デフォルトの名無しさんNGNG
>>15
そこにはHaskellのI/Oメカニズムでは実行と評価が分かれてる
と書かれてると思うが、pureとはいい切れないなんて意味じゃな
いだろ?
0018デフォルトの名無しさんNGNG
>Sometimes, the term "purely functional" is also used in
>a broader sense to mean languages that might incorporate
>computational effects, but without altering the notion of `function'

(直訳)
「関数」の概念は変えないが計算的な作用を組み入れた言語まで意味するよう
なもう少し広義で"純関数型"という用語を使うことがある。

(意訳)
「参照透明性」は壊さないまま、いわゆる副作用も扱える言語まで含めるよう
に、「純関数型」という用語を拡大解釈することがある。

(そういう拡大解釈をしなければHaskellは「純関数型」に含まれない。)
0019デフォルトの名無しさんNGNG
>>18
意訳のほうがめちゃめちゃ作為的にみえるんだけど。
0020Kusakabe YouichiNGNG
In article >>16, 16 デフォルトの名無しさん wrote:
> > Sometimes, the term "purely functional" is also used in
> > a broader sense to mean languages that might incorporate
> > computational effects, but without altering the notion of `function'
> ここ訳してお願い

自動翻訳だと

「一般的な言語では"purely functional"という用語は計算結果を含む
より広義にも用いられる場合もある。」

ですね。

meanを動詞と解釈するのもWebにはあるけど、
ほんとのところはどうなんでしょ?
(「卑劣な, 下品な, さもしい, あさましい」だったり:)
0021デフォルトの名無しさんNGNG
(意訳)
一般には副作用と捕らえる事柄を、作用の概念のみを用いて表せるように
した言語を純関数型ということがある。

(Haskellは一般には副作用となるような言語すら副作用ではなく扱える
完全に純粋な関数型である)
0022デフォルトの名無しさんNGNG
>>21
それはコンピュータのアクションを扱わない言語が狭義の純関数型で
コンピュータのアクションも扱って、しかもそれが副作用では無い
言語が広義の純関数型と言ってるだけじゃないの?

それによるとHaskellは広義の純関数型だけど、完全に純粋ではない
と言うネガティブな意味ではなくて、純粋なくせに他より強力な
機能を持ってると言うポジティブな意味だと思う。
0023デフォルトの名無しさんNGNG
>「一般的な言語では"purely functional"という用語は計算結果を含む
>より広義にも用いられる場合もある。」

まあ良いけど「一般的な言語では」ってどうやったらそうなるのよ。

>meanを動詞と解釈するのもWebにはあるけど、
sense to mean を不定詞以外にどう解釈するんだ。

>一般には副作用と捕らえる事柄を、作用の概念のみを用いて表せるように
>した言語を純関数型ということがある。

「一般には」ってどっから湧いて出た?
effectって言葉は原文に1つしかないぞ?

>(Haskellは一般には副作用となるような言語すら副作用ではなく扱える
>完全に純粋な関数型である)

自動翻訳か? 「言語すら扱える」って(藁
0024デフォルトの名無しさんNGNG
>>23
> まあ良いけど「一般的な言語では」ってどうやったらそうなるのよ。

Computatinal effectsって「一般的な」言語では副作用でしょ?
002524NGNG
>>24
レスの仕方を間違えた。

> 「一般には」ってどっから湧いて出た?
> effectって言葉は原文に1つしかないぞ?

Computatinal effectsって「一般的な」言語では副作用でしょ?
「functionの意味を変えずに=作用のみを用いて」でしょう。
0026デフォルトの名無しさんNGNG
>>22
Monadic I/O以前のHaskellはI/Oを扱っていたが狭義の
純関数型言語だったんじゃないか?
だからその「狭義」の解釈は違っている。
0027デフォルトの名無しさんNGNG
Hudak先生のお言葉:
Haskell -> lazy but pure
SML/NJ -> eager but dirty!
0028デフォルトの名無しさんNGNG
いつになったら抽象論から外れるんだろうか。
0029デフォルトの名無しさんNGNG
>>28
おまえに任せた
0030デフォルトの名無しさんNGNG
関数型言語の世界じゃ、識別子は短めがナウなヤングにバカウケなの?
0031デフォルトの名無しさんNGNG
不必要に具象的な識別子をつけるのは流行らないね。
抽象化できるかぎり抽象化するのが通のやり方。
0032デフォルトの名無しさんNGNG
数学界の悪しき慣習だね
0033デフォルトの名無しさんNGNG
why?

抽象化された関数を利用するときに具象的な実引数を渡せば良いだけではないの?
つまり、関数を利用する側では、具象的な識別子を使えばいいんだよ。
関数を定義するときはできるだけ抽象的な識別子を使う。
それが通の使い分け。
0034デフォルトの名無しさんNGNG
いみふめsage
f(g(Kusakabe_Yokaichi ))
0035デフォルトの名無しさんNGNG
>>33
通でもなんでもないだろ
0036デフォルトの名無しさんNGNG
少なくともJavaみたいのが良いとは、誰も思わないだろ?
0037なんだネタかNGNG
 
0038デフォルトの名無しさんNGNG
識別子は長くも短くもできるんだからどうでもいいだろ。
つまらない議論ばかりだな。
0039デフォルトの名無しさんNGNG
どうでもいいか?
可読性からいっても、結構重要なことだと思うぞ。
実際JAVAなんて、打ち込んでるだけで嫌になるしな。
0040デフォルトの名無しさんNGNG
エディタに補完があればどうでもい
0041デフォルトの名無しさんNGNG
なければどうなんだ?
0042デフォルトの名無しさんNGNG
そういう環境・コーダはいずれ絶滅します
0043デフォルトの名無しさんNGNG
なくてもどうでもいい
コピペすれば?
0044デフォルトの名無しさんNGNG
俺は補完+コピペ使用でも鬱になるが・・・
0045デフォルトの名無しさんNGNG
38の意見なんてどうでもいい
0046デフォルトの名無しさんNGNG
ハァ?
お前らなんか勘違いしているようだが
俺たちに生産性やそれを左右する
開発手法・コーディングスタイルなんて関係がないのさ
0047デフォルトの名無しさんNGNG
なんで?
0048デフォルトの名無しさんNGNG
残り関数型言語使い 0人
0049デフォルトの名無しさんNGNG
俺たちの目標は単位を取ることであって
なにかを生産・開発することではない
それにコードも長くて100行程度だから
手法やスタイルは一切不要なのだ
おわかりか?
0050デフォルトの名無しさんNGNG
「一文字変数なんか使う奴は氏ね」と言われて育った漏れには、
一文字変数使いまくりのHaskellの大胆さに失禁気味です。
0051デフォルトの名無しさんNGNG
ようは程度問題だろ
JavaやHaskellみたいに極端なのは外基地
0052デフォルトの名無しさんNGNG
ネーミングは難しい。簡潔なのがベストだが、センスのない人間が
わかりやすくしようとすると、ダラダラ長くなる。結局長すぎて見
通しが悪くなり、かえってわかりにくくなる。
0053デフォルトの名無しさんNGNG
っつーか、
Javaみたいなinclusion polymorphismな言語では長い名前のほうが合ってるけど
関数型言語みたいなparametric polymorphismな言語では長くしようがないと思われ。
「hd x = ...のxをx以外にどう言えってんだ」って。
0054デフォルトの名無しさんNGNG
Javaのスタイルに合わせると鬱になる
0055デフォルトの名無しさんNGNG
Java = 鬱そのもの
0056朝の心理テストNGNG
Javaが饒舌なのは、書いてる本人に自信が無い事の現れです。
今日のラッキーアイテムはedlin。
0057デフォルトの名無しさんNGNG
>>39
だから、長くしようと思えば、Haskellで長くすることもできるし、
Javaで短くしようと思えばすることもできるじゃない。
0058デフォルトの名無しさん NGNG
verificationが出来る方がいい
0059デフォルトの名無しさんNGNG
関数の識別子はともかく、
関数の中での変数名は一文字でもいいだろ。
0060デフォルトの名無しさん NGNG
データに実世界のオブジェクトを表すような名前が必要かどうか。
現実的なプログラムって全然汎用的じゃなくてある決まった処理を
するために作られることがおおい。だから変数名は端的かつ分かりやすい
方がいい。そのために自然言語の意味の借用もありでしょ。
だけど関数型言語のやり方にケチつけてる必要もない。
かれらが表現したいのは個物から離れたものだから。
0061デフォルトの名無しさん NGNG
未だにPVSマンセーな俺は逝ってよしか?
0062デフォルトの名無しさんNGNG
関数型と手続き型では変数の担う役割が違うし
手続き型での常識を持ち込まれても…。
0063デフォルトの名無しさんNGNG
JAVAのライブラリ使ってみろ。
どうやって短くすんだ?
0064デフォルトの名無しさんNGNG
>>63
ライブラリに頼るのは厨房
0065デフォルトの名無しさんNGNG
オイオイ、JavaからLibraryとったらなにも残らないよ>64
0066デフォルトの名無しさんNGNG
ネーミングは簡潔にって事だ
0067デフォルトの名無しさん NGNG
>>61
pvsマンセー!!!

             逝って来ます...
0068デフォルトの名無しさんNGNG
実用されてないオナニー言語系の人達の言うことは違うねえ。
0069デフォルトの名無しさんNGNG
pvsは実用されてますが何か?
0070_NGNG
関数型言語(lisp)ってあまり実用的でないかもしれないけど影響力は凄いよね。
0071煽りNGNG
>>70
たとえば?
0072デフォルトの名無しさんNGNG
>>70
lispは関数型ではないって話のながれだったのでは…
0073デフォルトの名無しさんNGNG
研究分野で広く使われていることは実用的とは言わないのか。
0074デフォルトの名無しさん NGNG
>>73
ここの多くのプログラマは、
学生が業務系システムについて何も知らないことをバカにする割りには、
自分らが研究分野について無知なことには無頓着なのでれす。

俺は業務系。研究分野なんて何も知らん。だから何も言わないw
0075デフォルトの名無しさんNGNG
>>74
ハハハ,鋭い.それでもって,研究動向に無知なことを指摘されると,
「それ(研究)じゃ給料は稼げない」とか言うわけね.
0076デフォルトの名無しさんNGNG
喰えるか喰えないか、それが問題だ。
0077デフォルトの名無しさんNGNG
生き延びる人
0078デフォルトの名無しさんNGNG
重要なのは、それで遊べるかどうかだ。
食える言語は他にいくらでもある。
0079浮上NGNG
OOと関数型は相容れません
0080デフォルトの名無しさんNGNG
OOとの違いはよく分かんないけど、
関数型の言語って静的にプログラムの内容を
検証しやすいとかってメリットはあるの?
0081デフォルトの名無しさんNGNG
副作用が無ければその通りだ。
0082デフォルトの名無しさんNGNG
>>79
OOを実現した関数型言語はいくらでもある。
0083デフォルトの名無しさんNGNG
概要は?
0084デフォルトの名無しさんNGNG
というか
・手続き型
・オブジェクト指向型
・関数型
・論理型
という2種的(w)なカテゴリーに分けることが
既に現実からはなれてしまっているような気がするが。
0085現実的な回答NGNG
全ての言語は、次の2つに分ける事が出来る。
・実務型
・オナニー型

言うまでもなく、所謂関数型はことごとく後者だ。
0086デフォルトの名無しさんNGNG
彼女も認めるほどのオナニストですが何か?>85
0087デフォルトの名無しさんNGNG
>86
こすり過ぎて、関数型言語でショッピングサイトを作ろうなんて
暴挙に出るなよ。
0088デフォルトの名無しさんNGNG
>>87
ことごとくライバルを打ち負かしてしまい、オナニーに拍車がかかるからな。
0089デフォルトの名無しさんNGNG
>>85
前者には APL と PL/I と COBOL と VB と C と C++ しかないようですが?
0090デフォルトの名無しさんNGNG
ADAはぁ?
0091デフォルトの名無しさんNGNG
このスレ内容濃くて(特に前スレの前半)自分の無知を思い知らされるわ
0092デフォルトの名無しさんNGNG
前スレがこともあろうにHaskellマンセーで終わっている…!!!!
0093login:PenguinNGNG
>>92
だめなの?
0094デフォルトの名無しさんNGNG
>>85
gcc は実務に使えないと?
0095デフォルトの名無しさんNGNG
?
0096デフォルトの名無しさん NGNG
やっぱりS式がいいなぁ、ボソ
0097デフォルトの名無しさんNGNG
>>65

んなことないべ。

>>75

OCamlは?使ったことないんだけど。
009894NGNG
>>95
gcc は一旦プロセッサに依存しないツリーを作って、それをプロセッサ依存のコードに展開する方式を
採用している。でプロセッサ依存部分の記述だけど、ソースを見れば分かるように、独自の関数型言
語で書いてある。(see config/i386/i386.md)

あとはデータファイルが関数型言語っぽいデータ構造になってる CAD なんかも、わりとよく見かける
ね。
0099デフォルトの名無しさんNGNG
>>98
かっこがたくさんあるからって関数型って呼んでたら
関数型やってるひとが怒るぞ。
0100デフォルトの名無しさんNGNG
>>99
どっちの話?
0101デフォルトの名無しさんNGNG
たぶんgccの話でしょ。
関数型言語的というよりLisp的だから。
EmacsのStallmanが作ったcompilerだし。
■ このスレッドは過去ログ倉庫に格納されています