関数型言語Part2
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/tech/987954395/
0446444
NGNG# (Generic Java や、JCP14: Adding Generic Types to the Java の祖先ですか.)
結局、この問題は、
「Javaでは first-class functionsの代わりに inner classが実装されているから、
それを使えば高階関数を作れる」
という回答でよろしいでしょうか?
# オブジェクト指向の形式モデルなんて言い出したのヴァカみたい>>俺
0447プロジェクト・リーダー
NGNGお教え下さい。
0448デフォルトの名無しさん
NGNG0449デフォルトの名無しさん
NGNG0450デフォルトの名無しさん
NGNG>高階関数 と 高階論理 の (類似性) を
高階論理では述語だけでなく、述語に関する述語や、さらにその上の述語...
などが記述できます。さて、集合A上の述語PというのはPの特性関数
X_P:A->boolと同一視できるので、A上の述語の述語が書けるというのは
(A->bool)->boolという高階関数が書けると言いかえられます。
というように結びつけられると思われ。
0451デフォルトの名無しさん
NGNG0452デフォルトの名無しさん
NGNGhttp://pvs.csl.sri.com/
の他にどのようなものがあるのでしょうか?
ちなみにPVSはマスターするのに最低6ヵ月必要らしいの
ですが、他のものもやはりそれぐらいかかるものですか?
0453デフォルトの名無しさん
NGNG"Why Functional Programming Matters"の日本語訳
http://www.sampou.org/haskell/article/whyfp.html
0454デフォルトの名無しさん
NGNG検証とは違うけどCafeOBJも面白いよ。
0455
NGNGそれなかなかいいね。
0456デフォルトの名無しさん
NGNGhttp://www.towelrecords.com/varitext/001.html
0457デフォルトの名無しさん
NGNGHaskell、ML,LISP,Scheme,Emacs Lisp
ぐらいですか?
0458デフォルトの名無しさん
NGNG0459デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/tech/1010157331/l50
のスレの>167さん?
0460デフォルトの名無しさん
NGNG0461名無しさん@お腹いっぱい。
NGNG知りたいのであげ
0462デフォルトの名無しさん
NGNGMLが抜けてます〜
0463デフォルトの名無しさん
NGNG0464デフォルトの名無しさん
NGNGwhat?
0465デフォルトの名無しさん
NGNGなんかえらいでかいパッケージなんだけどよ。
0466デフォルトの名無しさん
NGNG「おいオメー さっきから うるせえぞ
『知りません』『知りません』ってよォーーーー
『知りません』・・・そんな言葉は使う必要がねーんだ
なぜなら オレやオレたちの仲間は その言葉を頭に浮かべた時には!
既にGoogleや書籍で調べがついちまって もうすでに『知っている』からだッ!
だから 使った事がねェーーーッ
『知っている』なら 使ってもいいッ!」
0467デフォルトの名無しさん
NGNG0469デフォルトの名無しさん
NGNG論理プログラミングをサポートするMLみたいな感じだね。
現実的な感じがするところが、使えそうな・面白くなさそううな。
0470デフォルトの名無しさん
NGNG「気に入らない事でもあったのですか、何か?」
0471デフォルトの名無しさん
NGNGMLが論理プログラミングをサポートすると、どうして
>現実的な感じがするところが、使えそうな
なんでしょうか?
そうかなあ?
0472469
NGNG論理プログラミングをML的にやると現実的になるって印象を
述べております。はい。
0473デフォルトの名無しさん
NGNG論理プログラミング言語をつかう人が聞いたら怒りそうだ(笑
0474デフォルトの名無しさん
NGNGそういう状態なのですか?
0475デフォルトの名無しさん
NGNG0476デフォルトの名無しさん
NGNG仕事はRubyだけど、難しくなりそうなプログラムはSchemeで書いて
「本質」に迫ろうとしたり。Rubyで書くと、ad hocなコードで動か
しちゃうことになりがちなので、Schemeでプロトタイピングするこ
とによってそれを避けてます。
0477デフォルトの名無しさん
NGNG0478デフォルトの名無しさん
NGNG0479デフォルトの名無しさん
NGNG0480デフォルトの名無しさん
NGNG0481デフォルトの名無しさん
NGNG0482デフォルトの名無しさん
NGNGネタじゃないですよね?
とかいいながらおれも
ポストコボルみたいな
Javaだったりするから
人のこと言えないかw。
0483デフォルトの名無しさん
NGNGad hocは普通に辞書に載っている普通の言葉だが。
「特別な」「一度限りの」という意味。
つまり、ここでは、現在解こうとしている問題に
特化したコードを書いてしまうことを指している。
再利用などまったく考えていないコードのことだ
な。Rubyはスクリプト言語だからad hocなコー
ドを書きやすい。Schemeはそうじゃないってこ
と。
0484デフォルトの名無しさん
NGNG後付けの、みたいな感じじゃないの?
0485デフォルトの名無しさん
NGNG中身を後から書いたりすることだと
思ってたが、俺、間違ってる?
0486デフォルトの名無しさん
NGNG0487デフォルトの名無しさん
NGNG0488デフォルトの名無しさん
NGNGad hocな理論、とか言うよね?
あれは「後付け」では?
0489デフォルトの名無しさん
NGNGhttp://www.dictionary.com/cgi-bin/dict.pl?term=ad+hoc&db=*
0490デフォルトの名無しさん
NGNG国際機関が常設されていない場合なんかを言うと思ったが。
つまり問題が起きるたびに機関を立ち上げて、
終わると閉鎖するって奴。
0491デフォルトの名無しさん
NGNG違う、「場当たり的な」と言う意味。その問題にしか適用できないような、
いわば理論とは呼べない程度の理論のこと。
0492デフォルトの名無しさん
NGNGありがとう。
気持ち的には正しい意味で使ってた。
日本語にしようとは思わなかっただけで。
0493デフォルトの名無しさん
NGNGeval がないのが惜しい。
0494デフォルトの名無しさん
NGNG>eval がないのが惜しい。
evalって、LISPだけじゃないっすか。
関数型言語とevalは関係ないでしょ。
Excelって再帰できるの?
0495デフォルトの名無しさん
NGNGExcelに限らず、任意の言語で関数型プログラミングの手法を
使うことはできるよね。FORTRANではさすがにきついが。
0496デフォルトの名無しさん
NGNGこのあたりどうなのでしょう。
他の言語で関数風にかくことってどの程度可能なのでしょう?
再帰のできない言語では、全然ダメですし、
Javaだってコウカイ関数が使えないのであんまり生かせませんし、
たとえばCの文字列操作のような、関数のような形式で扱えないものも
関数的には扱えないですよね。
0497デフォルトの名無しさん
NGNGなんで他の言語で関数風に書こうとするんだ?
そんなこと考える時間割くぐらいなら関数型言語でもやってみたら?
0498デフォルトの名無しさん
NGNGMLに限らないので、やや不便ながらこちらに書きこみます。
お初に書きこみます。
私はMLは嫌いではありません。
そういう上で思っていることです。
数学的背景があるからML(など)は別格であるという見方はちょっとどうかと
思います。
私もMLは面白いなとおもうのですが、MLが好きなほかの人の話を聞くと
ときどきやりきれなくなります。
関数型言語が数学的にサポートされているというのは、単に関数型言語が
「ある」数学的視点にとって都合の良い言語というだけであって、それ以上でも
それ以下でもないはずです。
それは言語が優れているということ(この命題はそもそもきちんと定義できて
いませんが)とはイコールではないと思います。
数学的な援軍を得やすいということだけだと思うのです。
たとえば同じ働きをプログラムをどれだけトータルで経済的に開発できるか、
という基準で考えたり、
同じものをどれだけ解りやすく(つまり低い理解力で)作り出せるかといった
風に考えた場合どうでしょう。
数学的な望ましい性質は、単なる手段に過ぎないと思います。
手段と目的がひっくり返っていませんか?
実際、MLは「使えますか?
どなたかがMLスレで書いていましたが、MLには今世の中で多いであろう
要求にたいしてまとまったライブラリがほとんどないと思うのです。
MLを使っている人は一体何をしているのでしょう?言語と戯れているだけで
実際に使おうとしないのですか?実際に使おうとすると自然にいろいろな資
産が残るとおもうのですが。
個人的には関数型には非常な可能性を感じます。
ぜひ、仕様の口上じゃなくて「実績」で他の言語を蹴散らしてください。
0499デフォルトの名無しさん
NGNGつーか、この板でつかってるやついるのか?実は498だけだったりしないか?
0500デフォルトの名無しさん
NGNGていうか、実際ML使ってる人なんてほとんどいないと思うけど、
その使ってる人の中には、その数学的な特徴が一番重要で、
それゆえ「自分にとって」別格であると思ってる人がいるん
じゃないかな。
その人がそう思ってることをあなたが否定するのこそ
間違ってることだと思うよ。
0501デフォルトの名無しさん
NGNG>>498さんは「使う」人にもっと話して欲しくて煽っているんじゃないかな。
0502デフォルトの名無しさん
NGNG数学的背景がある、というのは言語の設計哲学とか設計上の方法論というべき
ものではないでしょうか。そもそも関数型言語には他にも目を向けるべき重要
なセールスポイントがいくつもあります。型推論、型チェック、ポリモルフィ
ズム、モジュールなどがそうであり、それらは生産性とか可読性を向上させる
目的で実装されています。
足回りが貧弱な感は否めません。ライブラリがないから誰も使わないのか、誰
も使わないからライブラリが放置されているのか...悪循環。
0503名無しさん@navi2ch
NGNGそれはまともなプログラマであれば全ての人が抱くことです。
まずは自分の心に正直になりましょうw。
で、話は変わりますが、
言語として優れていても凡人にとっつきにくいのは
やはり実用的な意味ではゼロに近いです。ですが残り僅かな
ところでかなり有用なのではないでしょうか?
クリティカルなプログラムがCで組まれているのは、
生産性という点から見てもあまり誉められたものではありません。
関数型言語の特性としてプログラムの検証を行えるというのが
強みなのですから、そこをもっと前面に出していってもいいのでは?
既存の言語で既に実現できていることを関数型言語でもやってみろ
という煽りは、2ch的に見ても低レベルだと思います。
私自身は、プログラム検証には興味がありそれ、
それが実在するツールではどの程度実現できているのか、
そんなところが知りたくて今、Haskellを勉強しています。
0504デフォルトの名無しさん
NGNGC++なんかのほうがよっぽど難しいと思います。
難しいという印象がついているのは、関数型言語と世間との接点にいる人が
数学とかラムダ算法とか理論とか、そういう後光を知らずか知ってか、ちらつ
かせながら、良い言語ですよと言ってしまっている事に原因があると思う。
#強迫神経症のような括弧の嵐、人工知能用の難しい特殊言語という先入観の
#付いてしまったLISPも同様に不幸ですね。
実際、MLの基礎的なことは割とすぐにおぼえられると思います。
大学の講義でMLが使われているところのカリキュラムを見てもそれはわかります。
で、たぶん問題はそのあとで、色々なことをしてみようと思ったとたんに、
こういう時にはこういう風に組む、という情報が少ない。(本もソースも)
C言語などからの「発想転換」が必要なところはなおさら。
そして、ML風をやっと掴んできたところで、ライブラリが何も無いので、
覚えたけど使えない。中級者手前で脱落。
他の言語でできることができないなんて、とんでもないと思います。
Cでウインドウシステムを組むのだって、よく考えればかなり無理をしています。
それがわからないのはライブラリがあるからです。
ウインドウシステムやソケット、データベースなどを、なんらかの関数型に合っ
た流儀でつかえるようなライブラリがあったら、つかると思いますけどね。
検証はたしかにものすごい強みですが、そのためだけに不踏の大地たるML
に踏み込むコストと、検証に向かない言語を検証ツールでがんばって検証
することと比較してどうかと思います。検証がどうしても必要となるようなプロ
ジェクトではお金もかけられるだろうし。
普通に使えるようになったMLで検証が可能だったら人々は中毒になることでしょうが。
0505仕様書無しさん
NGNG開発用に使ってもいいんだけどな。
Webアプリ限定だけど。
0506デフォルトの名無しさん
NGNG「C++にはVisualC++があるのに、なんでMLには無いんだ!プンプン」
マイナーな言語何だから仕方ないだろというしかないですなあ。(ワラ
0507デフォルトの名無しさん
NGNGこれで言い訳は通用しません。
ガチンコです。
0508デフォルトの名無しさん
NGNG他言語との勝負などはム板の掃き溜めである
撲滅スレの住人がやってればよろしい。
まあ、.NETで色々できるようになるんなら良いことじゃないの?
0509デフォルトの名無しさん
NGNG0510デフォルトの名無しさん
NGNG0511デフォルトの名無しさん
NGNG同じ土俵に乗ったといえるんじゃないの?
0512デフォルトの名無しさん
NGNG起きろ!
・・という真摯な内部批判だと思うので、言語の無駄論議といっしょにするのは
どうかと思われ。
.NETは全然解決じゃないですよ。
今だって、やろうと思えばウインドウシステムもつくれないことはない。
機能が無いのではありません。
そこに大地が無いのではなくて、どういうわけか未踏の大地のままなのです。
0513デフォルトの名無しさん
NGNG同じようなこと、一度や二度感じたことのある人は沢山いると
思うんだ。実際、俺も思ったよ。でもって、ちょっと取り組ん
でみたこともある。
でも、実際にやりはじめてみると、CならCですでに実用化され
ている機能を「作り直す」という行為に終始することになるん
だよね。それって、ひどく退屈な上に、実りのなさそうな作業
なんだよね。
だったら、他の言語のライブラリにアクセスする仕組みや、別
のプロセスと通信する仕組みがあればいいってことになりがち
なんだよ。で、そういう機能は関数型言語にもある場合が多い
わけ。
それに気付いた瞬間、萎えちゃうんだよね。
少なくとも俺は萎えた。
あるものを使えばいいじゃん、って思っちゃうんだよ。
だって、使えるんだから。
それがないとどうしても困るってもんじゃないとな。
……というのが、俺の体験談ね。
でも、それでも頑張ってみるのも良いかも知れない。
SML/NJあたりだと、しばらくSML'97が健在っぽいし、日本語で
読める文献もあるわけだし、ライブラリを作ると、使ってくれる
人もいるかも、だしな。
0514デフォルトの名無しさん
NGNG出来たライブラリの使い勝手が C と大して変わらないとかなら
あまり欲しくないよね。
でも関数型言語用なわけだし、抽象度が高く柔軟に使えるようなものなら
作る価値があるような気がするし、
そういう方向性で作るならあなたの云うようにならなかったりしないのかな?
0515デフォルトの名無しさん
NGNG我輩Haskellはたしなまむのではっきりとはわからないが、
Haskelの公式サイトの
http://haskell.org/libraries/#guigs
を見てください。
>>513 の言っているのは、GTKをまんまくっつけただけなどの「望ましくな
い、抽象度の低い」ライブラリに相当すると思います。
オブジェクト指向のそれのように、関数型に即した抽象化の行われたライブ
ラリがあってしかるべきだと思います。
すでにあるじゃない、という意見なら未来永劫Cを使うということになりませ
んか?なんか、ダメなCOBOL使いの意見みたいです。
リナックスとかリナックスのウインドウシステム作ってる人みたいに、
作ること自体をたのしんでできないかな、とも思うし。
ただ、問題なのは「関数型のための抽象化」の良い案が凡人には思いつか
ないということでしょう。
どこかの研究者か天才プログラマーか、思いついてプロジェクトを始めて
欲しいなと。
0516514
NGNG俺もチャレンジしないと言ってるんじゃなくって、過去の挫
折体験をカミングアウトしただけなんだけどなー。
0518デフォルトの名無しさん
NGNGSchemeでcurry化って概念はあるのでしょうか?
たとえば、リストの先頭要素とそれ以降のリストの要素の大小を比較し、
小さい要素だけのリストを返す関数を、Schemeのfilter関数(非標準?)を
用いて実現したいわけです。
ちなみに、Haskellなら以下のようになります。
lessThan :: (Num a, Ord a) => a -> a -> Bool
lessThan a b
| a > b = True
| otherwise = False
lessList :: (Num a, Ord a) => [a] -> [a]
lessList ls = filter (lessThan (head ls)) ls
これをSchemeで書くとき、filter関数の(a -> Bool)部分をどう書けば
美しくまとめることができるのか、少々悩んでいます。
filter関数を使わなければ簡単なんですけど、どうせなら使いたい。
0519デフォルトの名無しさん
NGNGScheme少々Haskellサパーリな人間の回答です。
curry 化というのはわからないけど
リストの先頭要素とそれ以降のリストの要素の大小を比較し、
小さい要素だけのリストを返す関数は以下のように書けます。
(define (rm-if-not p lst)
;; Common-Lisp の remove-if-not 相当
(let loop ((lst lst) (r '()))
(if (null? lst) (reverse r)
(loop (cdr lst) (if (p (car lst)) (cons (car lst) r) r)))))
(define (less-list lst)
(rm-if-not (lambda (x) (< x (car lst))) (cdr lst)))
(less-list '(4 3 5 2 4 6 3))
==> (3 2 3)
0520518
NGNGありがとうございます。
ちなみにcurry化というのは…正確な定義は忘れてしまいました。
lessThan :: (Num a, Ord a) => a -> a -> Bool
これが型の定義なのですが、 a -> a -> Bool が引数と返り値に相当します。
aに相当する数字二つを引数とするとBoolが返るのはOKとして、
もし引数が一つだけだとしたら、上の定義は右結合なので、
a -> (a -> Bool) となり、aを入力したらBoolが返る式が返り値になる、
というのがcurry化です。
Haskellでのfilter関数の定義が,
filter :: (a -> Bool) -> [a] -> [a]
のように、最初に評価式を必要とするので、curry化を用いると
具合が良かったわけです。
詳しい説明がsampou.orgにあったはずですが、これまた忘れてしまいました…。
0521デフォルトの名無しさん
NGNG(define (less-than a b)
(if (a > b) #t #f))
(less-than 4) ==> Error: 引数が足らん
となるのでそういうことはできない気がします。
Scheme だと
(lambda (x) (less-than 4 x))
みたいにその場で名前なしの手続きを
つくるのが普通じゃないかな?
0522デフォルトの名無しさん
NGNGごめん間違えた
(define (less-than a b)
(if (> a b) #t #f))
強引に curry っぽいことはできるけど普通に呼ぶときに
面倒になるね
(define (less-than a)
(lambda (b)
(if (> a b) #t #f)))
((less-than 4) 1)
=> #t
0523デフォルトの名無しさん
NGNG#教科書に載ってた、true, false, if-then-else, inc, dec, 自然数,…を表すλ式を
#scheme処理系に入力して遊んだときのことを思い出したよ。
0524518
NGNG0525518
NGNG比較しちゃうからですね。
空リスト以外はコロン使った方が好みです。
#もばいるしてたら電車逃した(w
0526デフォルトの名無しさん
NGNGlessThan の定義ってこれじゃいかんのですか?
lessThan :: (Num a, Ord a) => a -> a -> Bool
lessThan a b = a > b
そもそも定義しなくても
lessList (l:ls) = filter (l >) ls
でいいんじゃないのですか?
0527518
NGNGそれで十分なんですよね。
電車に乗ってから気がつきました。
まぁ、Schemeでcurry化ってあるの?という疑問から
色々迷走してしまったということで許してください。
0528デフォルトの名無しさん
NGNGやっぱ、スレなんて立てたら即過去スレ逝きですかね?(w
0529528
NGNG使ってる人いないのかな…
0530age
NGNGhttp://members.tripod.co.jp/nbz/ref/lambda.html
0531デフォルトの名無しさん
NGNG此の範囲だと、正に Lisp だね。
括弧を補うと直ぐに分かる(w
0532デフォルトの名無しさん
NGNGhttp://wwwfun.kurims.kyoto-u.ac.jp/MtLambda.html
0533595
NGNG0534デフォルトの名無しさん
NGNGというかプログラミング雑誌らしいものがCマガしかない現状は
ちと恥かしいです。他はライブラリの使い方とかそんなんばっかだし。
どうでしょうか?
2chでもおれのようなDQNが関心もつぐらいだからある程度は売れると
思うんだけど。
0535保守age
NGNGやっぱり雑誌になるのは、C/C++、Java、VB、
かろうじてC#、Pascalだろう。
0536デフォルトの名無しさんk
NGNGbitが潰れたぐらいだから半分趣味、半分学術
なんていう雑誌は売れないのかな?
0537デフォルトの名無しさんk
NGNG0538デフォルトの名無しさん
NGNG> 2chでもおれのようなDQNが関心もつぐらいだからある程度は売れると
> 思うんだけど。
2chだからこそこれ程盛り上がって、それでわたしや貴方のようなDQN(?)が興味を持つようになるんだと思う。
0540デフォルトの名無しさん
NGNG素晴らしいです!
ありがとうございます。
0541デフォルトの名無しさん
NGNGscheamでもカリー化みたいなことは、できるみたいです。
クロージャを使ってね。
ttp://srfi.schemers.org/srfi-26/srfi-26.html
0542デフォルトの名無しさん
NGNGHaskell とかのやつより柔軟そうですね。
0543デフォルトの名無しさん
NGNGラッセルの理論からもらってきた概念という知識しかありません。
(これすらも間違ってるかもw)
こういった疑問を解消するためにはどんな勉強をしたらいいのでしょうか?
数学的な理論も必要かもしれませんが、抽象的な話は理解に時間がかかるので
実際に使われている言語を使って説明したような本あれば嬉しいです。
よろしくお願いします。
0544デフォルトの名無しさん
NGNGMLの教科書でいいんじゃない?
あるいは、もうちょっとformalなほうが良ければ
http://www.cis.upenn.edu/~bcpierce/tapl/index.html
とか。
> The approach is pragmatic and operational;
> each new concept is motivated by programming examples
> and the more theoretical sections are driven by the needs of implementations.
なので、そんなに「抽象的」じゃないし。
0545デフォルトの名無しさん
NGNG昔読んだ「データ型序説」って本はよかったよ。
■ このスレッドは過去ログ倉庫に格納されています