【Perl,PHP】LLバトルロワイヤル21【Ruby,Python】at TECH
【Perl,PHP】LLバトルロワイヤル21【Ruby,Python】 - 暇つぶし2ch2:デフォルトの名無しさん
12/02/23 22:45:51.27
URLリンク(news.mynavi.jp)

IDC Japanは2月6日、国内企業に対して2011年12月に実施した「国内ソフトウェア
開発者の実態調査」に関する調査結果を発表した。

これによると、ソフトウェア開発者がスキルを有する言語とその中で最も使用
している言語として多くの回答を集めたのは、上から「C言語」「Visual Basic」
「Java」「C++」「COBOL」と、上位5位まで共通する結果となった。

スクリプト言語であるPerl、PHP、Python、Rubyについては、PerlのほうがPHPと
比べてスキルを有する開発者が多いが、最も使用している言語ではPHPがPerlを
上回っていることがわかった。

(図)
URLリンク(news.mynavi.jp)


3:デフォルトの名無しさん
12/02/24 00:20:14.19
原発事故への対応を見ても判る通り
国内の調査機関は全くあてにならない

4:デフォルトの名無しさん
12/02/24 03:36:20.70
How To Become A Hacker
URLリンク(cruel.org)

もしコンピュータ言語をなにも知らないなら、まず Python から始めることを
おすすめします。設計がきれいだし、ドキュメントもしっかりしているし、
初心者にもそこそことっつきやすくできています。でも入門言語として最適でも、
おもちゃではありません。強力で柔軟で、大きなプロジェクトにもじゅうぶん
対応しています。

Java もプログラミングを学ぶにはよい言語です。 Python よりはむずかしい
ですが、できるコードは Python より高速です。二番目の言語としてはとても
すぐれていると思います。

本気でプログラミングをするなら、C を勉強するしかありません。これはUnix の
中核となる言語です。C++ は C と密接な関係にあります。片方を知っていれば、
もう片方を学ぶのはそんなにむずかしくありません。が、どっちも真っ先に
勉強しようとするのには向いた代物ではありません。


5:デフォルトの名無しさん
12/02/24 03:53:34.64
オブジェクト指向を学ぶにはどの言語がよい?
URLリンク(capsctrl.que.jp)

(前略....)選択肢とは、RubyとPythonのことです。両言語とも、動的型言語です。
静的型言語と一緒に使えるようになってれば便利だと思います。どちらも大変便利な言語です。
ちょっとしたスクリプトで自動化して解決するような仕事はたくさんあります。
技術者たるもの、1つくらいはスクリプト言語を隠し持っているべきですね。

どちらの言語を選んでも構いません。個人的には、Rubyが気に入っていますけど。
広く使われている(かつ利用可能な)のはPythonですし、
Rubyはより純粋なオブジェクト指向ですので(学ぶのには最適です)
私にとってみれば、すがすがしい感じがします。 あと、
Rubyにはブロック(コード群を簡単にオブジェクトとして扱う機能)がありますね。
ブロックは強力なプログラミングツールで、コードの構造化についての多くの考え方を
学ぶことができます。他のやり方だと、なかなかこうはいきません。
関数型言語の入門用にも良いですね。

6:デフォルトの名無しさん
12/02/24 03:58:59.54
>>5のURLを訂正

オブジェクト指向を学ぶにはどの言語がよい?
URLリンク(capsctrl.que.jp)

7:デフォルトの名無しさん
12/02/24 07:45:42.43
前スレのお題をコピペ

 992 名前: デフォルトの名無しさん Mail: sage 投稿日: 2012/02/23(木) 18:17:51.40
 >>981
 ふーん。じゃあ関数型プログラミングのお題(コード例はHaskell)

 t f = f . f
 x = t t t t (+ 1) 0

 高階関数を素直に書けるなら余裕でしょ

 993 名前: デフォルトの名無しさん Mail: sage 投稿日: 2012/02/23(木) 18:41:46.47
 >>992
 Python

 def t(f): return lambda x: f(f(x))
 x = t(t)(t)(t)(lambda x: x + 1)(0)

 994 名前: デフォルトの名無しさん Mail: sage 投稿日: 2012/02/23(木) 19:10:22.69
 >>992
 OCaml

 let rec t f x = f (f x)
 let x = t t t t ((+) 1) 0

8:デフォルトの名無しさん
12/02/24 07:49:34.63
>>7
Ruby

t = lambda { |f| lambda{|x| f.call(f.call(x)) } }
x = t.call(t).call(t).call(t).call(lambda { |x| x + 1 }).call 0

9:デフォルトの名無しさん
12/02/24 07:54:25.34
>>7
Standard ML

fun t f = fn x => f (f x)
val x = t t t t (fn x => x + 1) 0


対話環境での実行結果

- fun t f = fn x => f (f x);
> val rec t = (fn f => (fn x => (f (f x))))
- val x = t t t t (fn x => x + 1) 0;
> val x = 65536

10:デフォルトの名無しさん
12/02/24 08:14:53.20
はよwww結論はよwwww

11:デフォルトの名無しさん
12/02/24 08:22:07.11
根本的にどこがLLなのか分からない

12:デフォルトの名無しさん
12/02/24 08:36:29.51
>>8
Rubyはcallがうざすぎる

13:デフォルトの名無しさん
12/02/24 08:41:55.57
このお題の奴って前スレでrubyは関数型プログラミングに向いてるとか
pythonに有利なことはしないとか言ってた奴だろ?

何がしたいの?

14:デフォルトの名無しさん
12/02/24 08:43:41.61
どう見てもrubyをdisりたい基地外がやってるだけだろwwwwwwwwww

15:デフォルトの名無しさん
12/02/24 09:43:55.31
>>10
(Ruby は Python よりも)関数型言語の入門用に良いですね。 -- by Martin Fowler (>>5)

16:デフォルトの名無しさん
12/02/24 10:49:25.12
>>15
どこがいいの?ちゃんと説得力のあるお題出せよw

17:デフォルトの名無しさん
12/02/24 12:41:06.05
>>15
Ruby(>>8)はcallが冗長な上に
メソッドは直接t.callの引数にできないからlambdaなどで包む必要がある

def add1(x) x + 1 end
x = t.call(t).call(t).call(t).call(lambda { |x| add1(x) }).call 0

こんなので関数型とかマゾすぎるわ

18:デフォルトの名無しさん
12/02/24 13:07:33.08
>>17
先生、質問があります!!
>>17のコードを実行したところ、Rubyから怒られました

undefined local variable or method `t' for main:Object (NameError)

何が悪かったのでしょうか?

19:デフォルトの名無しさん
12/02/24 13:23:21.60




20:デフォルトの名無しさん
12/02/24 13:27:16.56



>>17


21:デフォルトの名無しさん
12/02/24 16:15:39.21
>>18
エラーメッセージが読めるなら自明だろ?

あ、Ruby信者は英語が読めないんだったねwww

22:デフォルトの名無しさん
12/02/24 16:17:12.41
もう 2ch はひといない

23:デフォルトの名無しさん
12/02/24 17:33:02.97
x=(t=->f{->x{f[f[x]]}})[t][t][t][->x{x+1}][0]
p x


Rubyの効率がわからないバカは
一生効率の悪い言語を使っていればいいのに

変数に$のついてる言語や
末尾にデリミタのついてる言語でコンパイルエラーをだすのが大好きで
Ruby特有のmix-inの利点やRuby特有のイテレータの使い方すらわからないレベルならば
一生そこではいつくばって分厚いの隙間からわずかに見せる光を掴もうともがいていれば良い


「バカは効率を理解しない」

だからC言語が完成してからRubyが出来上がるまでここまでの年月がかかり、
Rubyですらこのレベルでとまっている
周りがいつまでたっても効率を理解せず、Rubyに協力しないでJAVA,PHPみたいなゴミカス言語ばかりを成長させるから

教えてくださいと乞えば教えてやる 学習意欲すらないゴミカスに明日はない

24:デフォルトの名無しさん
12/02/24 18:25:17.04
バカだなお前ら。次の10年は統計分析だ。
URLリンク(www.publickey1.jp)
clojure script+html5で機械学習なり古典AIなりを応用した
スマホアプリ作っときゃ、どれか1つぐらい当たるだろ

25:デフォルトの名無しさん
12/02/24 18:31:25.70
統計分析をクソ遅いLLでやる理由がない
つまりスレ違い

26:デフォルトの名無しさん
12/02/24 18:37:22.17
必要な所だけNumPyでもなんでも使えばいいだろ

27:デフォルトの名無しさん
12/02/24 18:37:39.25
Rもmatlabもインタプリタなんだから広義のLLに含まれるだろ
最尤ほげほげを求めるのに動的計画法なり再帰的な式が含まれるぞ
だいたい金融なんかはhaskell/ocamlなんかの関数型が使われてんだろ?

28:デフォルトの名無しさん
12/02/24 18:42:19.06
>>23
Rubyのパーサは複雑過ぎて意味分からん世界に突入してるな

->x,y{x+y}
->(x,y){x+y}
->x,y {x+y}
->(x,y) {x+y}
-> x,y{x+y}
-> (x,y){x+y}  # これだけ syntax error

29:デフォルトの名無しさん
12/02/24 18:42:42.73
pythonで、どうやって職にありつくんだよwwwww
大学まで出て、python(キリッ)ruby(ドヤッ)なんてしてたらニート一直線だろ

30:デフォルトの名無しさん
12/02/24 18:52:30.34
いたのかuy

31:デフォルトの名無しさん
12/02/24 18:57:25.90
uyや、ちんこ(akira develop)とかいった糞コテではないが、
このスレをお気にいりに入れてたら気が付くと同じ運命を辿ってた

このスレにいる大学生たちに同じ運命(ニート)を辿る呪いをかけたお

32:デフォルトの名無しさん
12/02/24 19:13:57.81
末尾デリミタwとかいうバカがuy以外にいるのか?

33:デフォルトの名無しさん
12/02/24 19:25:55.27
末尾デリミタwに類似したボットならPerl忍者とかいう痛コテだな
ちんこ(akira develop)を知らないのは新参だって、ばっちゃが言ってた。
当時、ちんこに就職のアドバイスをしてたPGは、
cでコンパイラ/OSなりを書いといた方が採用時の受けが良いってレスしてたぞ。

俺からのアドバイス。現役の大学生は夢なんて見ずに公務員試験うけとけ。

34:デフォルトの名無しさん
12/02/24 21:35:08.18
ちんこ = akira develop = 神オブジェクト

35:8
12/02/27 14:08:56.34
>>23
>>23のカキコが原因で、いきなりスレ進行が止まってしまったように見えるのは気のせいだろうか....w

この>>23のコードは、(Ruby 1.8向けに書かれた)>>8をRuby 1.9の新しい記法へ書き換えたものだね
これなら>>12,17のRuby批判は当てはまらず、見事な反論となっている
また、Ruby 1.9でも>>8の(冗長だけど初心者には優しい)コードがそのまま動く事も利点(=後方互換性)

あえて>>23を改善すると、 [a] (無理に)1行へまとめず、[b] (適度に)空白を入れ、[c] カリー化を使う

t = -> f, x { f[f[x]] }.curry
x = t[t][t][t][-> x { x + 1 }][0]

これとPythonコード(>>7)とを比較してみれば、コードの簡潔さに何の遜色も無い事が分かる

=== 結論:今回の お題「関数の部分適用」について、PythonとRubyに決定的な差異は無い ===

36:デフォルトの名無しさん
12/02/27 16:14:38.78
明らかにrubyの方が劣っているが

37:デフォルトの名無しさん
12/02/27 19:29:40.79
>>35
23のきもいコードよりましだね。

38:デフォルトの名無しさん
12/02/27 23:45:46.97
>>36
Python信者さんチース

39:デフォルトの名無しさん
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って...


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch