[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 14:42 / Filesize : 221 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【Perl,PHP】LLバトルロワイヤル4【Ruby,Python】



1 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 03:18:33 ]
最強のLL=軽量プログラム言語は、どれよ?

エントリーは、
Perl、PHP、Python、Ruby、JavaScript・・・
さあ、死ぬまで語りやがれ!!!

361 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 12:18:04 ]
パイソンからジャバののちCかルビーからジャバののちCを学ぶルートがよいとありましたので
この二つから選んだ次第です

362 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 12:34:04 ]
何のルートだw
趣味なら何でもいいんじゃないか。


363 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 12:54:45 ]
>>359
重要なのは中身さ。
英語ふくめればPythonの濃さは異常だぞ!

濃さ(マニアックさ?)で言えば最強はperlだと思うけどw

364 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 13:02:14 ]
真にディープなPerl信者は、言語の汚さをどれだけ指摘しても、
全部受け止めた上で「だがそれがいい」って自然体で言ってのけるからな。
指摘に対して必死になりがちなRuby信者やPython信者には無い強さがあるw

365 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 13:02:31 ]
>>361
やるならforthをやれ

366 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 13:02:33 ]
basic->asm->Prolog->FORTRAN->Pascal->Lisp->C->PL/I->C++->Smalltalk->Objective-C->Java->Perl->Ruby->PHP->Python->C#->JavaScript<-いまここ

367 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 13:03:07 ]
ああforthもやったわ

368 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 13:21:07 ]
やはりパイソンは良いですか
私も読みやすいというのは大きな利点じゃないかとは思ったんですよね
すでにあるものをもう一度一から作るような真似は避けろともありましたし

369 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 14:24:48 ]
俺のスクリプトのルート
PHP→Python←いまここ
PHPから入ると組み込み関数に頼りすぎて他の言語をやる時に散々なことになる。



370 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 14:25:04 ]
Pyは初心者にとっては字下げ矯正箸だな
あのインデントが総てにおいて正しい、とまでは流石に言わないが
かなりの場面で通用する、それなりに正しいインデントが身につく

371 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 17:21:39 ]
いや、そもそもインデントもろくにできないなんて
プログラムできるとかいう以前の問題だろ

俺のスクリプトルート
BASIC→C→C++→VB→VBA→Perl→PHP←いまここ
文字列関数とか連想配列とかどんだけ便利(ry

372 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 18:29:08 ]
BASIC->C->sh,awk,sed->elisp->Perl->Tcl->Python->Ruby->Java<-今ココ
インデントって...。どんなエディタつかってんだよ
作りたいものがないのに入門したいなら、Cとscheme。異論は認めない。

373 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 19:11:28 ]
>>372
まあプログラムがどう実行されるかを理解するなら両者が基本だよね。
それ以前のプログラミング手習いの段階なら多分Py,R,JSあたりで打鍵に抵抗なくした方がいいが。

374 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 09:36:59 ]
レンタルサーバーならさくらインターネットがパイソンもルビーも対応してるようですが
どなたかご利用の方いらっしゃいましたら使用感を教えてください

375 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 09:43:31 ]
レンタル鯖板いけ

376 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 09:44:33 ]
RubyもPythonも、インタープリタとして使うだけなら使用感も何もないのでは。
バージョン通りの動きをするだろ。

WEBシステムの実装言語として使うなら、本体よりもむしろFastCGIやmod_**の方の
設定の可否などが大きいはず。そういうことを聞いてるのかな?

377 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 09:46:38 ]
>>374
レンタルサーバの使用感ならhosting板、
CGIのバックとしての使用感ならwebprog板で訊いて下さい。

378 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 13:54:25 ]
以下の内容は、某スレに書き込んだものなんだけど、自分には結構面白いやり
取りになったので、いろんな言語でやってみたくなった。

ある大きな連想配列から、いくつかのキーを持つ要素だけを取り出した、部分
連想配列を作りたい。

// PHP版
$request = array('hoge'=>1, 'fuga'=>2, 'piyo'=>...
//これからキーが hoge, fuga の物だけを取り出すとすると、

foreach (array('hoge', 'fuga') as $param) {
$a[$param] = $request[$param];
}

これ、いろんな言語で、なるべく簡潔に書くにはどうしたらいいだろう?


379 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 14:11:16 ]
>>378
Perlで
my %request = ('hoge'=>1, 'fuga'=>2, 'piyo'=>3);
my %a = (); my @keys = ('hoge', 'fuga');
@a{@keys} = @request{@keys};

ググってサンプルを見ながら適当に。なんかおかしいorもっと簡潔に書けるかも。



380 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 15:00:14 ]
>>379
Perl って、
・連想配列の引数に、配列を与えられるのか。すげー。
・変数名のプレフィックスが型によって違うから、目がちかちかするのう。

Perl講座 2章 [変数]
www.site-cooler.com/kwl/perl/2.htm


381 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 15:02:53 ]
ちなみに、ほかに書き込んだのは

PHP@プログラム板
pc11.2ch.net/test/read.cgi/tech/1232712334/341-

Pythonのお勉強 Part32
pc11.2ch.net/test/read.cgi/tech/1234716330/275-

382 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 15:07:09 ]
JavaScriptは多分愚直にループするしかないかな?
Rubyはなんかメソッドうにょうにょでできそうだけど、俺は知らね。

383 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 15:08:14 ]
>>380
配列周りでぼんぼことフラット化する癖は……

384 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 15:32:05 ]
バベル案内
www.aoky.net/articles/steve_yegge/tour_de_babel.htm

> Perlは夏の台湾の通りの上で破裂したマッコウクジラだ。はらわたがそこら
> 中に飛び散って、車や自転車や歩行者を覆っている。それがPerlだ。本当に
> チャーミングだ 。
(略)
> Perlがリスト処理をできないのは、リストを自動的に平坦にするという救い
> がたく愚かな決断をラリーが初期にしたことによる。そのため(1, 2, (3,
> 4))は不思議なことに(1, 2, 3, 4)に変わってしまう。あなたはこんな風になっ
> てほしいと思ったことはないだろう。しかしラリーがある日たまたま何かの
> 問題でそうなるのが都合が良かったため、それ以来Perlのデータ構造はまっ
> たくの破裂したクジラとなってしまったのだ。


385 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 15:38:56 ]
>>384
釣れますか?

386 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 15:55:14 ]
Rubyをよく知らない俺様が通りますよ。

irb(main):001:0> request = {'hoge'=>1, 'fuga'=>2, 'piyo'=>3}
=> {"fuga"=>2, "hoge"=>1, "piyo"=>3}
irb(main):002:0> a = {}
=> {}
irb(main):003:0> ["hoge", "fuga"].map{|x| a[x] = request[x]}
=> [1, 2]
irb(main):004:0> a
=> {"fuga"=>2, "hoge"=>1}

これではforループがmapに変わっただけだな。

387 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 16:20:28 ]
Rubyは中途半端な私が通りますよ。
request = { 'hoge' => 1, 'fuga' => 2, 'piyo' => 3 }
keys = ['hoge', 'fuga']
a = Hash[*keys.zip(request.values_at(*keys)).flatten]

388 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 16:26:37 ]
>>387
*keys の * ってなにをするものなの?
良かったら教えて。ググりようがないので。

389 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 16:38:22 ]
>>388
中を展開すると理解してる。ちょっと違うかもしれないけど。
こうすると分かりやすいと思う。
p [1, 2, 3]
p *[1, 2, 3]



390 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 16:53:46 ]
グモ

391 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 16:56:04 ]
>>389
ごめん、やっぱりよく分からない。
p *[1, 2, 3] は動くけど、
*[1, 2, 3] は動かない。どうなってるの?

リファレンスのどこに載ってるか、教えてもらえるととてもうれしい。

www.ruby-lang.org/ja/man/html/

392 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 16:57:47 ]
メソッド呼び出し のところ

393 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 17:40:45 ]
>>392
> メソッド呼び出し のところ

そういうことか!やっとわかった。ありがとう。
メソッド呼び出し - Rubyリファレンスマニュアル
www.ruby-lang.org/ja/man/html/_A5E1A5BDA5C3A5C9B8C6A4D3BDD0A4B7.html

ちなみに Pythonだと、* で配列の展開、** で連想配列の展開になる。

>>> def hoge(a, b, c):
... return a

>>> hoge(*['a', 'b', 'c'])
'a'
>>> hoge(**{'a':1, 'b':2, 'c':3})
1
4. その他の制御フローツール
www.python.jp/doc/release/tut/node6.html#SECTION006720000000000000000

なるほどRubyにもあったのか。

正直に言うと、Hash[], Enumerable#zip, Hash#values_at とか、全部知らなかった。
Rubyってホントにメソッドが山盛りだな。
まあ俺が無知なだけか。

394 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 17:42:26 ]
>>391
>>392さんの通り。
www.ruby-lang.org/ja/man/html/_A5E1A5BDA5C3A5C9B8C6A4D3BDD0A4B7.html

多重代入でも最後のメンバー限定で展開できたり。

a, b, c = [1, *[2, 3]]
p a, b, c

www.ruby-lang.org/ja/man/html/_B1E9BBBBBBD2BCB0.html#a.c2.bf.bd.c5.c2.e5.c6.fe

多重代入の左辺と、メソッドの仮引数で意味が変わったりする謎アイテム。

395 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 17:44:06 ]
ぐは。

396 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 18:00:39 ]
交代リストからハッシュを作れるRubyの仕様は、古き良き時代のLISPの香りが
するような。


397 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 18:21:30 ]
静的型の言語はお呼びじゃないか。
標準ライブラリのtemplateをひっかきまわすのは面倒そうなのでこれで。

int[string] request = ["hoge":1, "fuga":2, "piyo":3];
auto keys = ["hoge", "fuga"];

typeof(request) result;
foreach(i; keys) if(i in request) result[i] = request[i];

398 名前:デフォルトの名無しさん [2009/03/02(月) 18:51:45 ]
>>397
何かと思ったが、これは C++0x か!
すげえ、こんな風に書けるようになるのか!

399 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 19:09:04 ]
しかしロジックは>>378のforループと変わっていないんだな。



400 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 19:22:37 ]
いや、D。
0xだとdecltypeだったりstd::for_eachだったりunordered_mapだったりすると思うわけだが。
ロジックはまるっきり同じ。
組み込みの連想配列を持っていてfor .. in相当の構文がある言語ならなんでもこの形式で書けるんじゃないのかな

401 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 19:25:21 ]
やった、RubyのEnumerable#injectで書けたよママン。

['hoge','fuga'].inject({}){|x, y| x[y]=request[y]; x}

402 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 19:40:53 ]
Ruby の inject が使えるなら Python の reduce も使えるはずだ。

def func(x, y):
    x[y]=request[y];
    return x

reduce(func, ['hoge', 'fuga'], {})

なんで無名関数使わないのかって?
Pythonのlambdaは代入とかできないんだようるせえな。
いいんだよPythonでは名前空間の不足に困ったりしないから。
あと何でも一行で書こうとするのは悪い習慣。

403 名前:デフォルトの名無しさん [2009/03/02(月) 19:56:39 ]
>>400
> いや、D。
なんだそうか。C++に連想配列リテラルが組み込まれたかと思って驚いちゃった
よ。恥ずかしいな。

D vs C++0x - プログラミング言語 D 2.0
www.kmonos.net/alang/d/2.0/cpp0x.html#initializer-lists


404 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 19:59:17 ]
ちんこ

405 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 20:10:25 ]
どれも別に短くはなっていない件について。

406 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 20:17:38 ]
わざとキモく書いてみるテスト
$request = @{hoge=1; "fuga"=2; 'piyo'=3}
$a = @{};
echo hoge,'fuga' | % { $a.$_ = $request[$_] }

407 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 20:22:05 ]
>>402
dict(reduce(lambda x, y: x + [(y, request[y])], ['b','c'], []))

408 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 20:24:01 ]
dict(reduce(lambda x, y: x + [(y, request[y])], ['hage','fuga'], []))

409 名前:402 mailto:sage [2009/03/02(月) 20:36:40 ]
>>407-408 まいりました。おまい頭いいな。



410 名前:デフォルトの名無しさん [2009/03/02(月) 20:40:14 ]
どれも大体分かるけど、>>406 だけ全然分からん。

411 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 20:40:26 ]
何でも一行で書こうとするのは悪い習慣

412 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 20:53:22 ]
python の dict って hoge.append('key', value) みたいなこと出来ないんですか?

413 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 21:00:10 ]
>>406は言語すらわからん。
Perlっぽいが、動くとは思えん。これ何?

414 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 21:00:57 ]
>>412
知らんけど、無さそうだね。
hoge['key'] = value じゃ駄目?

3.8 マップ型
www.python.jp/doc/release/lib/typesmapping.html



415 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 21:03:00 ]
>>407-408
最後にdictを使うのなら、injectじゃなくて、リスト内包表記やmapの方が素直
じゃね?Python本スレではそうなってた。


416 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 21:07:51 ]
>>410,413
PowerShellですよ
どうせならはっきりキモイと言ってくれても私は一向に構わん
% は Foreach-Object というコマンドのエイリアスで
ハッシュテーブルへは配列表記プロパティ表記どちらでも可能なのでこんな感じでキモく書けます

417 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 21:16:02 ]
>>412
{}.__setitem__(k, v)

418 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 21:16:44 ]
>>412
>>414
hoge.__setitem__(key, value)

無理やりreduceで書くなら例えば
reduce(lambda d, x: d.__setitem__(x, request[x]) or d, ['hoge','fuga'],{})
こんな書き方になると思うけど、Python使いはこの例を普通こんな風には書かない

dict((k, request[k]) for k in ['hoge','fuga'])
のほうがずっと素直で短く読みやすいからね

419 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 22:00:38 ]
>>416
なるほど、キモいけど面白れー!



420 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 22:15:29 ]
>>418
内包記法はうらやましい

421 名前:341 mailto:sage [2009/03/02(月) 22:30:41 ]
なんか、このスレでも結構盛り上がったかな。ありがとうございます。

ちなみに元の言語であるPHPにも、forループしかないわけじゃなくて、むやみ
やたらと沢山のarray関連関数がある。
jp2.php.net/manual/ja/book.array.php

これを利用したら簡潔にならないかと思ったんだが、

array_intersect_key($request, array_flip(array('hoge', 'fuga')));

関数名の長いせいもあって、どうも垢抜けないのう。

422 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 22:47:33 ]
Python人口多いな。
Perl とか Ruby とか、もっと面白いことできないの?

423 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 22:52:03 ]
「面白いこと」を定義してください

424 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 23:00:41 ]
じゃ、Rubyで。>>387とあんまり変わらないか。
Hash[*['hoge','fuga'].map {|x| [x, request[x]]}.flatten]

個人的には、リスト内包表記より、Rubyのmapとブロックのほうが好きだな。


425 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 23:06:06 ]
>>423
Rubyはさておき、Perl だったら、とにかく変態的なことをしてほしい。
ほかの言語だったらありえないようなこと。

426 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 23:13:37 ]
>>423
pc11.2ch.net/test/read.cgi/tech/1231856193/412
>中二設定豊富

427 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 23:15:50 ]
>>425
>>379の縦横無尽の記号乱舞リスト展開くらいではまだ足らんと申すか

428 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 23:21:58 ]
>>427
いや、逆。あれで火がついちゃった。Perlすげえ。
もっと何か見せてほしい。

429 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 23:26:58 ]
目的と手段を取り違えている典型的な例だな



430 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 23:30:32 ]
>>424
> 個人的には、リスト内包表記より、Rubyのmapとブロックのほうが好きだな。

ブロック内に複数行でも書けるから、凝ったことがやりやすいよね。

Pythonのリスト内包表記だと、長くなるとだんだん読み書きしづらくなる。
そのうち業を煮やして、手作業でforループに書き換えることに。
そのときの面倒さと言ったら。
これって俺だけ?

431 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 23:31:11 ]
つってもありゃイディオムだしな。
リファレンスでごちゃごちゃしたって簡潔にも面白くもならんだろうし。
他の例のようにループ(?)にするとこんな感じかな。

my %a = map { ($_, $request{$_}) } ('hoge', 'fuga');

432 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 23:31:22 ]
perlのハードルがあがっているところ普通で申し訳ないが
面白そうなので俺も書いてみた。
for(keys %request){if(/hoge/||/fuga/){$r{$_}=$request{$_};}}
grepで出来んかな

433 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 23:32:24 ]
>>429
ええそうです。手段のためなら目的を選びませんとも!


434 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 23:43:30 ]
あー、やっと気づいた。>>407-408って、Schemeとか関数型言語で多用される
「継続渡し」スタイルだ。
だから副作用の書けないPythonのlambdaでも、ちゃんと結果を累積できるんだ。


>>426
Haskell わかんないから君が書いてよ。

435 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 23:45:22 ]
>>431>>432を合わせて無理矢理grepも使ってみた

my %a = map {$_, $request{$_}} grep {/^hoge|fuga$/} keys %request;

436 名前:デフォルトの名無しさん [2009/03/02(月) 23:58:08 ]
Perlにはgrepなんて関数があるのかよ!
すげえ、もう意味が分からない。

437 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 23:58:43 ]
>>435
おお、さすがム版!
grep版がすぐに出てきて、個人的に満足した。ありがとう。

438 名前:378 mailto:sage [2009/03/03(火) 01:45:34 ]
そろそろ投稿も落ち着いたかな。
実はオチに使おうと思って用意していた言語がある。

R。R言語やGNU Rとも呼ばれる、統計用ベクトル言語。基本的にすべてのデータ
がベクトル。

> request <- c(hoge=1, fuga=2, piyo=3)
> request[c('hoge', 'fuga')]
hoge fuga
   1    2

ご覧の通り、変数の添え字にベクトルを与えられるので、きわめて簡潔、と言
うかそのまんまに書ける。これ以上簡潔というと、話に聞くAPLぐらいしか思い
つかない。まあAPLに連想配列があるか知らんけど。

--
プログラミング言語というものは、使用目的が固定された場合、
ライブラリ → フレームワーク → DSL
という形で進化していくものだと思う。効率ではDSLが最高で、汎用言語は絶対
に追いつけない。例えば、RDBをSQLじゃなくてCで直接操作するのは鬼のように
大変。

しかしDSLは、習得は容易だが自由度が低くて、やろうとしたことができないこ
とも多い。だから一般的に、人気の出たDSLはだんだん汎用言語化していく。
PL/SQLとか。R なんか、行き過ぎるくらい汎用言語化している。

つうことで、言語の進化には、汎用言語<-->専用言語の逆向きの流れが同時に
存在していて、人が言語の良し悪しについて議論する場合、どっちを重視する
かが人によって違うのが、話のかみ合わない一因じゃないかなと思っている。


439 名前:378 mailto:sage [2009/03/03(火) 01:54:26 ]
とは言うものの、いきなり>>379で Perlが添え字に配列を与えられることを教
えられて、用意した結論がいきなり疑わしくなってしまった。Perlは存在が反則。

つうことで、いろんなコードが見られて自分は面白かったです。皆さんありがとう。



440 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 02:42:39 ]
request[c('hoge', 'fuga')] で値だけじゃなくキーも返すっていうのは良いのか悪いのか

441 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 02:45:32 ]
>>434
なんかよくわからんこと書いてるな。

fold, inject, reduce 自体が継続渡しスタイルなんだよ。

>>407は、副作用無しに作れて、あとで連想配列に変えられるような
処理結果の累積方法を見つけたのが偉いの。

あとこれは、連想配列にある要素を加えた結果を作る式が、たまたまPythonには
なかったというだけの話。それをlambdaで与えれば、dictは要らなかった。


442 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 03:04:48 ]
>>440
> request[c('hoge', 'fuga')] で値だけじゃなくキーも返すっていうのは良いのか悪いのか

問題ない。
キーを持つベクトルと、持たないベクトルとで、そのまま演算できるから、
値だけの場合と同様に扱える。

> (c(hoge=1, fuga=2) + c(10, 20))
hoge fuga
  11   22


443 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 03:09:09 ]
あれ、なんか全体にカッコがついてしまった。とりあえず別に要らない。
c(hoge=1, fuga=2) + c(10, 20)

444 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 03:18:45 ]
>>442
あー、いわゆる"配列"と"連想配列"を差別しないのが"ベクトル"なわけかな

445 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 03:47:46 ]
>>444
まあそんな感じ。

もう少し言うと、ベクトルは基本的には、自然数が添え字の単なる配列。
だけど「キー」を付けると、キーの値でも要素にアクセスできるようになる。
連想配列としては擬似的なもの。

だから、「キー」(正確には「name属性」)を持つベクトル同士を足すと、
> c(hoge=1, fuga=2) + c(fuga=10, piyo=20)
hoge fuga
11 22

単に要素の順番で足されて、後者のname属性は結果には残らない。
この辺はちょっとガッカリ?

真に配列と連想配列をうまく統合したのは、PHPだと思う。

446 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 04:56:46 ]
>>438
無駄に汎用言語化するという流れは、まああるだろうね。
PerlとPHPは別にオブジェクト指向なんか実装する必要はなかったと思うし、
まあ実際無理に汎用言語化された機能の使われ方も微妙。

447 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 06:15:54 ]
>>445
SQLのUNIONみたいなもんですかね

448 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 21:24:22 ]
配列の添え字に配列渡せるって割と珍しいの?
多重代入くらいにはメジャーだと思ってた

449 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 23:58:33 ]
>>445

>もう少し言うと、ベクトルは基本的には、自然数が添え字の単なる配列。
>だけど「キー」を付けると、キーの値でも要素にアクセスできるようになる。
>連想配列としては擬似的なもの。

擬似ハッシュ(Pseudo-Hash)なら、Perlにもv5.005の頃からあったけど、
そのデータ構造上、メモリ効率やパフォーマンスに悪影響があるということで、
v5.9.5で廃止された。これ豆



450 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 11:57:12 ]
>>449
Perlってほんとに何でもあるなあ。
Perlの言語仕様って、それ以外の言語全部を合わせたぐらいあるんじゃないか?

あ、C++があるか。あれもC++以外の言語の仕様を全部合わせたぐらいあるな。

451 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 11:58:39 ]
>>448
> 配列の添え字に配列渡せるって割と珍しいの?
> 多重代入くらいにはメジャーだと思ってた

よかったらPerl以外にどんな言語があるか教えてよ。

452 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 12:13:50 ]
>>441
おおむね同意だが、ちょっとコメントしますよ。

> あとこれは、連想配列にある要素を加えた結果を作る式が、たまたまPythonには
> なかったというだけの話。それをlambdaで与えれば、dictは要らなかった。

それ一応Pythonにあるだろ。
>>418氏が d.__setitem__(x, request[x]) or d って書いてる。
だから実際、418の1つ目のコードは、reduceだけで済んでてdictはない。

まあ __setitem__()とかの演算子の定義のためのメソッドを直で呼んだり、そ
れを or でつなげたりというのは、Pythonでムリクリにワンライナーを書くた
めのバッドノウハウで、418氏の言うとおりおすすめできない。

西尾泰和のブログ: Pythonでワンライナーを作成する際のノウハウ集
www.nishiohirokazu.org/blog/2006/08/python_12.html

6.7 operator -- 関数形式の標準演算子
www.python.jp/doc/release/lib/module-operator.html


453 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 12:34:27 ]
R の最大の欠点の一つは、ググりにくいこと。
しかし最近は r 1文字で結構出てくるようになった。

統計処理ソフト R 入門 講習会資料
androids.happy.nu/doc/r-intro-lecture
(なんか落ちてるんでGoogleキャッシュ)
72.14.235.132/search?q=cache:http://androids.happy.nu/doc/r-intro-lecture&hl=ja&strip=1

R-Tips
cse.naro.affrc.go.jp/takezawa/r-tips/r.html

Rの入門や言語仕様など
cran.r-project.org/doc/contrib/manuals-jp/

R言語 - Wikipedia
ja.wikipedia.org/wiki/R%E8%A8%80%E8%AA%9E

RjpWiki - RjpWiki
www.okada.jp.org/RWiki/


454 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 14:17:15 ]
>>450
> Perlってほんとに何でもあるなあ。
同意。あと、これからの言語って、何か売りが無いと消えていくかも。

・あると便利なもの全部詰め合わせ。
・最小限の部品と糊を容易するからあとは自分で。
・特定ニーズに特化(統計処理など)
・1分で始められるお手軽言語
・豊富な過去の資産

ただ、プログラミングの自動化、ハードウェア化が進むと上記の売りも絶対的なものじゃなくなりそうだ。

455 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 18:51:40 ]
>>451
代入式では使えないけど、PowerShellでも参照はできた

456 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 19:23:35 ]
Perlは何でもアリなのは良いんだが、すぐに記号だらけになるのがなぁ。
MSのパスワードチェッカーにワンライナー打ち込んだら強度:最強とか出たんですけど。

457 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 19:54:04 ]
大体どの言語のワンライナーでも強度は最強だろw

458 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 00:54:03 ]
>>457
APLのワンライナーなら99%のクラッカーは入力すらできないだろうから安心?

>>453
Rは下手にループ書くと速度激減だからベクトル化で頭ひねるよね。
きれいにベクトルに落として応答が瞬間で戻るようになると気持ちいい。

459 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 10:25:28 ]
>>402
> あと何でも一行で書こうとするのは悪い習慣。

普通にRubyプログラム組んでて
 ↓
あれーこれ、どうやるんだっけな
 ↓
irbで試行錯誤
 ↓
ヤッター1行でできたよーー!
 ↓
プログラムにコピペして、コミットする
 ↓
後から見て何やってるかわからん orz

と言う流れがよくあるwww



460 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 10:36:17 ]
RubyはDSLが生まれやすいんだけど、
DSLができて流行って使おうとする時にエディタ支援が効かなかったりして泣ける・・・

Rakeとか、Rspecとかさー。
今は大分使えるけど。

しかし、今使ってみてるRadRailsまだrspec対応してないみたいなんだよな・・・

461 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 10:36:27 ]
コメント3行くらいつけとけば無問題






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<221KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef