12/02/28 01:36:33.12
->の右側に引数を書くのは何かの冗談なんだよね?
HaskellやMLと意味も無く違っててキモイ
40:8
12/02/28 16:01:08.16
>>39
2点、反論する
まずHaskellやMLの中置演算子 -> は、型式の中だけで定義されている
つまり「値の式」と(「型の式」である)型式をごっちゃにした指摘 >>29 はトンチンカンと言える
実際、Standard MLの「値の式」では前置のラムダ構文 fn が使われるし、
Haskellにいたっては、¥記号(バックスラッシュ)というRubyと同様な記号が使われている
【Standard ML(SML/NJ)での実行例】
- (fn x => x + 1) : int -> int; (* コロンの左辺が「値の式」、右辺が型式 *)
> val it = fn : int -> int
次に、すでに>>35で書いたけど、短縮記号の右矢印がキモイ(=不慣れなので読みづらい)のであれば、
Ruby 1.8 の(冗長だけど初心者には優しい)lambda記法を使う事もできる(要は、「慣れ」の問題)
t = lambda { |f, x| f[f[x]] }.curry
x = t[t][t][t][lambda { |x| x + 1 }][0]
結果としてRubyでは、>>8,23,35 そして上記コードという、
プログラマの慣れ/熟練度/用途等に応じた4通りの表現の使い分けが可能になる
41:デフォルトの名無しさん
12/02/28 17:43:41.36
>>40
> まずHaskellやMLの中置演算子 -> は、型式の中だけで定義されている
> つまり「値の式」と(「型の式」である)型式をごっちゃにした指摘 >>29 はトンチンカンと言える
何言ってんだお前?アホなの?
Haskell のラムダ: \x -> x
OCaml のラムダ: fun x -> x
42:デフォルトの名無しさん
12/02/29 00:50:16.18
【消しゴム】MONOを使ってみるスレ4【じゃない】
スレリンク(tech板)
43:デフォルトの名無しさん
12/02/29 04:39:19.32
おまえらruby信者とpython信者の争いは、10年も前にperlが踏襲した道だ
44:デフォルトの名無しさん
12/02/29 04:49:47.26
こうした議論みてると演算子の優先順位とリテラルが
開発効率の邪魔をしているようにさえ思えてくるので、
さっさと人類は言語設計のほとぼりに冷めて、
schemeに統一されちまえとさえ思えてくる
てか、それ他の実装でも動くの?
45:デフォルトの名無しさん
12/02/29 08:01:27.20
lambdaだ、Yコンビネータだいうヤツらをプロジェクトに
寄せ付けないためだけであっても、tclを利用する十分な理由になる
46:デフォルトの名無しさん
12/02/29 08:48:40.69
Tcl8.5にあるapplyはlambdaみたいなもんだろ
47:デフォルトの名無しさん
12/02/29 17:53:55.18
Shemeよくわからんけど
ネットで調べながら書いてみた
(define (t f) (lambda (x) (f (f x))))
(((((t t) t) t) (lambda (x) (+ x 1))) 0)
48:デフォルトの名無しさん
12/02/29 17:54:54.13
Schemeのスペル間違えた
49:デフォルトの名無しさん
12/02/29 22:51:17.74
2→4→16→次は何?
であの数になるってやつだな
この前それがどう展開されていくか考えてた
50:デフォルトの名無しさん
12/03/01 17:59:57.93
Perl5ではこうだろうか?
$t = sub{my $f = shift; sub{my $x = shift; $f->($f->($x))}};
$t->($t)($t)($t)(sub{my $x = shift; $x + 1})(0);
51:デフォルトの名無しさん
12/03/02 00:41:55.32
$$$$$$$$$$$$$$$$$$$$$$$
52:デフォルトの名無しさん
12/03/02 19:12:09.59
例によってちょろっとネットでマニュアルとか調べただけで
Common Lisp版を書いてみた
あってるのだろうか?いちおう65536になるけど
なんかtが組み込みの真値らしいのでaで
(let ((a (lambda (f) (lambda (x) (funcall f (funcall f x))))))
(funcall (funcall (funcall (funcall (funcall a a) a) a) (lambda (x) (+ x 1))) 0))
対応括弧の表示をしてくれるエディタじゃないと大変なのが
よくわかった
53:デフォルトの名無しさん
12/03/02 21:24:26.60
letの代わりにlabelsを使ってみたけれど、あまり変わらなかった。
(labels ((a (f)
(lambda (x)
(funcall f (funcall f x)))))
(funcall (funcall (funcall (funcall (a #'a) #'a) #'a)
(lambda (x)
(+ x 1))) 0))
こういうときはSchemeとCommon Lispの関数・変数の名前空間の違いが強調されるなあ。
54:デフォルトの名無しさん
12/03/02 21:48:43.06
糞スレ
55:デフォルトの名無しさん
12/03/03 00:02:10.33
これで勝つる(´・ω・`)
PHP 5.4 がついにリリース ― Web を高速に!
URLリンク(japan.internet.com)
56:デフォルトの名無しさん
12/03/03 01:38:26.90
January 9, 2012: Extensibility support using Guile
URLリンク(www.gnu.org)
57:デフォルトの名無しさん
12/03/03 18:43:09.18
Luaで書いてみた
t = function(f) return function(x) return f(f(x)) end end
t(t)(t)(t)(function(x) return x+1 end)(0)
58:デフォルトの名無しさん
12/03/05 22:37:00.46
schemeが一番分かりやすい。rubyが一番糞。
59:デフォルトの名無しさん
12/03/06 08:09:59.27
いまだにこんな>>28うんこパーサ使ってるRubyって...