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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
最強のLL=軽量プログラム言語は、どれよ?

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

■LLとは?
軽量プログラミング言語(Lightweight Language,LL)とは、取り回しに優れ、
コードの作成や修正が容易と見なされるプログラミング言語のことを指す。

ここでいう「軽さ」はプログラマの負担の軽重を指し、
実行速度に優れているという意味ではない。

現在の水準では
・インタプリタ
・動的型
・正規表現
・クロージャ
などを利用できるものがLLと呼ばれることが多い。
ただし、他人の同意を得られるとは限りません。

長いコードはここで
ttp://play.island.ac/codepaste/

【Perl,Python,PHP】LL バトルロワイヤル 26【JS,Ruby】
http://toro.2ch.net/test/read.cgi/tech/1346967719/
2デフォルトの名無しさん:2012/10/07(日) 03:03:30.67
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

京都大学霊長類研究所
3デフォルトの名無しさん:2012/10/07(日) 09:39:16.57
関数型言語 >>>>>>>>>>>>>>>> LL

Lispマクロのような手軽な強力さも、Haskellのような静的型検査も無い
4デフォルトの名無しさん:2012/10/07(日) 12:19:54.14
((((((((((((((((関数型言語)))))))))))))))) LL
5デフォルトの名無しさん:2012/10/07(日) 18:49:21.82
>>1のいう現在の水準ならLuaも入りそうなもんだが
6デフォルトの名無しさん:2012/10/07(日) 23:35:09.52
スレタイ文字数制限あるからなあ
ところでttp://play.island.ac/codepaste/ってなんぞ
7デフォルトの名無しさん:2012/10/08(月) 01:56:01.42
ecma scriptの1人勝ち。そろそろ、このスレは終了すべき
8デフォルトの名無しさん:2012/10/08(月) 05:54:42.81
2chでは盛り上がっているJSだが、なぜか世界的には不発。
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
9デフォルトの名無しさん:2012/10/08(月) 09:22:55.25
だってまともな言語で書いて
JSにコンパイルする方がマシだもん
10デフォルトの名無しさん:2012/10/08(月) 09:39:52.64
       //
     /  /   バカッ
     //⌒)∩__∩
    /.| .| ノ     ヽ
    / | |  ●   ● |     
   /  | 彡  ( _●_) ミ 馬鹿には無理
   /  | ヽ  |∪|  /_
  // │   ヽノ  \/
  " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
11デフォルトの名無しさん:2012/10/08(月) 11:48:42.49
web屋達の中ではマイブームなんだろ
そっとしておけ
12デフォルトの名無しさん:2012/10/08(月) 13:30:00.44
>>8
それ見るとRubyも不発か・・・
13デフォルトの名無しさん:2012/10/08(月) 15:36:11.19
redmonkの調査ではjsが1位とってたよ
多分、tiobeは中堅どこのソフトウェアハウス
零細web屋はjsが増えていく。
零細web屋が中堅どこの仕事を奪っていく。
零細web屋が中心になって世界が動いていく。
14デフォルトの名無しさん:2012/10/08(月) 15:55:26.36
>>13
> 零細web屋が中心になって世界が動いていく。

零細web屋の妄想ワロスwww
15デフォルトの名無しさん:2012/10/08(月) 16:01:04.54
シリコンバレーのスタートアップなんて零細ウェブ屋と同義語だろ
16デフォルトの名無しさん:2012/10/08(月) 16:02:04.22
>>13
Tiobeは単に検索数の集計で、長い間特に操作を加えている様子はない。
Javascriptが下降しているのは「話題性」は乏しいという意味。
流行っているかとか使われているかというようなことはあまり読み取れない。
17デフォルトの名無しさん:2012/10/08(月) 16:14:00.86
18デフォルトの名無しさん:2012/10/08(月) 17:04:27.41
>>17
すみません質問です。
この表の縦、横罫の中に現れる(by # of projets) (by # of Tags)は
それぞれどういう意味ですか。
19デフォルトの名無しさん:2012/10/08(月) 17:54:00.70
flat of projects|Tags だから、
プロジェクト数(タグ数)を順序でならした結果でしょう。
20デフォルトの名無しさん:2012/10/08(月) 18:38:09.31
(;´Д`)♭
21デフォルトの名無しさん:2012/10/09(火) 01:23:52.21
hirata-create.cocolog-nifty.com
hirata-create.toypark.in
22デフォルトの名無しさん:2012/10/09(火) 05:12:30.13
Lua IN
Ruby OUTでいいじゃん
23デフォルトの名無しさん:2012/10/09(火) 05:31:18.30
スクリプト言語ばかりニョキニョキ出てきても仕方ない。
はっきり言って、大量に亡びるべき。
24デフォルトの名無しさん:2012/10/09(火) 06:13:58.52
このスレにいたキチガイだろ今スレ乱立してるの
本物の障害者だったか
25デフォルトの名無しさん:2012/10/09(火) 08:28:30.06
スレのアボーン登録がフルブックになりそう
26デフォルトの名無しさん:2012/10/09(火) 08:35:49.92
颯爽とObjectScriptが登場
27デフォルトの名無しさん:2012/10/09(火) 09:02:00.04
颯爽(さっそう)
28デフォルトの名無しさん:2012/10/09(火) 14:00:39.34
どれが優れてるかじゃなく、「1つだけ残すならどれ?」ってのはおもしろいかもしれない
29デフォルトの名無しさん:2012/10/09(火) 14:38:41.22
それブラウザ専用言語を別枠にしとかないとJSになっちまうぞ
30デフォルトの名無しさん:2012/10/09(火) 14:51:29.41
ひとつだけ消滅するならどれ?ってのも
31デフォルトの名無しさん:2012/10/09(火) 14:52:17.32
なくなっても困らないもの
それが Ruby
32デフォルトの名無しさん:2012/10/09(火) 16:33:57.57
https://github.com/norinori2222/boyfriend_require
最近のgithubでは、第8層でjp語を使った子プロセス作りまで行うらしいな
33デフォルトの名無しさん:2012/10/09(火) 16:35:57.99
>>30
javascript
これでソフトウェアの進化を食い止められる
34デフォルトの名無しさん:2012/10/09(火) 16:47:39.92
rubyとjsの共通点わかる?モルモン繋がりだよw
35デフォルトの名無しさん:2012/10/09(火) 17:49:56.68
JS…扱いやすい言語、小学生でも取得できる。ブラウザで必要、サーバーサイドのnodejsやクライアントサイドのHTML5APIなどで活躍の場多し
PHP…JSに毛が生えたような言語でサーバーサイドのWeb開発に特化。HTMLと親和性が高い。ちょっとしたWebアプリ作るならほぼこれ
Python…Google推しでWebだけでなく幅広く使われている。可読性に優れている。Linuxの周辺ツールもこれで書かれているものも多い。ライブラリー豊富。小さなプログラムを大きく育てるのにも向いている
perl…古くからWebのCGIやUNIXのシェルスクリプトで使われているきた。CGIとして未だ現役。オワコン化しているがライブラリーやドキュメントの充実さは魅力的
ruby…日本発、楽しく効率よくコーディングできるのを目標。開発者のオ○二ー的要素も大きいがRoRという便利なものがある。下火ではあるが生産性がウケてところどころで使われている
36デフォルトの名無しさん:2012/10/09(火) 19:08:09.87
web開発でのrubyに生産性なんてないよ。馬鹿じゃねーの
それよか、jsをしっかり使える方が重要だよ。自称jsを使える人間なんて現場における凶器だから
37デフォルトの名無しさん:2012/10/09(火) 19:45:43.53
未だに昔の通りのWebオモチャ言語としての認識しかない人も居るからなあJS
38デフォルトの名無しさん:2012/10/09(火) 22:40:17.22
jsってバイナリファイル扱える?
unicodeって本当に便利か?
39デフォルトの名無しさん:2012/10/10(水) 06:31:17.24
まず小学生にも扱いやすいならPHPだよ、深いことをやろうとすると他の言語よりも大変になるけど
これはこれで一つのLLの有り様だと思う
JSは改良版が乱立してるように、とにかく改善の余地の塊でウンコ言語
40デフォルトの名無しさん:2012/10/10(水) 08:16:12.20
JSの改良版乱立って言うが、そんなに乱立してたっけ
41デフォルトの名無しさん:2012/10/10(水) 08:17:58.40
42デフォルトの名無しさん:2012/10/10(水) 18:36:25.08


29 デフォルトの名無しさん [sage] 2012/10/10(水) 18:11:39.35 ID: Be:
    http://www.infoq.com/jp/news/2012/10/Ruby-on-Rails-Node-js-LinkedIn

    LinkedIn は先日,パフォーマンスとスケーラビリティを理由として,
    同社のモバイル用バックエンドインフラを Ruby on Rails から Node.js にリプレースした。
    これに対して元 LinkedIn のチームメンバが,何が問題であったのか,自身の意見を表明している。

30 デフォルトの名無しさん [sage] 2012/10/10(水) 18:15:24.99 ID: Be:
    ・優れたパフォーマンス – いくつかのシナリオにおいて,Node.js は Rails の20倍以上高速だった。
    ・サーバ30台の処理をわずか3台で実行できるため,10倍以上のトラフィックを処理する余地が生まれる。
    ・フロントエンドの JavaScript 技術者をバックエンドコード開発に従事させることが可能になる。
     この結果,2つあった開発チームが1つに統合された。
43デフォルトの名無しさん:2012/10/10(水) 19:50:42.24
OO言語が乱立しても改善の余地があると言わないのはなんで?
C++が難解でもOOが難しいことにはならないし
Rubyが遅くてもOOが遅いとはいえない
OOは無敵すぎる
44デフォルトの名無しさん:2012/10/10(水) 20:35:52.57
お前が馬鹿でも人間が馬鹿ということにはならないから
45デフォルトの名無しさん:2012/10/10(水) 20:36:30.31
>>42
Infoq記事の続き....

 問題をいくつか指摘した後に Lan 氏は,最終的に "v8 がとんでもなく早い" ことを認めながらも,
 "次世代の技術として node.js の使用が必須である,とは言い切れません。" と付け加えた。
 "モバイルサーバで実行しなければならなかった処理に関して言えば,Ruby on Rails より
 適切であったことは事実です。しかしパフォーマンスの万能薬ではないのです。
 下位レベルのサーバとフルスタックの Web フレームワークの比較なのです。"

最後の結論に注目:

  下位レベルのサーバ(Node.js)とフルスタックの Web フレームワーク(Rails)の比較なのです

すべてのWebサービスが Rails から Node.js へ移行するのではなく、軽量なサービスに限定すれば
(LinkedIn社の場合は「プロキシよりちょっと重い程度」) Node.js を検討する価値がある、
という程度の話ではないかと思われ
46デフォルトの名無しさん:2012/10/10(水) 20:42:53.03
railsがなければrubyに用なし
47デフォルトの名無しさん:2012/10/10(水) 20:56:37.98
軽量サービスはサーバーサイドJS
重いのはクライアントサイドJS
48デフォルトの名無しさん:2012/10/10(水) 21:31:23.34
そもそもなぜRubyを使ったw
49デフォルトの名無しさん:2012/10/10(水) 22:04:59.73
それが古のオタクたちの夢だったからだ。だが、crubyは死んだ。
OSSという才能が集まるフリークラスでは淘汰された。
現存するのは、企業が提供するタダ乗り文化だ。
50デフォルトの名無しさん:2012/10/10(水) 22:07:52.78
rubyの犠牲はキリストの犠牲と似ている。
誰かrubyとキリストによる贖いの比較ってタイトルで論文でも書け
バザール文化はcからnode.jsに移った。
51デフォルトの名無しさん:2012/10/10(水) 22:18:28.87
前にjsが流行っこないって言った連中は、上司にヤレと言われても断れよw
52デフォルトの名無しさん:2012/10/10(水) 22:28:21.36
普通にJSにコンパイルして使ってるよ
53デフォルトの名無しさん:2012/10/10(水) 22:28:40.01
てか、博多のruby開発拠点ってさ、第五世代コンピューティングばりの失敗だよねwwwww
これからrubyやrailsで商売しようとしてたマヌケたちって、どうなっちゃうんだろうwwwww
日本は、計算機の市場でまた負けたのだよ。計算機、OSときて、そして言語まできたwwwwww
54デフォルトの名無しさん:2012/10/10(水) 22:30:35.97
けれど、ソーシャルゲーム市場で勝つショボさwwwwwww
55デフォルトの名無しさん:2012/10/10(水) 22:33:14.68
サーバサイドで処理系の出来の良さだけ考慮して
言語そのものは何でも良いなら
node.jsなんてオモチャ使わずにErlang使うわ、という話

http://kuenishi.hatenadiary.jp/entry/20101013/1286973687
56デフォルトの名無しさん:2012/10/10(水) 22:34:21.21
uyとかいうゴミってまだ生きてるの
57デフォルトの名無しさん:2012/10/10(水) 22:40:14.76
たまにレス番飛ぶから生きてると思われる
58デフォルトの名無しさん:2012/10/10(水) 22:47:24.54
>>55
日付がちょっと先なのが気になった
59デフォルトの名無しさん:2012/10/10(水) 22:51:07.09
次の記事はもう予想が付くだろ?
どーせ、node.js vs eralng vs golang だよ
もうひとつが、dart vs typescript
この関係を持ち出すと、結局、node.jsしか選びようがないわけ
こうして、古きよき時代のLL文化はテクノロジーの進化と共に幕を閉じた
さようなら、Larry。さようなら、guide。さようなら、matz。
60デフォルトの名無しさん:2012/10/10(水) 22:55:55.87
だから、ソフトウェアはcで書けって!
61デフォルトの名無しさん:2012/10/10(水) 22:57:07.38
>>60
cはプラグイン言語だろうね
62デフォルトの名無しさん:2012/10/10(水) 22:57:30.35
>>59
上の記事なかなかおもしろいよ
63デフォルトの名無しさん:2012/10/10(水) 22:57:54.86
この自信満々の煽り方は古きよきオタクとは正反対のリア充だよね
64デフォルトの名無しさん:2012/10/10(水) 23:05:16.46
まさか。LLブームのおかげでFOSSに興味もってしまったニートだよwwww
釣られている現職のPGなんて居たら、向いてないから転職した方が良いwwwww
65デフォルトの名無しさん:2012/10/10(水) 23:10:40.13
perl、rubyとかpython弄ってたのに、卒業したと同時にブーム終わってんのwwwwww
冗談抜きでc++以外さわっちゃダメだよね。本当に時間の無駄だったwwwwwwwwww
今学生に戻れるならc++かjsのどっちかしか触んないwwwwwwww
今ならc++と競技コーディングの方が就職に有利なのかなwwwwwwww
記事書いた連中供死ねよwwwwwwwwwwwwwwwww
66デフォルトの名無しさん:2012/10/10(水) 23:22:13.09
http://whatcanidoformozilla.org/

Rubyの仕事がないw
67デフォルトの名無しさん:2012/10/10(水) 23:28:05.50
ニートの予想だとね、jsで競技コーディングがトレンドだよー
topcoderだかでは、jsだけなかった気がしたけどね
学部1年はアリ本とヤドカリ本、買おうね!
学部2年は現実を見つめて公務員試験を受けよう!
68デフォルトの名無しさん:2012/10/10(水) 23:28:36.39
Mozillaはもう経年劣化が激しすぎるからJava/JSから離れてRuby組み込むべき
69デフォルトの名無しさん:2012/10/10(水) 23:31:41.73
rustなんてrubyのようなものだろ
rubyをtypescriptにしたような感じ
70デフォルトの名無しさん:2012/10/10(水) 23:34:32.48
いまさらあんなものに肩入れする奴がいるとも思えない
汎用的なスクリプト言語でPython, Rubyにとってかわる勢いのある言語はないのか
71デフォルトの名無しさん:2012/10/10(水) 23:36:31.23
>>65
> perl、rubyとかpython弄ってたのに、卒業したと同時にブーム終わってんのwwwwww

perl, ruby, python なんて役割が被ってて
弄るにしても一つで十分なのは自明なのに
全部弄ってたなんて人として最低限の知性すら足りてない
馬鹿はどんな言語触っても無駄
72デフォルトの名無しさん:2012/10/10(水) 23:38:53.52
だから、今はもうスクリプトの選択はjsしかないってwwwww
そのスーパーセットのtypescriptが一番に勢いが付くよwwwww
他は触るだけ時間の無駄だよ。無駄wwwwwwwwwwwwwwwwwwwwwww
73デフォルトの名無しさん:2012/10/10(水) 23:39:59.90
馬鹿は生きてるだけで資源の無駄
74デフォルトの名無しさん:2012/10/10(水) 23:40:55.31
>>71
最初はまだ、rubyブームなんて着てなかったんだよwwwwwww
perlを弄りだしたところでrailsが流行りだしてんのwwwwwwwwww
python触りだした頃に、schemeブーム、haskellブーム...
記事書いた奴ら死ねよwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
75デフォルトの名無しさん:2012/10/10(水) 23:45:43.99
そして今度はjsブームに踊らされるわけですね、分かります
76デフォルトの名無しさん:2012/10/10(水) 23:46:40.21
汎用的なってわざわざ書いたのにこれだ
77デフォルトの名無しさん:2012/10/10(水) 23:54:01.27
>>73
現存する馬鹿はPHPやjs以外でコード書く奴らだよwwww
直にPHPも馬鹿扱い。生残るのはjsだけだよwwww
rubyとかpythonとか、本当に使えるとこないからwwwwwwwwwwww
perlなんて、恐ろしい零細ぐらいしか使わないよwwwwwwwww
結局、皆が仕事を探すに当たってweb系ならPHPかjsの募集が多い。
いまどき、perlで書かれたCGIなんて弄りたいヤツ居ないだろ?wwwwww
rubyやpythonの募集なんて限りなく少ない。
他のものイジルよりnode.jsを弄った方が痛み少ないって風に、皆が考えるわけ
これが求職者の立場から見たnode.jsバブルwwwwwwwwwww
rubyやpythonなんて弄ってみろよ?零細企業から逃げ出せないぜ?
78デフォルトの名無しさん:2012/10/10(水) 23:58:27.21
直にjsはないわ
79デフォルトの名無しさん:2012/10/11(木) 00:00:05.91
生でjsだよ。生で。
rubyからのトランスレータ使わせて下さいなんて会社に言うの?
馬鹿じゃね?って却下されるよwwwwwwwwwwwwwwwwwwwwwww
80デフォルトの名無しさん:2012/10/11(木) 00:03:05.79
なんで却下されるの?自分の意見が通らないほど下っ端だから?

あ、もしかして派遣ですか?wwwww
81デフォルトの名無しさん:2012/10/11(木) 00:03:19.14
せいぜい、gdbやtrac弄るのにpython止まりだよー。
rubyだけ、使う必要性が他言語と比較して狭すぎる。
82デフォルトの名無しさん:2012/10/11(木) 00:04:39.79
>>80
ニートですけどなにかwwwwwwwwwwwwwwwwwwwwww
普通、大きな会社だと自分の意見なんて通らないじゃないのか?wwwwwwwww
この言語でーーーーーーーなんてぇーーーー、すぅっげぇーーーー零細ないめぇーーーーーーじwwwwwwwwwwwwwwwww
83デフォルトの名無しさん:2012/10/11(木) 00:06:32.26
ニートはコテハン付けてよ
84デフォルトの名無しさん:2012/10/11(木) 00:07:40.82
嫌だぉーーーーーーーーーーーーーーwwwwww
コテとかuyのアホだけがやってりゃいいだろwwwwwwwwwwwwwwwwwwwwww
node.js推してるレスなんて、ほとんど俺だよwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
85デフォルトの名無しさん:2012/10/11(木) 00:18:10.06
てかさ、c++でグループウェア作ってるとことか大丈夫なのかねwwwwwww
あれって、次のofficeとかsocket.io、jsライブラリ、
html5で似たようなことする製品作れそうじゃんwwwww
c++で書くなんて石から削りだしてるように見えるのよねwwwwwww
methor frameworkなんて流行りだした日には、大量のjava屋さんたちにハローワークで会うかしら?wwwwwwww
ざぁwwwwwまぁwwwwwwwwwwwwwwwwwwwwwwwwwww
86デフォルトの名無しさん:2012/10/11(木) 00:26:39.08
jsだけリアルタイムシステム書けないけど、
そういった機能要求よこされる中堅どころぉなんてぇーーーー、
しぃんそぉつぅでさいよぉーされた奴らだけが必死こいて、
やってりゃいいぉねぇえええええwwwwwwww
そーいった現場って、クビきられた後で、次の職場でノウハゥ生かせられるのかしらん?wwwwwwwwwwwww
87デフォルトの名無しさん:2012/10/11(木) 00:28:01.05
このスレは既知外ホイホイですか?
88デフォルトの名無しさん:2012/10/11(木) 00:34:37.58
最近、発症したよぉぉぉぉぉぉwwwwwwwwwwwwwwwwww
wつけるぅとぉおおおおおおんwwww、すぅっげぇい楽しいねぇええええええええええええwwwwwww
wwwwhyみたいにぃいいい、node.jsのにゅうぅーもんマンガでもかいたらぁぁああああ、
しぃごぉとぉおおおお大尾、みいいぃいいつうかぁっるうかなあああああああああwwwwwww
89デフォルトの名無しさん:2012/10/11(木) 00:41:46.88
まずは失踪から始めよう。成果が出るまで続けるのが大事
90デフォルトの名無しさん:2012/10/11(木) 00:46:01.10
c/c++の求人さがしてぇええ、おうぼぉするのぉってぇええええええwwwww、
すぅげぇええええええぇリスク高いよねぇえええええええええええええええwww
作れってぇえええええ、いわれぇっるうううもののおののがあぁぁっぁ、
レベェルたかかああああああああいいいいいイッメーーーーーーージ
がぞぅしょりだの、せいぎょだの、シィんそちゅのがぁしたヴぁかにぃー、
てとりナにとりぃーーー教えてもらえるぅのかなぁあああんん?
ロマンスグレイなぁじょーーしにさーーーーーー。ふふぅん、こんばんはかえさないよぉーーーなんてぇwwwww
祖ぉーーレナらぁーーーまぁだーーーいーけーどさーーーーー、
ひっこしたあとで、ほうちされて、おい込まれたりしたらぁあああああ、
すぅううごおおぃいいリィスゥーーーーーーーーーーーーーーーークwwwwwwww
91デフォルトの名無しさん:2012/10/11(木) 01:09:15.82
けど差、けど差、けどぉさぁぁあア嗚呼嗚呼あああんああああんあああぁあああぁwwww
じゃヴぁってぇーーーーーーーーー、なぁあああああんんかあああぁあああぁあああ
しちょおおおおっせえええええええええええええぇえええが嗚呼ああああみいいえてえるよねえええええええwwwwwwww
M V C ! M V C !ってぇえええええいううぅぅぅけえれっどおおぉぉおおおおおおおwwwwwwwww
かぃたこおおぉおぉおどのおおおわりぃいいいにいいいいいいいいいいい、
やれることおおおおすくうないいじゃんんんんんwwwwwwwwwwww
しょーじきーネットワーーーークまわりぃいいのおおおぉおおライブラリぐらいしか、
つかわれなくなりそうだよねぇええええええええええええええええええ。
すぅぷぅりんぐ?なにそれ、おいしいいいぃいいのおおおおおおおおお?wwwwwww
ウェブフレームゥワークってぇええええええ、らんりちゅしぃーすぅーぎぃーwwwwwwwww
ぷぅろぉじぇくとぅ毎にぃ、えらぶぅだけえええええええええええのおぉおぉおぉおぉおおお、
メリットなんてぇええええ、あんのかよぉぉぉぉっぉぉぉぉおぉお
C#はぁ、entityイッタクだけぉどぉぉぉおおお、M$のお庭でぇあそぶぅのう、
なんんかああああああ、せいしゅうぉぉおおおおお、ぜんひてーーいするきぃぶぅんw
でさ、でさ、でさ、出た答えがぁwwwwwww、ザッカーバーグゥか、ジョブズのまぁねごとしたいヴァカを期待してぇえ、
node.jsとぉぉおおお、メェテェオゥッ!html5でぇええ、てくぅのろじーが
入れ替わるのぉおおおおおきぃたぃするしかないぃんだよねぇええええへへへへへwwww
92デフォルトの名無しさん:2012/10/11(木) 01:24:39.30
よぉのぉなかあぁあああのおおさあああああ、ぎょおーむけーなんてぇー、
じゅよおおううよおおぉおお斧おおほとおおんどおななんてええぇえええ、
GUIと文字列とデータベース、統計でぇえええええええええええ、
すんじゃうよねねねねねねねねえんええんねええええええええええええwwww
desa,desa,desa、GUIと文字列とデータベース弄るゥぅぅのにぃいいいさあぁあああ、
じゃヴぁあああぐらいぃいいい、メンドウなぁあああげんんごおおってえええ、
ほぉかにないよねええええええええええwwwwwwwwwwwwwwwww
しょおきぃぼぉなぁああああんけんはぁああああああああああ、
じゃヴぁすくぅりぃぷとぅがあぁああああおいしくぅううういただきぃましたぁああああwww
93デフォルトの名無しさん:2012/10/11(木) 01:33:28.24
>>86
> jsだけリアルタイムシステム書けないけど、

リアルタイムシステムに必要なものって何のこと?
それがjsだけ欠けているというのが本当か調べたいんだけど、
まあ後半の文章見る限り、レスは期待できないなw

ま、レスがなければ根拠なしということで忘れよう。
94デフォルトの名無しさん:2012/10/11(木) 01:42:21.13
るぅびぃはぁああーーあああああああーああああああああさぁああああああああ、
ほんとぅにぃーーーーー、くぅーーるぅううーなあああぁあああぁあぁ、
げんごぉおぉおおおだったぁけれえええええどおおおぉおおさああっぁああああん、
どぅみぃてぇもぉおおお、はっかぁーれんちゅーがぁあああああああーーーーー、
このぉむぅううぅぅうぅぅ、てぇつぅがぁくスタァイルじゃないんだよねぇえええ
うにぃくすぅのぉおおでんとぅてぇきぃな記号はぁあああ、うけついでるけどさぁ、
やぁあああぱああぁああっりいいぃいい、てぇえええつうぅうがぁくぅスタァイルとはぁ、
違ってええええええええぇええみえええっるうんだょねえええええええええええええええ。
スゥクゥリプトゥのレベルでぇ、ほんとぅにぃ、クラスなぁんてーーひつようだったのかしらん?
ハッシュでぇえええええええええじゅうううぶうぅうんんだったよねえええええええええええマヂで

>>93
RTOSみたいなああああああああ、GCのぉおタァアアイミングゥまでぇええええ、
要求されぇるようなぁああああああああああぁあああ、じゃヴぁあああすくりぷとぅのおおお、
処理系何てぇええええええええええあるぅうのぉおおお?
とうしょーのしすてむとかーぁあああああ、javaらしいいじゃあああああああんんんん。
ニートゥに聞くなよヴぁーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーか
おれぇがききてぇえええええぐらいだよおおおおお、たこ、くず、はげ、ごみぃぃいぃいい
95デフォルトの名無しさん:2012/10/11(木) 01:45:41.19
>>93
おまえぇ、にいぃいいとぉおおだよねぇええええええ?
げんえきぃのえすいーとかだったらぁああああああああ、
しんだほうぅがあああいいいよおおおおおおお。
てか、しね。しね。市ね。視ね。視ね。しね。しね。しね。しね。しね
96デフォルトの名無しさん:2012/10/11(木) 01:48:56.59
なにが、ま、レスがなければ根拠なしだとwwwwwwwwwwwwwwwwwwww
バーーーかあああああああ、くうっぅぅうずううううううう、あほふぉおおぉおおお
じじじじいいいしんんにいいいいいいまああああきこまれてぃえええええええ、しね
97デフォルトの名無しさん:2012/10/11(木) 01:57:52.78
>>94
いや、だからそれ、JavaScript以外ならあるの?
少なくともスクリプト言語は全滅だし、
その他だって言語の機能じゃないでしょw
98デフォルトの名無しさん:2012/10/11(木) 02:03:16.06
>>97
ア嗚呼あったあああありいぃいいまえええええだろおぉおおヴぁあああーあーかああ
でもなきゃぁあああーーーーー、Real-Time-yo!にぃいいいいいい、
わざわぁあああああああああ、じゃヴぁああああのぉおおおおかそぉおおましいいんつぅくるぅYO!
ふーつーはーーーーーーー、real time ! なんてぇえええええええ、c/c++の分野だろぉおおおおおがぁああああああん
ゆううういいいいつぅうううううう、食ううぅううみいいっこおおみいいいよおおとおおではぁあああああああ、
mrubyがぁああああああああ、にたYOなことおおおおぉおおおやろおおおとしてえええよおお
ひょっとおおするううとおおおおぉおおお、pythonのおおおおおじっそおおおううううにはぁああああ、
RTな要求をぉ大尾見達すうものおおおお大尾がああるうかもしれええあんないいけっどおおおおおおお、
風雨通宇うーは嗚呼嗚呼嗚呼あ、エンプラ用途ではぁあああつかわねーーーだろおおおおぉおおおおおおお。
99デフォルトの名無しさん:2012/10/11(木) 02:10:48.16
http://ll.jus.or.jp/2012/slide/Language/mruby.pdf
組み込みを意識したmrubyを作ってみた
まつもとゆきひろ

ハードリアルタイムはムリ
100デフォルトの名無しさん:2012/10/11(木) 02:13:10.70
なぁああああにいいがあああああああ、
>少なくともスクリプト言語は全滅だし、
da-yo!カス、クズ、ゴミ虫ィィ良い良い良い良い良い良いイ!
ふつううううにいぃいいかんんがええええれりゃああああああああああああああ、
すうううくううう売り良いぃいいっぷううつうぅうううのぉおおおお、
やるうううよおうううなぁああああああああああ、機能要求じゃねーーーーYO!

>>99
まぢいでええええ?まぁあああそおおおだよおねえええええええええええ
cへのぉおおおおトランスレーターーーにいぃいいスレヴァいいいのにいいぃいいいいNE!
101デフォルトの名無しさん:2012/10/11(木) 02:16:01.55
http://www.forest.impress.co.jp/docs/news/20121010_565069.html
そのほか、「Firefox 15」での採用が見送られた“インクリメンタル
ガーベジコレクション(Incremental GC)”がJavaScriptエンジンに搭載された。
従来のガベージコレクション(不要になったメモリを開放する処理)に比べて
プログラムの停止時間が短縮されるため、ゲームなどリアルタイムな処理が
求められるコンテンツがより快適に楽しめるようになるだろう。
102デフォルトの名無しさん:2012/10/11(木) 02:17:59.32
http://www.2ality.com/2011/11/v8-incremental-gc.html
Today we are announcing the release of Chrome’s new incremental
garbage collector (GC) which dramatically improves interactive
performance of web apps and HTML5 games.
103デフォルトの名無しさん:2012/10/11(木) 02:23:15.10
ゲーーーーームのおおぉおおおおリアルタイムゥなあああよおおおぉおおきゅうううとおぉおおお、
金融なんかでのおぉおおおお、奇異の大おうううよううううきゅううううをおおおおおおお
おおおぉおおおぉおおおなんなんじいいいいいいい、じいげええんんでええええええええええええ
考える宇宇宇ナッツーーーーーーーーーーーーーーにおおおおおおおおおお
レントゲンをおおぉおおおお、いっめーーーーーーーじ、しろぉおおおおおお
ちょおおおどおおおおお、GCはしったりいいしたらああああああいやすぎるだろおおおおおがああああああああああああああ
104デフォルトの名無しさん:2012/10/11(木) 02:32:49.33
mrubyのGCって
インクリメンタルGCだろ?
リアルタイムって何を言ってるんだか。
105デフォルトの名無しさん:2012/10/11(木) 02:33:45.52
うん。インクリメンタルGCならソフトリアルタイムといっていいよ。
JavaScriptもそうだけど。
106デフォルトの名無しさん:2012/10/11(木) 02:39:07.00
じゃヴぁとRTじゃヴぁのぉおおおおおおおおおおおお、GCってぇええええええええええええ
ナああああああああああにいいいいがああつかああわれえてええぇんんのおお?
107デフォルトの名無しさん:2012/10/11(木) 02:54:14.06
GCがあああああはしいるううううう、FXだとかぁあ、株価のおおおおおほげとかぁああああああ、
つううううううかいいいたいいいいかあああああああああああああああああああああああっぁあ?
じゃヴぁすくりぷとでかかれたあああしんしつさいどぅそぉおちとぉかぁ、雄プレイなんてぇ、
JOE式でえええかんがえってえええええ、イイヤァーーだろぉおおおおぉお
108デフォルトの名無しさん:2012/10/11(木) 19:07:05.03
webバブルが.comバブルの再来に見える。うふふ
109デフォルトの名無しさん:2012/10/12(金) 08:24:50.09
なんだこのスレ・・・
鬼のようにレス番飛んでんな
キティでもわいてるのか?
110デフォルトの名無しさん:2012/10/12(金) 11:32:59.78
>>109
#=> true
111デフォルトの名無しさん:2012/10/13(土) 04:12:14.20
mozillaの気合が入ってるけど、これって確かgoogleから資金提供してもらってんだよね
運営資金足りないとかで、数年以内に結果出せって言われてた気がする。
もはやビジネスで負けた連中の呪いだよね!だから、大好き。
112デフォルトの名無しさん:2012/10/13(土) 13:38:05.51
nokiaと組んだM$って、何処かOSSと関わって没落した企業の再生工場に見える
113デフォルトの名無しさん:2012/10/13(土) 15:38:16.20
フリーソフトで損失を出す能力ってすごいよね
100%外れる占い師みたいなやつだな
114デフォルトの名無しさん:2012/10/13(土) 23:52:58.43
馬鹿だな。100%外れたら、言われたことと反対のことすればいいだろ。本当に馬鹿だな
115デフォルトの名無しさん:2012/10/13(土) 23:54:11.77
はっきりいっておくが、このスレに居るヤツは負け組み候補の受難を背負っている!
116デフォルトの名無しさん:2012/10/13(土) 23:56:09.95
たぶん、w3cだとか各種言語のメーリングリストだのコミュニティだのを見た方が出世できるぞ。良い子の諸君たち!
117デフォルトの名無しさん:2012/10/14(日) 00:18:10.98
コミュニティのメーリングリストが整備され、
実名で行動した方が有意義である文化において2chはオワコン化してしまった。
いいや、最初からこんな場所を読んではいけなかったのだ。
118デフォルトの名無しさん:2012/10/14(日) 00:21:16.38
学歴なんて大して重要視されないが英語の読み書きが出来ないコミュ障は死んだ方が良い世界
119デフォルトの名無しさん:2012/10/14(日) 00:35:36.36
これからさ、web開発での工数と価格が暴落して面白いことになりそうだよね
これまでシステムがあったらってな零細企業にも低価格で気楽に導入されるんだよ
頭使わない精神論者や教養のない連中が、どんどん淘汰されていくんだ。見物だね
120uy:2012/10/14(日) 03:57:12.19
ふう

今まで、こんなに技術から離れてたことがあっただろうか
なんか本当にもう、どうでもいいなこのジャンル
冷静に第三者視点でみると
IT技術なんて全然世界の中心ではなく
ひとつの「マイナー」ジャンルでしかない

「マイナー」だよ「マイナー」
狭すぎだろ・・・そしてマイナーな割に難易度が高い事は事実でもある
可愛そうだ
いつの時代も、社会や国の負荷がモロにかかる職種ってあるよな

こんな時代にPGやってる奴って・・・。
121デフォルトの名無しさん:2012/10/14(日) 04:04:02.38
>>117
PerlとかのUNIX系のソフトウェアのメーリングリストは2chなんかが存在する以前から十分に普及してたぞ
122デフォルトの名無しさん:2012/10/14(日) 05:50:31.63
ECMAScript 6 の draft で
class と module については一応見当たるのですが
静的型付けについてはどこに書かれているのか分かりません
"Static Semantics" とか関係ありますか?
http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts
http://wiki.ecmascript.org/lib/exe/fetch.php?id=harmony%3Aspecification_drafts&cache=cache&media=harmony:working_draft_ecma-262_edition_6_9-27-12-nomarkup.pdf
123デフォルトの名無しさん:2012/10/14(日) 08:16:33.45
ここは質問スレじゃない
124デフォルトの名無しさん:2012/10/14(日) 10:26:50.06
読みやすい教科書がまだない間はインターネット良いよね
で教科書が完成したら解散
無事に終わってよかっただろ
125デフォルトの名無しさん:2012/10/14(日) 14:28:24.03
教科書の情報なんてすぐに陳腐かするだろ
ある程度の設計できるようになったら、断片的な知識から全体を構成できるからな
126デフォルトの名無しさん:2012/10/14(日) 14:34:45.60
組込み・制御・ゲームって給料ヨサゲだけど才能ない人たちは死にそうだよね
web系・業務系はまったく才能がなくても、上手くやれば簡単に金巻き上げれそう
おまいら、どっちがオヌヌメなの?
127デフォルトの名無しさん:2012/10/14(日) 14:39:53.15
>>120
何れホワイトカラーの事務職なんてのは、jsと統計周りの知識が必須になるよ
多分、ウェブバブル崩壊後には散り散りになったweb系技術者たちが
地方のあちこちのダメな中小企業で社内システムやらM$Officeのマクロを弄り出すよ
或いは、web系の企業の方が地方のダメな中小企業の業務を持っていってしまうか
どちらにせよ、地獄絵図だよ!
128デフォルトの名無しさん:2012/10/14(日) 14:48:32.29
>>123
TypeScriptが話題になってたからこのスレが良いかなと思って
結局次期JavaScriptに静的型付けが入るのかどうか気になったんだよ
129デフォルトの名無しさん:2012/10/14(日) 14:55:51.47
静的型付けをそのまま含めたら、ほとんどaction scriptだよね
130デフォルトの名無しさん:2012/10/14(日) 15:21:48.10
TypeScript part1
http://toro.2ch.net/test/read.cgi/tech/1349187527/

JavaScriptコードはすでにTypeScripttコードです
http://toro.2ch.net/test/read.cgi/tech/1349488930/
131デフォルトの名無しさん:2012/10/14(日) 15:33:26.66
>>127
統計が必須になる層はJSなんて弄りません
132デフォルトの名無しさん:2012/10/14(日) 15:47:04.32
>>126
ゲーム関連のお給料がいいなんて話は聞いたことがないけど…
モシモシのことならあれはwebサービスだからね
>>131
統計が必須になるような層の人は実際コンピュータには無知な人が多いような…
133デフォルトの名無しさん:2012/10/14(日) 18:39:53.56
a
134デフォルトの名無しさん:2012/10/14(日) 20:00:04.41
>>130
おいおい、このスレでJavaScriptのことを話題にしてもいいだろ
135デフォルトの名無しさん:2012/10/14(日) 20:32:58.40
html最強
136デフォルトの名無しさん:2012/10/15(月) 01:06:10.15
動的言語は罪深い
137デフォルトの名無しさん:2012/10/15(月) 02:04:07.32
オープンソースなのに情報が少ないから結局クローズドソース
動的だから変更のたびに チェックと確認が必要 
ローカル開発→開発サーバー→ステージング→本番 順番に確認作業が必要
仕様変更のたびにこれを毎回やる
実行しないとバグがわからないから クラス・関数がどこかで参照されているか明らかにする必要がある
ドキュメントが大量に必要 しかも仕様変更のたびにドキュメントの変更も必要 
この場合ドキュメントにもバグが混入する 大規模開発だと必ずこんがらがる
FWはバージョンアップのたびに別物に生まれ変わり 互換性がなく 今までのソースは動かない 
動作しているものから不具合を探さないといけない また学習しないといけない
新しいFWがしょっちゅう出てきて それがデフォルトスタンダードのようにはてぶなどで宣伝工作される


実行しないとバグがわからない動的言語は過去のライブラリを使うのをためらう
結局過去の資産を生かせない 関数の名前の変更のたびに
ソース検索が必要で手間がかかる これが静的言語だったらエラー吐くから 
確認作業はローカル開発内で収まることが多い 動的は作れば作るほどシステムが負債化していく 
作った後はまた新しいものを作った方が早いという結論になることが多い
どうしようもない動的言語を流行らそうとするはてぶをはじめ技法やCodeZine、アシアルは本当に罪深い
138デフォルトの名無しさん:2012/10/15(月) 02:09:24.82
結局これは短期記録力がある人間の驕りなんだよね。(東大とかアシアルとか)
彼らは自分たちの記憶能力を生かしたいがために
ガラクタ言語をチョイスしてそれをスタンダードのような流れにしたいと思っている
このガラクタ言語を使うことで短記録のある自分たちが有利であることを知っていて 
他を蹴落としたいと潜在的に思っている。はてぶとかで工作してくる
静的言語を使えば(主にC#)こんな苦労なんて全然ないのに 
それでは自分たちが存在意義が問われるからあえて使わないようにしている
いい加減こんなガラクタ言語やっていても無限に苦労することなる

動的言語はやめとけ無限に苦労することになる 書けば書くほど大変になる
記録力のあるやつだけやつしか現場に残らない 記録に止めないといけないことが
多すぎる VisualStudioやC#だったらバグ、リファレンスエラーが教えてくれる 
リファクターで容易に関数名を変更ができる
動的言語に比べてはるかに短い時間で安全確実にプログラムを完成させることができる

見えない地雷で身動きのとりづらい言語だからMVCで思考を統一するしかなかった 
だから現場は北朝鮮みたいな思考統制が進み ロボット人間だけが残る 
組織は硬直し ルールーこそ人の上に立つ存在だと考える頭のおかしいロボット人間がでてくる
そこは自由な思想・行動も否定され 愚かなルールを誰が破るか密告することを楽しみとする 潰しあいの世界が出来上がる
139デフォルトの名無しさん:2012/10/15(月) 02:22:32.32
いつの時代も、社会や国の負荷がモロにかかる職種ってあるよな
140デフォルトの名無しさん:2012/10/15(月) 07:34:24.62
御題

"3 19 + -2 /" という文字列入力に対し-11を返すような
逆ポーランド電卓関数を書け

・四則演算をサポートすること(さらに、演算セットは入れ替え可能なこと)
・不正な入力に対しては例外・nullなどを返すこと
141デフォルトの名無しさん:2012/10/15(月) 08:13:13.17
11 3 19 + -2 / +
のときはどう動けばいい?
142デフォルトの名無しさん:2012/10/15(月) 08:15:34.43
0を返す
143デフォルトの名無しさん:2012/10/15(月) 08:17:13.61
なんか書き方が教科書的すぎて
言語間の優劣とかの話にはしづらい気がするが
Ruby1.8系

require 'strscan'

def lex(str)
s = StringScanner.new(str)
tokens = []
until s.eos?
if s.scan(/-?\d+/)
tokens << [:num, s.matched.to_i]
elsif s.scan(Regexp.union("+", "-", "*", "/"))
tokens << [:op, s.matched]
elsif s.scan(/\s+/)
# do nothing
else
raise "illegal input"
end
end
tokens
end
144デフォルトの名無しさん:2012/10/15(月) 08:18:05.92
def evaluate(tokens)
stack = []
until tokens.empty?
t = tokens.shift
case t[0]
when :num
stack.push(t[1])
when :op
command = t[1]
op1 = stack[-2]
op2 = stack[-1]
stack = stack[0 .. -3] << eval(op1.to_s + " " + command + " " + op2.to_s)
else
raise "internal error(must not happen)"
end
end
stack[0]
end


def calc(str)
tokens = lex(str)
result = evaluate(tokens)
puts result
end

calc("3 19 + -2 /")
145デフォルトの名無しさん:2012/10/15(月) 08:19:31.82
d = {}
def add(a):
    a[-2] = a[-2] + a[-1]
    a.pop()
d["+"] = add
def div(a):
    a[-2] = a[-2] / a[-1]
    a.pop()
d["/"] = div
a = []
for s in input('?').split():
    if s in d:
        d[s](a)
    else:
        a.append(float(s))
print(a)
146デフォルトの名無しさん:2012/10/15(月) 08:22:29.83
御題は全部自分で作るから良いよな
自分で作った物が一番記憶しやすいし
仕様を変える時期もコントロールできるし責任の擦り合いもない

全部自分で作ることが悪いみたいに宣伝されるのが不可解だ
147デフォルトの名無しさん:2012/10/15(月) 08:25:11.30
条件後出しでも怒られないし
勝手に仕様変えるのも
自分に都合の良い解釈するのも
全部自由
まるで森口
148デフォルトの名無しさん:2012/10/15(月) 08:37:22.80
>>140は特に動的言語向けの御題じゃないな
別に動的型もevalも使う必要無いし

ただし>>137-138のような低能には無理。静的動的関係なく
149デフォルトの名無しさん:2012/10/15(月) 11:21:15.91
デフォルトスタンダード君がにも来たか
150デフォルトの名無しさん:2012/10/15(月) 17:42:35.60
C#のコードまだ〜?
151デフォルトの名無しさん:2012/10/15(月) 18:15:22.67
PHPってもともと「PHP」などの雑誌ビジネス書人文社会科学書を発刊していた出版社
ちょっと目を逸らしたらWeb用CGI言語がメインでけっこう大きな勢力になっていたので驚いた
152デフォルトの名無しさん:2012/10/15(月) 18:19:41.59
Perlっていいなまえですね! おそらくPerl言語のPerlだけ一致するだろう。
PHP, Ruby, Pythonは、Googleで検索したら余計なものも一致する
153デフォルトの名無しさん:2012/10/15(月) 19:18:36.61
ム板終わったな。キチガイは死んでろ
154デフォルトの名無しさん:2012/10/15(月) 19:20:00.57
155デフォルトの名無しさん:2012/10/15(月) 20:24:51.22
グロ注意
156デフォルトの名無しさん:2012/10/15(月) 20:25:52.34
>>153
まずおまえがきえろ
157デフォルトの名無しさん:2012/10/15(月) 21:36:07.96
>>140
Rubyによるもう一つの実装
http://play.island.ac/codepaste/code?id=24
158デフォルトの名無しさん:2012/10/15(月) 23:25:07.22
>>140
何から何まで横着してみた@PowerShell

function calc ([string]$s) {
do {
$a = -Split $s
$b = iex ("{0}{1}({2})" -f $a[0],$a[2],$a[1])
$s = (@($b) + $a[3..$a.Count]) -join " "
} until ( [double]::TryParse($s, [ref]$null) )
return $s
}

calc "3 19 + -2 /"

入力によっては例外出し続ける
159デフォルトの名無しさん:2012/10/16(火) 00:11:16.67
Haskell
なんとか1レスに収まった


import Control.Monad
import Control.Applicative

calcRPN fs s = do
  [result] <- foldM f [] $ words s
  return result
  where
    f = foldr (\f g xs s -> f xs s <|> g xs s) push fs
    push xs s = (:xs) <$> case reads s of {[(x, "")] -> Just x; _ -> Nothing}


infixMaybe op a (y:x:xs) b | a == b = Just $ x `op` y : xs
                           | otherwise = Nothing
infixMaybe _ _ _ _ = Nothing

add = infixMaybe (+) "+"
sub = infixMaybe (-) "-"
mul = infixMaybe (*) "*"
fdiv = infixMaybe (/) "/"

main = print $ calcRPN [add, sub, mul, fdiv] "3 19 + -2 /"
160デフォルトの名無しさん:2012/10/16(火) 00:36:02.75
実装方針が色々あって面白いな
golfみたいに短さ優先で書いたり、小さな言語処理系みたいに書いたり
161デフォルトの名無しさん:2012/10/16(火) 07:58:20.66
ときどき実装方針にまでケチつける出題者いるけど
そういうのは多様性が無くなってツマラン
162デフォルトの名無しさん:2012/10/16(火) 08:11:14.10
型チェックをザルのように通り抜けForthに落ちていく様子をご覧下さい
163uy:2012/10/16(火) 10:35:53.46
クラウド(笑)の次はnode.jsやら、JavaScript関係のバズワードで攻めるようだね
ひとつ言ってやるけど、
世界規模の自然災害や、戦争でも起こらない限り、
今までやってた常識がある日突然に覆る事は無い
常識が覆るペースは非常に遅い
なのでその「常識」を覆している最中に、
もっと良い物が出てくる可能性がITにおいては多々ある
どこに始まってもいないJSに未来を見れるのだろうか
164デフォルトの名無しさん:2012/10/16(火) 19:39:00.04
>>162
どんな入力値をいれたら鼻から悪魔が出たの?
165デフォルトの名無しさん:2012/10/16(火) 19:43:59.47
>>163
クラウドにスマホ、html5といったイノベーションが起こったよ
これで、これまでの常識が変わったと思わないなんて、よっぽど狭い世界で生きてんだろうな
166デフォルトの名無しさん:2012/10/16(火) 19:45:49.15
>>137
わざわざドキュメント書くアホなんて、大手で大卒雇ってるアホ連中だろwwww
167デフォルトの名無しさん:2012/10/16(火) 19:53:07.58
どこを見たってjsだけだよw
railsホスティングサービスやruby2.0なんて出だしでこけた感しかない
168デフォルトの名無しさん:2012/10/16(火) 19:53:50.68
ドキュメント残さないヤツは糞だろ
一人で仕事してるようなヤツじゃなければ普通書く
キッチリ書くかザックリ書くかは規模による
169デフォルトの名無しさん:2012/10/16(火) 19:56:50.38
コードに書かれたコメントを見ることはあってもドキュメントを見ることなんてないな
わざわざexcelにドキュメント残すって、コードとドキュメントに整合性とれないだろw
170デフォルトの名無しさん:2012/10/16(火) 20:09:13.38
ザックリしたドキュメントってのは
「こうあるべきだよな」
っていうのを書くのであって
コーディングの内容書くわけじゃないんだぞ
整合性取れないって…
171デフォルトの名無しさん:2012/10/16(火) 20:34:21.04
クラウドといえばAmazon Elastic MapReduceにRuby, Perl, PythonはあるがJSは無いよ
172デフォルトの名無しさん:2012/10/16(火) 22:54:22.14
herokuがやってるからイラナイよ
それよか、railsのホスティングサービスw
173デフォルトの名無しさん:2012/10/16(火) 22:57:31.07
azureでも動くな。amazonからは負け犬臭がする
174デフォルトの名無しさん:2012/10/17(水) 07:25:57.97
herokuでmapreduceって何の話だよ。自分でHadoopセットアップすんの?
azureでのmapreduceはF#しか使えない上にamazonより面倒くせぇ
175デフォルトの名無しさん:2012/10/17(水) 10:31:51.98
Debian "Wheezy" で自分の"クラウド"を展開
ttp://www.debian.org/News/2012/20120425
176デフォルトの名無しさん:2012/10/17(水) 15:02:31.49
>>140
"1 2 3"的なバグッた式でも正常終了して値を返す
腐ったプログラム書いてる奴ばっかだな。
こういうのも静的チェックで捕まえられると良いんだが。
177デフォルトの名無しさん:2012/10/17(水) 16:01:40.12
>>176
もし100万行書いた後でそうなら腐ったと言ってもいいよね
しかし数十行ではどうだろう
怠惰かもしれないが腐敗ではないと思う
178デフォルトの名無しさん:2012/10/17(水) 17:46:59.83
最終状態のスタックトップを答えとする仕様もありえるから、
明らかに不正とも言い切れない
179デフォルトの名無しさん:2012/10/17(水) 18:27:53.34
型チェックは減点法のようなものなので短いコードが大量に減点されることはない
がんばって書いた量に比例してチェックが厳しくなる
180デフォルトの名無しさん:2012/10/17(水) 18:29:35.20
typescript最強ですね。わかります。
181デフォルトの名無しさん:2012/10/17(水) 19:34:06.22
>>140
Squeak Smalltalk で。かなり手抜きだけど。

((Scanner new scanTokens: '3 19 + -2 /')
   inject: OrderedCollection new into: [:stack :elem |
      (elem isKindOf: Number)
         ifTrue: [stack add: elem]
         ifFalse: [stack add: ((stack atLast: 2) perform: elem with: (stack removeLast: 2) last)].
      stack]) last "=> -11 "
182デフォルトの名無しさん:2012/10/17(水) 21:10:48.96
素晴らしいね

そこにスタックに積んだ数字を全て足す"sum"や
exp(x)を返す"exp"を後から追加できると
ポイント高いよ
183デフォルトの名無しさん:2012/10/17(水) 22:49:07.56
こういうこと?

((Scanner new scanTokens: '5 4 - exp 3 -2 1 sum')
   inject: OrderedCollection new into: [:stack :elem |
      stack add: (true caseOf: {
         [elem isKindOf: Number] -> [elem].
         [(Number selectors includes: elem) and: [elem numArgs isZero]]
            -> [stack removeLast perform: elem].
         [(Collection selectors includes: elem) and: [elem numArgs isZero]]
            -> [(stack removeFirst: stack size) perform: elem]}
         otherwise: [(stack atLast: 2) perform: elem with: (stack removeLast: 2) last]).
      stack]) last "=> 4.718281828459045 "
184デフォルトの名無しさん:2012/10/18(木) 00:44:04.45
i も受け付けるけど数値でなく関数扱いなのはご愛敬。リファクタってちょっとすっきり。

((Scanner new scanTokens: '5 4 - i exp 3 2 - cos - 1 sin i - 2 3 4 sum sqrt')
   inject: OrderedCollection new into: [:stack :elem |
      stack add: (true caseOf: {
         [elem isKindOf: Number] -> [elem].
         [(Number selectors includes: elem) and: [elem numArgs isZero]]
            -> [elem value: stack removeLast].
         [(Collection selectors includes: elem) and: [elem numArgs isZero]]
            -> [elem value: (stack removeLast: stack size)]}
         otherwise: [(stack removeLast: 2) reduce: elem]).
      stack]) last "=> 3.0 + 0 i "
185デフォルトの名無しさん:2012/10/18(木) 03:28:12.03
>>159>>182を追加

extension (x:xs) "sum" = Just $ [sum (x:xs)]
extension (x:xs) "exp" = Just $ exp x : xs
extension _ _ = Nothing


> calcRPN [add, sub, mul, fdiv, extension] "5 4 - exp 3 -2 1 sum"
Just 4.718281828459045


http://ideone.com/5fqag
186デフォルトの名無しさん:2012/10/18(木) 19:08:38.87
TypeScript、凄くいいね。もうこれで決まりだわ。
187デフォルトの名無しさん:2012/10/18(木) 20:45:37.78
静的型付け言語は書き直しがダルいから
最初から拡張性あるように組む必要があって、
動的型付け言語は状況に応じてバンバンコード書き変えて、
行き当たりばったり上等!って感じ

上のSmalltalkとHaskellのコードに良く現れてる
188デフォルトの名無しさん:2012/10/18(木) 21:14:41.77
C++の拡張をあきらめたからJavaがあるのだぞ
189デフォルトの名無しさん:2012/10/18(木) 23:33:31.43
>>181,185
いいぞ、もっとやれ。昔に見た流れだ。
それで沢山の大学生たちを地獄に落としてやれ
190デフォルトの名無しさん:2012/10/19(金) 00:27:21.76
タイプスクリプトまだテクニカルプレビューだぞ?
191デフォルトの名無しさん:2012/10/19(金) 00:35:14.26
短く書こうとするとどんどん言語関係なくなるなー
function calc ($s) {
$a = -split $s
for ($($i=2; $s=$a[0]); $i -le $a.count; $i+=2)
{ $s = "($s)$($a[$i])($($a[($i-1)]))"}
iex $s
}

calc '3 19 + -2 /'
>> -11
192デフォルトの名無しさん:2012/10/19(金) 00:41:33.91
5000行ぐらいの長い関数があるのですが、
その内の一部を選択して、コマンド打つだけで
正確に関数に抜き出してくれるツールはありませんか?

LL言語用のものならなんでもいいです。
正確ってことが重要なので、それにより動作が
変わってはだめです。
193デフォルトの名無しさん:2012/10/19(金) 01:00:59.77
>>192
自分で作るが良い
194デフォルトの名無しさん:2012/10/19(金) 01:14:23.40
5000行の関数書くようなクズを助けたがるプログラマなんているわけがねぇ
195デフォルトの名無しさん:2012/10/19(金) 05:23:27.28
>>191

>>140には「演算セットは入れ替え可能なこと」ってあるから
'/'の振舞いをdivからquoに変更して、
数は整数以外はエラーになるよう変えてみたら?

その修正にどの程度書き換えが必要かで
言語の特徴も見えてくるんじゃない?
196デフォルトの名無しさん:2012/10/19(金) 20:35:28.65
>>157のRuby実装をアップデートしてみた
 http://play.island.ac/codepaste/code?id=25
197デフォルトの名無しさん:2012/10/19(金) 21:32:25.33
ninjaの元ネタってニューロマンサーかな?
198デフォルトの名無しさん:2012/10/19(金) 22:00:43.23
>>195
> 数は整数以外はエラーになるよう変えてみたら?

LLは(動的型言語は)こういう制限かける方向は苦手。
間違った入力する奴が悪いってスタンスだから。
199デフォルトの名無しさん:2012/10/19(金) 22:17:13.70
Squeak Smalltalk を、前のよりまじめに仕様に従ったかんじで整えてみた。

| RPNcalc |
RPNcalc := [:str |
   | tokens mathOps stackOps stack detectSymFrom |
   tokens := Scanner new scanTokens: str.
   mathOps := {#(+). #(-). #(/ quo:). #(*). #(exp)}.
   stackOps := {#(sum). {#prod. [:xs | xs reduce: #*]}}.
   stack := OrderedCollection new.
   detectSymFrom := [:sym :ops | ops detect: [:pair | pair first = sym] ifNone: []].
   tokens do: [:tok |
      | result |
      tok isInteger ifTrue: [result := tok].
      (detectSymFrom value: tok value: mathOps) ifNotNilDo: [:pair |
         result := pair first numArgs caseOf: {
            [0] -> [pair last value: stack removeLast].
            [1] -> [(stack removeLast: 2) reduce: pair last]}].
      (detectSymFrom value: tok value: stackOps) ifNotNilDo: [:pair |
      result := pair last value: (stack removeLast: stack size)].
      result ifNotNil: [stack add: result] ifNil: [self error]].
   stack last
].

RPNcalc value: '3 19 + -2 /'. "=> -11 "
RPNcalc value: '11 3 19 + -2 / +'. "=> 0 "
RPNcalc value: '1 2 + 3 4 5 sum'. "=> 15 "
RPNcalc value: '5 4 - exp'. "=> 2.718281828459045 "
"RPNcalc value: '1 2.0 +'. => Error "
RPNcalc value: '12 5 /'. "=> 2 "
RPNcalc value: '2 3 4 prod'. "=> 24 "
200デフォルトの名無しさん:2012/10/19(金) 22:27:04.14
スマホやブラウザをjs+html5で弄れる時代のsmalltalkerって、
ガンダムエンジンをこさえているテム・レイ的な哀愁が背中に漂ってるよね。
父さん、こんな古いものを…
201デフォルトの名無しさん:2012/10/19(金) 23:04:50.67
jsに言われちゃな
202デフォルトの名無しさん:2012/10/19(金) 23:18:51.16
>>165 >>167
つかそれ以前に、これだけ使われに使われまくってるjavascriptを
逆説的でもなく本気で「始まってない」と評してるあたり、
この人間の意見は聞く価値もがない
203デフォルトの名無しさん:2012/10/19(金) 23:26:24.88
昔始まり、やがて時代遅れとなり、隠居しようとしたら
老人ホームから連れてきてサイボーグ化された
204デフォルトの名無しさん:2012/10/19(金) 23:28:27.80
始まるっていうのは、ようするにスタートのことだよ。
マラソンで折り返し地点にいるのにスタートするとは言わない。

始まるというのは、使われてない状態からスタートしたばかり時のこと。

故に、普及しているものは、始まっていない。
205デフォルトの名無しさん:2012/10/19(金) 23:44:28.77
今のLLで書けば>>199はもっと短く書けるの? 誰か翻訳して!
206デフォルトの名無しさん:2012/10/19(金) 23:47:08.79
jsだと8割くらいになる
207デフォルトの名無しさん:2012/10/20(土) 00:12:34.70
特定の分野なら短く書ける言語を
DSLという。
208デフォルトの名無しさん:2012/10/20(土) 00:13:57.94
短くかけると評判のpythonではどうなるかね?
209デフォルトの名無しさん:2012/10/20(土) 00:14:54.58
>>208
js厨乙
210デフォルトの名無しさん:2012/10/20(土) 00:19:00.74
特定の問題を解決するのに短くかけたからといって
違う問題でも短く書けるとは限らないんだよな。
211デフォルトの名無しさん:2012/10/20(土) 02:07:53.46
とりあずRubyに直訳(一部意訳)したので添削・スリム化は頼む

class Object; def integer?; false end end
def scan_tokens(str)
str.split(" ").map{|s| case s; when /^-?\d+$/; s.to_i; when /^-?\d+\.\d+$/; s.to_f else s.to_sym end}
end

def rpn_calc(str)
tokens = scan_tokens(str)
math_ops = [[:+], [:-], [:/], [:*], [:exp, Math.method(:exp)]]
stack_ops = [[:sum, ->xs{xs.inject(:+)}], [:prod, ->xs{xs.inject(:*)}]]
stack = []
detect_sym_from = ->(sym, ops){ops.detect{|pair| pair.first == sym}}
tokens.each{|tok|
result = tok if tok.integer?
if pair = detect_sym_from[tok, math_ops]
result = case pair.last
when Method, Proc; pair.last[stack.pop]
when Symbol; stack.slice!(-2,2).inject(pair.last)
end
end
if pair = detect_sym_from[tok, stack_ops]
result = pair.last[stack.slice!(-stack.size, stack.size)]
end
result ? stack << result : raise
}
stack.last
end

p rpn_calc('3 19 + -2 /') #=> -11 "
212デフォルトの名無しさん:2012/10/20(土) 02:16:07.46
smalltalkとRubyがあまり変わらない件
直訳だからそうなるのか
213デフォルトの名無しさん:2012/10/20(土) 08:20:28.45
>>159のfdivを置き換え

ndiv = infixMaybe div "/"


> calcRPN [add, sub, mul, ndiv] "1 2.0 +"
Nothing
> calcRPN [add, sub, mul, ndiv] "12 5 /"
Just 2


ghcでコンパイルするときは-XNoMonomorphismRestrictionがいるかも
214デフォルトの名無しさん:2012/10/20(土) 12:27:02.99
ここまでC#もJavaScriptも無し
215デフォルトの名無しさん:2012/10/20(土) 13:58:55.74
その手の言語の中ではSmalltalk良いよね
216デフォルトの名無しさん:2012/10/20(土) 15:09:43.32
ラピッドラピッド五月蠅いjs厨が
今必死で超級ラピッド開発してるから
正座して待ってろ
217デフォルトの名無しさん:2012/10/20(土) 15:36:23.16
+   +
  ∧_∧  +
 (0゚・∀・)   ワクワクテカテカ
 (0゚∪ ∪ +
 と__)__) +
218デフォルトの名無しさん:2012/10/20(土) 15:39:07.25
0 + '' + [] + {} + function(){return 0;};

こんだけ型の違う値を足しても実行時エラーすら出ないJSで
ラピッド開発とかマゾなの?
219デフォルトの名無しさん:2012/10/20(土) 15:56:45.94
# Python 3.x 入力は整数のみ、無入力は 0
import operator, sys
ops = {'+': operator.add,
   '-': operator.sub,
   '*': operator.mul,
   '/': operator.floordiv,}
def rpm(line):
  stack = []
  for elm in line.split():
    if elm in ops:
      try:
        y, x = stack.pop(), stack.pop()
      except IndexError:
        raise ValueError
      try:
        stack.append(ops[elm](x, y))
      except ZeroDivisionError:
        raise ZeroDivisionError
    else:
      try:
        stack.append(int(elm))
      except:
        raise SyntaxError
  if len(stack) == 0:
    return 0
  elif len(stack) == 1:
    return stack[0]
  else:
    raise ValueError

print(rpm('3 19 + -2 /')) #=> -11
220デフォルトの名無しさん:2012/10/20(土) 16:06:12.58
ごめん、sysのimportは必要ないや
221デフォルトの名無しさん:2012/10/20(土) 17:53:50.02
>>219
一度例外を捕まえてから
同じ例外をraiseするのは
何か意味があるの?
222デフォルトの名無しさん:2012/10/20(土) 18:41:46.15
もしかして
どんな厳しいチェックをしてもここで assert y!=0 を保証するのは不可能という意味なのか
223デフォルトの名無しさん:2012/10/20(土) 19:16:49.81
整数用と実数用でコード共有できてるHaskellさんは偉い
さすが関数記述用DLSやで
224デフォルトの名無しさん:2012/10/20(土) 19:24:45.68
ダイビングロングシュート?
225デフォルトの名無しさん:2012/10/20(土) 20:16:24.40
>>224
デビルライトソードじゃね?
226デフォルトの名無しさん:2012/10/20(土) 20:26:11.49
227デフォルトの名無しさん:2012/10/20(土) 20:36:33.38
ヨガファイア
228デフォルトの名無しさん:2012/10/20(土) 21:34:01.34
それにしても皆ほんとまじめに書くな、お兄さんびっくりだ
229デフォルトの名無しさん:2012/10/20(土) 21:53:34.06
>>196を更にアップデート
http://play.island.ac/codepaste/code?id=26

主な変更点:
・計算結果(スタックの先頭値)を変数へ保存/参照できるようになりました
 ワード(演算子)は ! で、構文は「<expr> <symbol> "!"」です
  001> x
  **** ERROR **** Illegal input: 'x'  # 変数 x はまだ定義されていない
  001> 1 2 + :x !  # 式 1 2 + の計算結果を変数 x へ保存
  ==>
  002> x  # 変数 x を参照
  ==> 3  # (今度はエラーとならず、) x の値がスタックに積まれる
  003>
・空白等を含む文字列リテラル "..." および記号リテラル :sym をサポート
・スタックの表示書式を切り替えるワード debug と nodebug を追加
230デフォルトの名無しさん:2012/10/20(土) 21:58:48.80
>>228
>>229以外はそんなに真面目でも無いと思う
231デフォルトの名無しさん:2012/10/20(土) 22:08:11.21
こいつらホントに遅いな。
js版は音声認識に対応して
今は駅前でテスターを募集している
232デフォルトの名無しさん:2012/10/20(土) 22:09:25.75
JSプログラマはコードは書けないが妄想は書ける
233デフォルトの名無しさん:2012/10/20(土) 22:34:05.95
>>231
俺のjsは尻文字の入出力を実装した
ケツ同士でのやりとりが出来る
234デフォルトの名無しさん:2012/10/20(土) 22:50:15.68
>>233
俺のjsはハイブリットにした。
3と19の間に「次」と言う事で
319と区別できる
235デフォルトの名無しさん:2012/10/21(日) 00:20:13.68
>>206はたかが20行程度のコードを書くのに
一体何時間かかるの?>>199の8割で書けるんでしょ?
236デフォルトの名無しさん:2012/10/21(日) 02:26:14.38
>>235
ラピッド開発は早けりゃ良いってもんじゃない
237デフォルトの名無しさん:2012/10/21(日) 07:56:02.78
やっぱり動的型ではSmalltalk, 静的型ではHaskellが現時点で最強だな
238デフォルトの名無しさん:2012/10/21(日) 08:18:00.89
古いほうが勝つわな
家柄的な意味で
239デフォルトの名無しさん:2012/10/21(日) 08:40:52.19
コードは実力、言語は人気
240デフォルトの名無しさん:2012/10/21(日) 10:13:14.28
LLって存在意義ねーなー
241デフォルトの名無しさん:2012/10/21(日) 10:35:38.85
Haskellはともかく、Smalltalkには負けたくない
242デフォルトの名無しさん:2012/10/21(日) 10:58:33.52
この手のお題でSmalltalkに勝つのは難しいと思うぞ

よく似た粒度のお題200個くらい解かせて平均したら短さダントツだった
http://cast-a-spell.at.webry.info/201001/article_7.html
243デフォルトの名無しさん:2012/10/21(日) 11:00:26.57
>>240
意義があってもなくても使わなければゼロオーバーヘッドだから許される
と言い出したやつが今の世界をつくったと思う
244デフォルトの名無しさん:2012/10/21(日) 11:05:54.35
200題てどんだけ暇人だよ
245デフォルトの名無しさん:2012/10/21(日) 11:11:56.24
Smalltalkって>>184>>199のように各行みっしり詰まったコードになりがち
単純に行数少ないからコード量少ないとは言えない感じ
246デフォルトの名無しさん:2012/10/21(日) 11:24:49.95
(defun rpn (string)
  (loop with operators = '(("*" . *)
                           ("+" . +)
                           ("-" . -)
                           ("/" . /))
     with place
     for start = 0 then (1+ end)
     for end = (or (position #\ string :start start)
                   (length string))
     for operator = (cdr (assoc (subseq string start end) operators :test #'equal))
     do (push (if operator
                  (apply operator (reverse (list (pop place) (pop place))))
                  (parse-integer string :start start :end end))
              place)
     until (= end (length string))
     finally (if (= (length place) 1)
                 (return (pop place))
                 (error "~S is not a valid argument to RPN." string))))

(rpn "3 19 + -2 /")
247デフォルトの名無しさん:2012/10/21(日) 12:23:54.89
sum等の2項演算子じゃない演算に対応してなく、
整数実数両対応でもないコードを
いまさら上げる心意気に感動した
248デフォルトの名無しさん:2012/10/21(日) 12:47:33.65
お前それsigned/unsigned両対応でも同じ事言えんの?
249デフォルトの名無しさん:2012/10/21(日) 12:49:24.07
>>247
いいじゃん。いろいろ出てきたほうが楽しいから
もっとも、こんなんで Common Lisp は短く書けるドヤ!とか主張しだしたら叩くけど
250デフォルトの名無しさん:2012/10/21(日) 16:13:30.79
>>246をSqueak Smalltalkに超訳してみたw

| rpn |
rpn := [:string |
   | stream operators place |
   stream := string subStrings readStream.
   operators := {#* -> #*. #+ -> #+. #- -> #-. #/ -> #//} as: Dictionary.
   place := OrderedCollection new.
   [stream atEnd] whileFalse: [
      | next |
      place add: (operators at: (next := stream next)
         ifPresent: [:op | (place removeLast: 2) reduce: op]
         ifAbsent: [next asInteger])].
   place size = 1
      ifTrue: [place removeLast]
      ifFalse: [self error: string, ' is not a valid argument to RPN']].

rpn value: '3 19 + -2 /'. "=> -11 "
251デフォルトの名無しさん:2012/10/21(日) 19:32:21.22
Lispの真価は、10個以上の異なる問題を、どの問題でも使っていいような
共通ルーチンの作成を許して解かせるようなソースコードで
発揮されると聞いたことがある。
ただし、確認してみたことはない
252デフォルトの名無しさん:2012/10/21(日) 19:53:08.49
>>250からのRuby

class Enumerator; def end?; (peek; false) rescue true end end

def rpn(string)
stream = string.split(" ").each
operators = {"*"=>:*, "+"=>:+, "-"=>:-, "/"=>:/}
operators.default_proc = ->(_,k){ k.to_i }
place = []
until stream.end?
tok = operators[stream.next]
place << (tok.kind_of?(Symbol) ? place.slice!(-2,2).inject(tok) : tok)
end
if place.size == 1
place.shift
else
raise "#{string} is not a valid argument to RPN"
end
end

p rpn('3 19 + -2 /') #=> -11
253uy:2012/10/22(月) 05:56:21.86
>>211 >>252
インデントすらつけないで2chにソース投稿してる奴は死ねよ
何年2chやってんだ?
ソースに&んbsp;付与するスクリプトくらいさっさと作れカス
254デフォルトの名無しさん:2012/10/22(月) 07:18:55.79
>>248
いわゆるC言語のunsigned intに対応


import Foreign.C.Types


> calcRPN [add, sub, mul, ndiv] "1 2 -" :: Maybe CUInt
Just 4294967295


http://ideone.com/zcxWmv
255デフォルトの名無しさん:2012/10/22(月) 13:47:24.80
256デフォルトの名無しさん:2012/10/23(火) 00:00:36.05
(defun rpn (string)
(loop with operators = '((* * 2)
(+ + 2)
(- - 2)
(/ / 2)
(sin sin 1)
(cos cos 1)
(sqrt sqrt 1)
(exp exp 1)
(sum + all))
with place
for start = 0 then (1+ end)
for end = (or (position #\ string :start start)
(length string))
for atom = (read-from-string string t nil :start start :end end)
for (nil operator number-of-operands) = (assoc atom operators)
when (eq number-of-operands 'all)
do (setf number-of-operands (length place))
do (print atom)
do (push (cond (operator
(prog1 (apply operator
(nreverse (subseq place
0 number-of-operands)))
(setf place (subseq place number-of-operands))))
((numberp atom) atom)
(t (error "~S is not a valid argument to RPN." atom)))
place)
until (= end (length string))
finally (if (= (length place) 1)
(return (pop place))
(error "~S is not a valid argument to RPN." string))))
257デフォルトの名無しさん:2012/10/23(火) 06:28:01.16

253 :uy:2012/10/22(月) 05:56:21.86
>>211 >>252
インデントすらつけないで2chにソース投稿してる奴は死ねよ
何年2chやってんだ?
ソースに&んbsp;付与するスクリプトくらいさっさと作れカス
258デフォルトの名無しさん:2012/10/23(火) 07:10:24.86
他LLからSmalltalkに移行 => エディタやDVCSなど全環境を捨ててSmalltalk独自環境へ引っ越し

結論: そこまでのメリットがSmalltalkに無い
259デフォルトの名無しさん:2012/10/23(火) 08:00:44.93
最強の環境を選べなかったやつらは死滅するという設定なので
環境は捨てるものではなく滅ぼされるもの
260デフォルトの名無しさん:2012/10/23(火) 08:44:03.57
滅びた環境なんてまず無いw
261デフォルトの名無しさん:2012/10/23(火) 09:39:10.54
Smalltalkには別に移行する必要なんかはないんだよ
ちょっとそこで過ごしてみさえすれば
精神と時の部屋みたいなもんで
たとえごく短時間でもちゃんと鍛錬しさえすれば
出てくるときには戦闘力が上がっている
262デフォルトの名無しさん:2012/10/23(火) 11:29:08.52
>>256
なんでSETFなの?
263デフォルトの名無しさん:2012/10/23(火) 12:12:12.33
http://www.geocities.jp/m_hiroi/xyzzy_lisp/abclisp01.html
データをセットするには setf または setq という関数を使います。
Common Lisp では setf を使うことが推奨されていますが、
M.Hiroi は古い人間なので setq を好んで使っています。
皆さんは setf を使ってくださいね。
264デフォルトの名無しさん:2012/10/24(水) 22:14:54.28
>>261
そういう「使ったらレベルアップする」系の話は
関数型言語では良く聞くけど、Smalltalkでも成り立つの?
265デフォルトの名無しさん:2012/10/25(木) 00:45:54.54
そりゃ何でも新しい言語の習得中は、何かしらの「レベルアップ感」はある
266デフォルトの名無しさん:2012/10/25(木) 01:02:52.28
丸暗記系ではレベルアップ感がないという人もいる
267デフォルトの名無しさん:2012/10/25(木) 01:41:58.38
まあSmalltalkなんざぁ、言語としては最もシンプルな部類のもんなんだから、
レベルアップとかそうしゃっちょこばらずにほんの5分でも触ってみたらいいと思うんだよね
http://amber-lang.net/learn.html

そりゃXEROX直系由来の環境とかライブラリとかやっかいなのも色々あるかもしれんけど、
とりあえずは一番大事な「メッセージング」っていう唯一のドグマに納得できてからでも遅くないというか
268デフォルトの名無しさん:2012/10/25(木) 11:38:56.93
興味無いことがレベルアップしても仕方ないんだよね
むしろ邪魔
269uy:2012/10/25(木) 12:29:40.30
君らって言葉が幼稚だよね
270デフォルトの名無しさん:2012/10/25(木) 12:31:09.27
XエXロX
271デフォルトの名無しさん:2012/10/25(木) 22:01:42.05
同じ意味の言葉が二つあって少なくとも一方は幼稚だとしたらどうしますか
1. 一つしかなければ幼稚にならないから一つにする
2. 気がすむまで新しい言葉を作る
272デフォルトの名無しさん:2012/10/25(木) 22:05:21.60
3.幼稚の定義を振り返る
273デフォルトの名無しさん:2012/10/25(木) 22:09:40.64
大切なのは幼稚より中身
274デフォルトの名無しさん:2012/10/25(木) 22:34:15.94
7点
275デフォルトの名無しさん:2012/10/25(木) 22:35:11.03
>>267
5分も触ったらメッセージングなんて
わざわざ構文でサポートする程のモンじゃないって
分かってしまうよね
それを言語のコアに据えるSmalltalkが時代遅れの骨董品ってこともね
276デフォルトの名無しさん:2012/10/25(木) 22:47:46.15
Schemeは時々[]を使うようだが、物凄くどうでもいい用途に使ってるよな
なぜlambdaを[]にしないのか理解できない
277デフォルトの名無しさん:2012/10/25(木) 23:17:27.17
まあHaskell使っとけってことだ
278デフォルトの名無しさん:2012/10/26(金) 00:26:31.37
>>275
あれってメッセージングなの?たんなる動的呼び出しだろ
279デフォルトの名無しさん:2012/10/26(金) 02:05:11.46
動的呼び出しごときで「ドグマ」とか言い出しちゃうSmalltalkerって...
280デフォルトの名無しさん:2012/10/26(金) 06:48:00.87
呼び出しで括弧を書かないためにセレクタを書いてるんだろ
セレクタも括弧も両方書く言語はLispと同じかそれ以上に酷い
Haskellの方がまし
281デフォルトの名無しさん:2012/10/26(金) 07:11:03.36
Lispに酷いって括弧の量のこと?
あんなもんただの慣れだぞ
慣れるとむしろ優先度とか余計なこと考えなくていいから読みやすい
282デフォルトの名無しさん:2012/10/26(金) 08:19:07.78
まあLisp時代に戻れば多言語とか余計なこと考えなくてよいよね
283デフォルトの名無しさん:2012/10/26(金) 08:53:18.74
>>278
メッセージングは方便だよ。
本質はできるだけ多くの事(呼び出しも含め)を動的(遅延結合)にすること。
それを貫くことで、ソフトウエアを停止させずに、長く、必要なら部分を変化・置き換えつつ
運用し続けることが可能だって示すところがSmalltalkで示したかったこと…ってアラン・ケイも総括している。
http://squab.no-ip.com/collab/uploads/61/IsSoftwareEngineeringAnOxymoron.pdf
284デフォルトの名無しさん:2012/10/26(金) 11:22:33.52
そんなことあらんけー
285デフォルトの名無しさん:2012/10/26(金) 11:35:23.00
ここから濃厚なプログレスレ
286デフォルトの名無しさん:2012/10/26(金) 20:53:54.36
セレクタとメソッドの関に一枚噛ませたって感じだわな。
287デフォルトの名無しさん:2012/10/26(金) 23:00:25.08
箱庭に閉じこもってOS含む外の環境が無いふりをするなら
動き続けることは難しく無いわな
288デフォルトの名無しさん:2012/10/26(金) 23:10:45.11
MessageNotUnderstood: UndefendedObject>>275
我々はか弱い。 だからあまりいじめるな
289デフォルトの名無しさん:2012/10/27(土) 04:31:12.42
なんで、スマホやタブレットPCが普及したのにダイナブックじゃないんですかー。
やぁだぁーーーーーーー
290デフォルトの名無しさん:2012/10/27(土) 07:28:41.43
そんなに普及したいか?
自転車でいうとママチャリだぞ
291デフォルトの名無しさん:2012/10/27(土) 07:49:01.17
T型フォードくらいには言ってくれ

http://web.archive.org/web/20090208073444/http://itpro.nikkeibp.co.jp/a/it/alacarte/interview0703/alan_9.shtml
私の少年期を過ごした農場には、T型フォードが数台あった。1920年代のしろものだ。
それも本物の自動車にも関わらず、たった数百個の部品でできていた。
だから12歳の子供でも、週末に友達と一緒に、自動車全体を分解し、
それを元通りに組み立て直すことも可能だった。ところが現代において、
そんなことはありえない。自動車には数百万個もの半導体が組み込まれている。
トランスミッションのシステムも極めて複雑化している。
ちょっと改造してみようと思っても、自動車の原理全体を学ぶことは容易ではない。

これは世の中の進歩にとって重大な問題だと考えている。子供たちが、
大人の世界から隔離されかねない。こうしたテクノロジーへの関心が急速に
冷めているのも理解できる。
292デフォルトの名無しさん:2012/10/27(土) 07:59:55.37
Inventing Fundamental New Computing Technologies
http://www.viewpointsresearch.org/html/work/ifnct.htm

STEPS プロジェクトご紹介その2
http://d.hatena.ne.jp/propella/20111022/p1
293デフォルトの名無しさん:2012/10/27(土) 09:13:49.67
関心を持つ必要がないものを隔離すればその労力が他の適切な分野に供給されるはずだ
ということで隔離してるんだけど
壁を作って隔離してみたら、壁自体に興味を持ってトンネルを掘る子供が増えたりして
294デフォルトの名無しさん:2012/10/27(土) 11:08:00.57
骨董品の話しはもういいからさー
コード出してくれよ。コードを
295デフォルトの名無しさん:2012/10/27(土) 13:25:08.18
問題

"3 19 [ + -2 / ] $" という文字列に対し
配列 ['3', '19', ['+', '-2', '/'], '$'] を返すような関数を書け
入れ子の深さは制限しないこと
296デフォルトの名無しさん:2012/10/27(土) 13:43:20.63
宿題は自分でやれ
297デフォルトの名無しさん:2012/10/27(土) 14:18:46.37
s = "3 19 [ + -2 / ] $"
s.split.inject([[]]){|m, t|
  case t
  when "["; m << []
  when "]"; m[-2] << m.pop
  else m.last << t
  end
  m
}.first #=> ["3", "19", ["+", "-2", "/"], "$"]
298デフォルトの名無しさん:2012/10/27(土) 16:07:46.47
もう全部evalひとつでいいんじゃないかな

$str = "3 19 [ + -2 / ] $" -replace "\s", "','" -replace "'\[',", "(" -replace ",'\]'", ")"
iex "'$str'"
299デフォルトの名無しさん:2012/10/27(土) 19:42:30.70
import Control.Applicative ((<$>), (*>), (<*))
import Text.Parsec
import Text.Parsec.String

data Tree a = Leaf a | Node [Tree a] deriving (Eq, Ord, Show, Read)

tree, node, leaf :: Parser (Tree String)
tree = (char '[' *> node <* char ']') <|> leaf
node = Node <$> sepBy (spaces *> tree <* spaces) spaces
leaf = Leaf <$> many1 (noneOf " []")

main = parseTest (node <* eof) "3 19 [ + -2 / ] $"
300デフォルトの名無しさん:2012/10/27(土) 19:48:55.76
>>229を、またまたアップデート
 http://play.island.ac/codepaste/code?id=27

主な変更点:
・データ型として配列をサポートし、その操作ワードもいくつか追加しました
  [1 2 3] ary-length ==> 3 # 配列の長さ
  [[:a :b] [:c :d]] ary-concat ==> [:a :b :c :d] # 配列の連結
・ワードの塊を無名手続きであるブロックで表現できるようになりました
  [1 2 3] { 10 * } ary-map ==> [10 20 30] # 配列上の写像
・ブロックをワード ! (>>196)を使って記号と束縛することで、手続きを定義できます
  { :x ! :y ! x y x y > cond } :max ! # 手続き max を定義
  1 3 max ==> 3 # (他の組み込みワードと同様に)ユーザ定義ワード max もコールできる
 ただし、手続きは再帰的に定義できないので、計算体系としては不完全です

なお、規模が1Kstepを超えて全体の把握がしづらくなってきたので、文書化してみました
 http://www.h6.dion.ne.jp/~machan/tmdoc/example/RPN.book/html/
301デフォルトの名無しさん:2012/10/27(土) 23:00:25.06
| string modified |
string := '3 19 [ + -2 / ] $'.
modified := {'''[''' -> '('. ''']''' -> ')'}
   inject: string subStrings asString
   into: [:str :assoc | str copyReplaceAll: assoc key with: assoc value].
(Scanner new scanTokens: modified) first   "=> #('3' '19' #('+' '-2' '/') '$') "
302デフォルトの名無しさん:2012/10/27(土) 23:11:24.03
括弧の数が合わないのにエラーも出さず
しれっと終了するプログラムには苦笑を禁じ得ない
303デフォルトの名無しさん:2012/10/28(日) 00:53:09.85
304デフォルトの名無しさん:2012/10/28(日) 00:55:42.29
gawkにも完敗のRubyとSmalltalk
305デフォルトの名無しさん:2012/10/28(日) 01:48:33.70
この程度なら無理にロジック考えんでも引数を配列リテラルに組み直してevalで十分だと思うんだけど
皆頑張るねぇ
306デフォルトの名無しさん:2012/10/28(日) 09:18:31.40
適当に変換してevalが悪いとは全然思わないが
例えば "3 19 [ + -2 / ] $ (4)" が
['3', '19', ['+', '-2', '/'], '$', [ '4' ]]
を返したりするのはアウト
307デフォルトの名無しさん:2012/10/28(日) 09:22:13.74
>>302
構文解析はコンパイル時だから、実行時よりも気が楽だな
旅の恥はかき捨て
308デフォルトの名無しさん:2012/10/28(日) 09:22:30.09
言語の記述力比較が目的だとすれば、ある程度似せたアルゴリズムにする必要があるんじゃないの?
309デフォルトの名無しさん:2012/10/28(日) 10:31:43.77
>>306
空白だけ弄るようにすればなんも問題ないよ
引用符で空白を囲んでる場合は別対応、とかなら他の解含めて書き直しだけどね
310デフォルトの名無しさん:2012/10/28(日) 10:54:06.65
[や]の前後に空白開けてるのがダセェ
eval方式なら不要
311デフォルトの名無しさん:2012/10/28(日) 11:12:39.69
そんなことを言ったら空白必須、改行推奨のbegin end方式はどうなるのか
{}も改行が多いし
312デフォルトの名無しさん:2012/10/28(日) 12:30:31.15
Rubyの>>297をSqueak Smalltalkで

| string |
string := '3 19 [ + -2 / ] $'.
(string subStrings inject: (OrderedCollection with: OrderedCollection new) into: [:vec :ss |
   ss caseOf: {
      ['['] -> [vec add: OrderedCollection new].
      [']'] -> [(vec atLast: 2) add: vec removeLast asArray]}
      otherwise: [vec last add: ss].
   vec]
) first asArray   "=> #('3' '19' #('+' '-2' '/') '$') "
313デフォルトの名無しさん:2012/10/28(日) 15:02:42.27
# Python + pyparsing
from pyparsing import *

INT = Combine(Optional(Word("+-")) + Word("123456789"))
ATOM = INT | Word("+-/", max=1) | "$"
LIST = Forward()
VALUE = ATOM | LIST
LIST << Suppress("[") + Group(ZeroOrMore(VALUE)) + Suppress("]")
INPUT = OneOrMore(VALUE)

print INPUT.parseString("3 19 [ + -2 / ] $")
#=> ['3', '19', ['+', '-2', '/'], '$']


Rubyのtreetopやparsletで書いたのも見てみたいとリクエストしてみる
314デフォルトの名無しさん:2012/10/28(日) 16:23:30.41
# python
def nest(s):
    a,x,xs = s.split(),0,[]
    while x < len(a):
        if a[x] == '[': xs.append(x)
        if a[x] == ']':
            a[xs[-1]:x+1] = (a[xs[-1]+1:x],)
            x = xs.pop()
        x += 1
    return a
print(nest('3 19 [ + -2 / ] $'))
315デフォルトの名無しさん:2012/10/28(日) 18:03:43.94
>>297をperlで
use 5.016;
use warnings;
use Data::Dump qw(dumpf);

sub parser {
    my @r = ([]);
    foreach(split /\s+/, shift) {
        given($_) {
            when('['){ push @r, [] }
            when(']'){ push @{$r[-2]}, pop(@r) }
            default{ push @{$r[-1]}, $_ }
        }
    }
    dumpf($r[0], sub{ $_[0]->is_scalar ? {dump => "'${$_[1]}'"} : {} });
}

parser('3 19 [ + -2 / ] $');
316デフォルトの名無しさん:2012/10/28(日) 18:07:52.23
perl Parse::RecDescent使用
use 5.016;
use warnings;
use Parse::RecDescent;

my $parser = Parse::RecDescent->new(<<'EOF') or die;
list: '[' item items ']' { $return = join('', @item[1..$#item]) }
items: item(s?) { $return = join('', map{ ", $_" } @{$item[1]}) }
item: id | list
id: /-?(?:0|[1-9][0-9]*)|[-+\/*\$]/ { $return = "'$item[1]'" }
EOF

sub parser { $parser->list("[ $_[0] ]") || "error" }

say parser('3 19 [ + -2 / ] $');
317デフォルトの名無しさん:2012/10/28(日) 19:15:02.44
メジャーな言語にはパーサライブラリがあるから
この御題じゃ差が付かないな
318デフォルトの名無しさん:2012/10/28(日) 20:10:04.91
パーサライブラリ使ってる回答の間で差というか違いは出てるよ
>>299,313は内部DSLだけど>>316はflex風の外部DSLだし
319デフォルトの名無しさん:2012/10/29(月) 11:24:26.99
外部DSLは、GPL等のライセンスの問題を回避しやすい
320デフォルトの名無しさん:2012/10/29(月) 20:59:19.34
Perl自体には内部DSLを作れるだけの表現能力がある気がする
321デフォルトの名無しさん:2012/10/29(月) 22:06:20.35
もっと動的型や遅延結合を活用できる御題じゃないと
LLである必要がないね
322デフォルトの名無しさん:2012/10/29(月) 22:51:52.34
>>320
能力というと持ち主がいるみたいだけど
その力がその人の内部にあるか外部にあるか考えてもあまり良いことはない
もし必要がない能力だったら持ってる人は損した気分になるかもしれない
重要なのは内か外かではなく使いたい時にいつでも使えるかどうか
323デフォルトの名無しさん:2012/10/31(水) 18:11:48.98
使いたいときにいつでも使えるなんて条件だと、
posix準拠なsh,awk,sedかjs、或いはcぐらいしか選択肢がない
324デフォルトの名無しさん:2012/11/01(木) 07:39:30.80
jsが載ったwebブラウザが走る環境なら
大抵の言語は動くと思うが
325デフォルトの名無しさん:2012/11/01(木) 10:09:30.77
rubyは真っ先に外れるな
326デフォルトの名無しさん:2012/11/01(木) 12:46:14.18
つーかrubyはもう滅んでくんないかな
327デフォルトの名無しさん:2012/11/01(木) 19:36:13.95
饅頭こわいからもう滅んでって言うと饅頭を無償でもらえるんだよね
無償こわいよ無償
328デフォルトの名無しさん:2012/11/01(木) 21:08:01.72
>>324
想定する環境だと、この辺がネック
linuxやunixでの古典ツールの動作の微妙な違い
客先常駐時にrubyやpythonの処理系を用意できるか
新しい組込み機器の処理系がcコンパイラしか用意されない
329デフォルトの名無しさん:2012/11/01(木) 21:14:52.62
jsで動くRuby/Python作ればいいんじゃね?
330デフォルトの名無しさん:2012/11/01(木) 21:18:58.21
js自体は、ほとんど何処の環境にでもある。が、js処理系に互換性あるのか?
331デフォルトの名無しさん:2012/11/01(木) 21:24:06.28
ダーティに弄れるjsで、規約やツールレベルでOOPや大規模開発すれば良いんじゃないかな
332デフォルトの名無しさん:2012/11/01(木) 21:33:05.70
>>328
最近のUnix系だとPerlは入っているだろう。
CPANがないと楽できないけれど。
333デフォルトの名無しさん:2012/11/01(木) 21:33:23.91
そりゃjs以外選択肢が無い環境でコード書いてるならjs選ぶしかないけどさ
色々選べる環境で仕事してる奴らも世の中に沢山いるわけよ
334デフォルトの名無しさん:2012/11/01(木) 21:34:33.19
Mac OSX はRubyもPythonもPHPも最初から入ってるよ
Node.jsは入ってないけど
335デフォルトの名無しさん:2012/11/01(木) 22:06:36.94
http://wireframe.cc/
この手のものって、どの言語で作られてんの?
336デフォルトの名無しさん:2012/11/01(木) 22:10:52.45
いい歳こいたperl mongerやruby gangは、そろそろニュービーたちを騙すのを辞めた方が良いと思う
337デフォルトの名無しさん:2012/11/01(木) 23:14:07.65
自分の意志ではどうにもならないことが多いだろうけど
だからといって、いい歳こいた誰かの思惑通りに動いているわけでもない
人間以外の要因で色々決まってしまうことが多い
338デフォルトの名無しさん:2012/11/01(木) 23:46:18.88
>>332
とは言えsh+sed+awkくらいの用途なら標準ライブラリだけで割と何とかならね?
339デフォルトの名無しさん:2012/11/02(金) 03:21:56.10
>>337
政治的な層と経済的な層ですね。わかります。
340デフォルトの名無しさん:2012/11/02(金) 08:42:08.96
>>339
人に騙されたくないなら人文系の層から離れてください
341デフォルトの名無しさん:2012/11/03(土) 11:41:30.74
死ねゴミ共がw
死ねゴミ共がw
死ねゴミ共がw
死ねゴミ共がw
342デフォルトの名無しさん:2012/11/03(土) 16:41:54.17
>>340
陸那比転職記事でソシャゲ屋へのって随分と適当なこと書いてねぇ?
求職中のニートでも、内容に何処か違和感覚えるレベルの記事。
俺、技術的な詳細について全く分からないけれど、
あの記事の内容は技術的な詳細なんて全く分かってない転職者に向けて、
技術的な詳細の分かってない記者が転職市場の活性化の為だけに書いたものだと思うの
343デフォルトの名無しさん:2012/11/03(土) 23:37:33.08
RubyはRails含めて互換性低すぎて、保守性めちゃくちゃ悪いよな。昔作られたサイトの修正とか、新規に作り直した方がよっぽど楽。
344デフォルトの名無しさん:2012/11/04(日) 01:06:11.54
Python2「メジャーアップデートしたい・・・」
修造  「ちょっとまって、今・・・何て言った? おいPython2!今何ていった!?『メジャーアップデートしたい!?』」
修造  「メジャーアップデートとか言ってる間はずっとダメなんだよ!」
修造  「使えよ!もっと2.7使えよ!」
Python2「もうマイナーアップデートない・・・」
修造  「無い事無い、無いなんて事は無い!どこかにあるはず、探そうよ!」
Python2「・・・2.8・・・2.9・・・」
修造  「ほらあるじゃない! ほらみろ!あるじゃないか!」
Python2「上げるぞ・・・」
修造  「そうだ上げろ!」
Python2「上げるぞ!!!!」
修造  「もっと!」
Python2「マイナーバージョン上げるぞ!!!!!!!!!」
Guiod  「はい終了した!!もうPython2のメンテナンス終了したよ!!!!」
345デフォルトの名無しさん:2012/11/04(日) 01:18:31.38
Guiodまで読んだ
346デフォルトの名無しさん:2012/11/04(日) 01:21:32.92
うん、普通に誤字ったすまん
347デフォルトの名無しさん:2012/11/04(日) 04:38:21.42
頑張れなかったperl6
348デフォルトの名無しさん:2012/11/04(日) 04:51:19.30
Perl6は熱意がぜんっぜん気持ち伝わってこなかったからな
349デフォルトの名無しさん:2012/11/04(日) 21:36:46.43
>>344
マイナーアップデートはないけど、メンテナンスは継続してる
2.7は2015まで保守される予定
350デフォルトの名無しさん:2012/11/04(日) 21:56:22.15
うん、そこは現実どうこうより台詞を短くまとめてgdgdにならないよう努めた
もとからgdgdとかそういうつっこみは受け付けない
351デフォルトの名無しさん:2012/11/05(月) 02:07:45.34
kwatchの人がまたtwitterで喧嘩売りまくってるんだけど、この人どうにかならないの?
http://twitter.com/makotokuwata
なんで無駄に好戦的なんだろう
いい歳こいてトゲのある言葉まき散らして、コミュニティの空気悪くして、ほんと迷惑
352デフォルトの名無しさん:2012/11/05(月) 02:37:58.22
祭にして叩けば?
353デフォルトの名無しさん:2012/11/05(月) 06:31:41.33
>>351
「Perlしかできない」って言われて怒っちゃったyappoさん2chで反撃なんて最高にダサイですね
354デフォルトの名無しさん:2012/11/05(月) 07:50:47.05
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1296730132

PHPとPerl(CGI)の使い方について教えて下さい
↑のURLは知恵袋で質問したものです
知恵コイン500枚でお得だよ¥^−^¥
     __
   /  _, ,_ヽ  ┏┓
   / (●) ..(●  ┏┛
   |   (p_q)i  ・
   |   ,-|=‐| i. 
   >   |  |く
 _/ ,/|⌒)|、,ヽ_
   ヽ、_/|~ヽ、|__)  \
    _ノ___ノ
   (       _
    ヽ__    /◎/
      )  /ロ/
      (___ノ ̄
355デフォルトの名無しさん:2012/11/05(月) 13:28:55.18
俺様以外のバカの集まるスレw
死ねゴミ共がw
356デフォルトの名無しさん:2012/11/05(月) 18:17:35.09
357デフォルトの名無しさん:2012/11/07(水) 05:01:28.83
>>351-353
思春期特有の精神性でないとプログラマなんて続けられないだろうし、
声が大きい人のおかげで発言しやすくなるだろから放っておけば?
しかし、2chの名無しならともかくtwitterアカウントで発言なんて頭沸いてる
358デフォルトの名無しさん:2012/11/08(木) 21:07:33.72
359デフォルトの名無しさん:2012/11/08(木) 22:43:40.15
【お題】
昇順、重複無し、整数要素の配列が与えられたとき、
連番部分を括り出す処理をどう書く? 括り出し部分の表現は自由。

例: [1, 3, 4, 5, 7, 9, 10, 11, 13] #=> [1, 3..5, 7, 9..11, 13]
360デフォルトの名無しさん:2012/11/08(木) 23:06:57.73
Perlのいい加減さがいいよね、Cをやってると考えられないような事を平気で出来るからね。
361デフォルトの名無しさん:2012/11/09(金) 00:17:07.94
>>359
Python

reduce(lambda x, y: x[0][-1].append(y) or (x[0],y) if x[1] == y - 1 else x[0].append([y]) or (x[0],y), [1,3,4,5,7,9,10,11,13], ([], None))[0]

-> [[1], [3, 4, 5], [7], [9, 10, 11], [13]]
362デフォルトの名無しさん:2012/11/09(金) 02:02:43.30
Rubyだが奇をてらわない感じで
パターンマッチのある言語だともっと整理できるかも

def group(acc = [], ary)
 return acc if ary.empty?
 return group([ary[0]], ary[1 .. -1]) if acc.empty?
 if acc[-1] + 1 == ary[0]
  group(acc << ary[0], ary[1 .. -1])
 else
  [acc] + group(ary)
 end
end

group [1, 3, 4, 5, 7, 9, 10, 11, 13]
363デフォルトの名無しさん:2012/11/09(金) 02:56:18.35
Rubyで
a = [1, 3, 4, 5, 7, 9, 10, 11, 13]
a.each_cons(2).each_with_object([[a.first]]){|(a,b),h| b-a == 1 ? h.last << b : h << [b]}
# => [[1], [3, 4, 5], [7], [9, 10, 11], [13]]
364デフォルトの名無しさん:2012/11/09(金) 08:44:27.24
LLじゃないけどScala
val a = List(1, 3, 4, 5, 7, 9, 10, 11, 13)
var r = ListBuffer[ListBuffer[Int]]()
a.indices.foreach(i => if (i > 0 && a(i) -1 == a(i -1)) r.last + a(i) else r + ListBuffer(a(i)))
365デフォルトの名無しさん:2012/11/09(金) 08:59:26.57
ト部のこれってなんか小難しいことやってるわりにバグってて意図不明
https://twitter.com/shyouhei/statuses/265919547314425857

a=[1,2,3,5,6,7]; b=a.each_cons(2).group_by{|(x, y)|x!=y-1}[true].map{|i|i[0]}; a.group_by{|i|b.find_index{|j|j<=i}}
#=> {nil=>[1, 2], 0=>[3, 5, 6, 7]}
366デフォルトの名無しさん:2012/11/09(金) 10:43:06.82
Squeak Smalltalk で変化球。(「行儀が悪い方法」ともいう)

Object compile: 'key'. "前準備"

| result |
result := #(-1 1 2 3 5 6 7 9 11 13 14 15 17) inject: OrderedCollection new into: [:coln :each |
&nbsp;&nbsp;&nbsp;(coln notEmpty and: [coln last value + 1 = each])
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ifTrue: [each := coln removeLast key -> each]. coln, {each}].
result asArray "=> {-1 . 1->3 . 5->7 . 9 . 11 . 13->15 . 17} "
367デフォルトの名無しさん:2012/11/09(金) 12:13:52.25
Perl

use List::Util qw(reduce);

my @list = (1, 3, 4, 5, 7, 9, 10, 11, 13);

my @r = (
map{ @{$_} == 1 ? @{$_} : $_ }
@{ reduce(sub{
@{$a} && $b == $a->[-1][-1] + 1 ?
[@{$a}[0..($#{$a} - 1)], [@{$a->[-1]}, $b]] :
[@{$a}, [$b]]
}, [], @list) }
);
368デフォルトの名無しさん:2012/11/09(金) 13:10:59.45
rubyで

class Integer; def begin; self end; def end; self end end
a = [-1, 1, 2, 3, 5, 6, 7, 9, 11, 13, 14, 15, 17]
a.inject([]){ |r,e| e=r.pop.begin..e if !r.empty? and r.last.end+1==e; r<<e }
#=> [-1, 1..3, 5..7, 9, 11, 13..15, 17]
369デフォルトの名無しさん:2012/11/09(金) 13:24:52.12
370デフォルトの名無しさん:2012/11/09(金) 13:38:02.14
>>361と同様に、(再帰の代わりに)「畳み込み」を用いた関数型プログラミング作法をRubyで

[1, 3, 4, 5, 7, 9, 10, 11, 13].inject([]) { |acc, x|
  if acc.empty?
    [[x]]
  else
    if acc.last.last.succ == x
      acc[0 .. -2] + [acc.last + [x]]
    else
      acc + [[x]]
    end
  end
}

# => [[1], [3, 4, 5], [7], [9, 10, 11], [13]]
371デフォルトの名無しさん:2012/11/09(金) 13:40:03.68
ユーザー数で堅牢性が上がっていくようなハックなものから、
ユーザー居なくなること見えてるのに、この先どうなるんだろ
372デフォルトの名無しさん:2012/11/09(金) 14:31:47.60
堅牢性が必要なのはC言語まで
C以降の高級言語は何度もリセットしてやり直している
この先もそれをくりかえすだけ
373デフォルトの名無しさん:2012/11/09(金) 14:35:01.07
Haskell

f&nbsp;x&nbsp;((y:ys):yss)&nbsp;|&nbsp;x+1==y&nbsp;=&nbsp;(x:y:ys):yss
f&nbsp;x&nbsp;yss&nbsp;=&nbsp;[x]:yss
main&nbsp;=&nbsp;print&nbsp;$&nbsp;foldr&nbsp;f&nbsp;[]&nbsp;[1,3,4,5,7,9,10,11,13]
374373:2012/11/09(金) 14:40:35.32
ごめん。空白が...

f x ((y:ys):yss) | x+1==y = (x:y:ys):yss
f x yss = [x]:yss
main = print $ foldr f [] [1,3,4,5,7,9,10,11,13]
375デフォルトの名無しさん:2012/11/09(金) 14:45:03.13
>>359 perl
my @a = (1,3,4,5,7,9,10,11,13);
my @b = ($a[0]);
for my $i (grep {$a[$_+1] != $a[$_]+1} (0..@a-2)) {
  splice(@b, -1, 1, [$b[-1],$a[$i]], $a[$i+1]);
}
$b[-1] = [$b[-1],$a[-1]];
printf("%d %d\n", @$_) for (@b);
376デフォルトの名無しさん:2012/11/09(金) 16:34:31.93
>>359 Python
from itertools import groupby,count
[list(g) for k,g in groupby([1,3,4,5,7,9,10,11,13], lambda n,c=count():n-next(c))]
377デフォルトの名無しさん:2012/11/09(金) 17:38:19.15
Mathematica

lst = {1, 3, 4, 5, 7, 9, 10, 11, 13};

Range[First[lst], Last[lst]] //
 ReplacePart[#, Map[# -> "}, {" &, Complement[#, lst]]] & //
 ToString[{#}] & //
 StringReplace[#, {", }" -> "}", "{, " -> "{"}] & //
 ToExpression //
 Select[#, # != {} &] &

{{1}, {3, 4, 5}, {7}, {9, 10, 11}, {13}}
378デフォルトの名無しさん:2012/11/09(金) 18:27:08.97
お前らなら、括り出した連番部分を(始点,終点)のタプルとかで表現できるはずだ!

×[[1], [3, 4, 5], [7], [9, 10, 11], [13]]
○[1, (3, 5), 7, (9, 11), 13]
379377:2012/11/09(金) 18:48:05.63
>>378
ノシ

Mathematica

lst = {1, 3, 4, 5, 7, 9, 10, 11, 13};

Range[First[lst], Last[lst]] //
 ReplacePart[#, Map[# -> "}, {" &, Complement[#, lst]]] & //
 ToString[{#}] & //
 StringReplace[#, {", }" -> "}", "{, " -> "{"}] & //
 ToExpression //
 Select[#, # != {} &] & //
 Map[Which[Length[#] == 1, First[#], True, {First[#], Last[#]}] &, #] &

{1, {3, 5}, 7, {9, 11}, 13}
380デフォルトの名無しさん:2012/11/09(金) 19:59:45.62
>>372
誰が、いつ地雷を踏むか分からないだろ
まずまず安心して使えそうなのってPHPとjavascriptまでじゃね?
381デフォルトの名無しさん:2012/11/09(金) 20:33:20.14
>>380
サーバの中ではlibuvってのを使えばいいんだろ?
382デフォルトの名無しさん:2012/11/09(金) 20:51:37.91
&gt; まずまず安心して使えそうなのってPHPとjavascriptまでじゃね?

ここ笑うところ?
383デフォルトの名無しさん:2012/11/09(金) 21:42:32.63
>>378

g x (ys:yss) | x+1==head ys = [x,last ys]:yss
g x yss = [x]:yss
main = print $ foldr g [] [1,3,4,5,7,9,10,11,13]
384デフォルトの名無しさん:2012/11/09(金) 21:46:03.75
>>378
>>370を改造してみた
コードが少し長くなったので、以下を参照
 http://play.island.ac/codepaste/code?id=28
385デフォルトの名無しさん:2012/11/09(金) 22:14:05.82
>>376
その発想は無かったわ
スマートだしPythonらしくていいな
386デフォルトの名無しさん:2012/11/09(金) 23:02:30.05
>>376 シンプルで感動した。Squeak Smalltalkでも書いてみた。
重複無しなので count イテレーターの代わりに indexOf: が使えるはず。

| ary |
ary:= #(1 3 4 5 7 9 10 11 13).
(ary groupBy: [:elem | elem - (ary indexOf: elem)] having: #notNil) values

ついでに Ruby でも

ary = [1, 3, 4, 5, 7, 9, 10, 11, 13]
ary.group_by{ |e| e-ary.index(e) }.values
387デフォルトの名無しさん:2012/11/10(土) 00:01:04.88
>>378 Perl
use List::Util qw(reduce);

my @list = (1, 3, 4, 5, 7, 9, 10, 11, 13);

sub tail { ref $_[0] ? tail($_[0]->[-1]) : $_[0] }
sub head { ref $_[0] ? head($_[0]->[0]) : $_[0] }
sub rest { @{$_[0]}[0..($#{$_[0]} - 1)] }

my $r = reduce{ @{$a} && $b == tail($a) + 1 ? [rest($a), [head($a->[-1]), $b]] : [@{$a}, $b] } [], @list;
388デフォルトの名無しさん:2012/11/10(土) 00:27:04.32
>>386
シンプルで美しいコードだと思うけど、以下の点が気になったので改変(改悪?)してみる
(1) 式ではないから、他のコードと繋げることが(=チェーンが)できない
  --> Rubyらしくない
(2) 各要素に対してindex(e)の反復が入るから、入力リスト長に対して処理時間が指数的
  --> 効率がよくない

p [
  1, 3, 4, 5, 7, 9, 10, 11, 13
].each_with_index.group_by { |e, i|
  e - i
}.map { |_, xs|
  xs.map { |x, _| x }
}

# => [[1], [3, 4, 5], [7], [9, 10, 11], [13]]
389376:2012/11/10(土) 04:00:41.29
>>378
型混在リストは、出来てもやらない派だけど
御題優先って事で妥協して文字列で…

ideone.com/4hINft
390デフォルトの名無しさん:2012/11/10(土) 06:04:13.80
>>388
レシーバを使いまわすにはObject#tapが使えたりする
美しくは無いけど無理やりメソッドチェーンさせられる
tap内でbreakすると返り値をすりかえられることを利用する
p [1, 3, 4, 5, 7, 9, 10, 11, 13] \
.tap{|a| break a.group_by{ |e| e-a.index(e) }}.values

Pythonと違い仮引数のデフォルト値は呼出しごとに評価されるので
カウンターをスマートに渡せない
p [1,3,4,5,7,9,10,11,13] \
.tap{|a| c = a.size.times; break a.group_by{|n| n - c.next}}.values

と思ったが、別にEnumeratorを使う必要は無かった
p [1,3,4,5,7,9,10,11,13] \
.group_by.with_index{|n,c| n - c.next}.values
391デフォルトの名無しさん:2012/11/10(土) 10:49:30.55
>>390
c の next は無用かと。これが>>376のruby的な最終到達点?

[1,3,4,5,7,9,10,11,13].group_by.with_index{ |n,c| n-c }.values
392デフォルトの名無しさん:2012/11/10(土) 11:17:03.45
-- haskell
f xs = zip xs (tail xs ++ [head xs])
g xs = zip (last xs : init xs) xs
main=print$map(\((_,x),(y,_))->(x,y))$g$filter(\(x,y)->x+1/=y)$f[1,3,4,5,7,9,10,11,13]
-- [(1,1),(3,5),(7,7),(9,11),(13,13)]
393デフォルトの名無しさん:2012/11/10(土) 11:38:06.30
ruby 1.9 におけるハッシュ飽和攻撃による DoS 脆弱性 (CVE-2012-5371)  
http://www.ruby-lang.org/ja/news/2012/11/09/ruby19-hashdos-cve-2012-5371
394デフォルトの名無しさん:2012/11/10(土) 12:00:46.03
>>391
ブロック変数を本来から一つ増やせばインデックスとれるって仕様にすれば
[1,3,4,5,7,9,10,11,13].group_by{|n,i|n-i}.values
で済むのにeach_indexとかむやみに増設しちゃうmatzってセンス無いよね
395デフォルトの名無しさん:2012/11/10(土) 12:12:10.47
>>359
R
(function(x=c(1,3,4,5,7,9,10,11,13))split(x,cumsum(c(0,diff(x) > 1))))()
396デフォルトの名無しさん:2012/11/10(土) 13:05:10.49
>>394
同じ機能のメソッドが二個も三個もあるのが常で
似た機能ならもっと沢山あるのが普通の Ruby では
似た機能だから、これで代用できるから、でそれらを纏めちゃうのは違うんでない
397デフォルトの名無しさん:2012/11/10(土) 13:28:05.78
今回のお題の条件で行くなら別に配列のインデックスを取得する必要ないんでは
PowerShellだとglobalが邪魔っ気だった

1,3,4,5,7,9,10,11,13 | group { $_-$global:i++ }
398デフォルトの名無しさん:2012/11/10(土) 13:31:40.09
>>394
ダックタイピングの弱点じゃないかなね?
Arrayとはまったく関係無いクラスがgroup_byを実装してる可能性があるから、
むやみにメソッドの仕様を拡張できない
399デフォルトの名無しさん:2012/11/10(土) 14:59:24.81
>>398
group_by は Enumerable のメソッドなんだが…(´・ω・`)
400デフォルトの名無しさん:2012/11/10(土) 15:09:08.45
>>399
Enumerableが提供するメソッドをEnumerableをインクルードしないで実装してもよいよね?
ダックタイピングなんだから
401デフォルトの名無しさん:2012/11/10(土) 15:18:11.76
pythonのgroupbyはクラスを使ってないから、クラスの弱点やな
402デフォルトの名無しさん:2012/11/10(土) 16:02:46.30
>>400
実装するのは勝手だが、ダックに使っても問題ないように実装するよね?
ダックタイピングなんだから
403デフォルトの名無しさん:2012/11/10(土) 16:15:01.57
>>402
預言者じゃないんだから、オリジナルのメソッドの仕様変更に対応できるわけはないだろw
404デフォルトの名無しさん:2012/11/10(土) 17:00:53.24
>>394
お前みたいに、新しい名前を増設したらセンス無いと思ってるやつが
名前が同じで仕様だけが変わる紛らわしいものを作ってるのかな
405デフォルトの名無しさん:2012/11/10(土) 19:43:55.21
一つ余計なブロック変数が現状nilを返すのをインデックスを返すようにする程度の
仕様変更で動かなくなるコードがまったく思いつかないんだが…(´・ω・`)
406デフォルトの名無しさん:2012/11/10(土) 21:20:09.83
>>394
こんなのもあるからダメじゃね?
[[1],[2,3],[5,6,nil]].map{|x,y,z|[x,y,z]}
=> [[1, nil, nil], [2, 3, nil], [5, 6, nil]]
407デフォルトの名無しさん:2012/11/10(土) 21:36:20.06
>>394
(3..6).each.to_a
が[3,4,5,6]じゃなくて
[[3,0],[4,1],[5,2],[6,3]]になったりする
さらに
(3..6).each(&->x{p x}) や (3..6).each(&:display)
がエラーをだすようになる

with_indexが長いから短く
ってならわかるんだけど
408デフォルトの名無しさん:2012/11/10(土) 22:15:00.63
>>378
Common Lispで
(nreverse (reduce (lambda (x y)
(if (and x
(= (funcall (if (atom (car x)) #'car #'cdar) x) (1- y)))
`((,(funcall (if (atom (car x)) #'car #'caar) x) . ,y) ,@(cdr x))
`(,y ,@x)))
'(1 3 4 5 7 9 10 11 13)
:initial-value nil))
409デフォルトの名無しさん:2012/11/10(土) 22:28:00.55
>>407
それはto_aや->x{p x}や:display.to_procのアリティで判断できるだろう。
逆にアリティ2のブロックやメソッドなら渡してやればいいだけの話。

>>406
その仕様はあきらめてもらわんと困る。括弧くくるので代替してくれ。
[[1],[2,3],[5,6,nil]].map{|(x,y,z),i|[x,y,z,i]} #=>[[1,nil,nil,0],[2,3,nil,1],[5,6,nil,2]]
410デフォルトの名無しさん:2012/11/10(土) 23:06:56.97
>>409
お前がやろうとしてるのは、Enumerableの仕様変更じゃなくて、
rubyのメソッド呼び出しの基本的仕様の変更
影響範囲がでかすぎる
411デフォルトの名無しさん:2012/11/11(日) 02:19:01.45
だいたい引数展開ルールは同じにしといて
メソッドはアリティ守ってブロックは自由とかこのレベルでもう破綻してる
412デフォルトの名無しさん:2012/11/11(日) 05:05:38.43
シンプルな実装且つ柔軟に組み合わせて使えるからこそ強力なのに
413デフォルトの名無しさん:2012/11/11(日) 09:02:01.95
シンプルな実装は、いちいち人に相談しなくても組み合わせられるから強力なのだ
414デフォルトの名無しさん:2012/11/11(日) 12:55:45.41
>>391 いいね!

group_by は Hash を返すようだけど、公式以外の実装でも問題なし?
公式マニュアルでキー生成順と確認したけど、他の実装が気になる点。一応 jruby は正常動作確認した。

細かい点だけど with_index なので、引数も合わせた方が良いかもしれない。 |n,i|

その前に {|n,c| n-c } で &:- …は使えなかったけど、
何か (map - '(1 2 3) '(4 5 6)) #=> (-3 -3 -3) 的な代替手段はないかな?
415デフォルトの名無しさん:2012/11/11(日) 17:23:40.84
>>376>>391は駄目だろ
何やってるのか分からない
パズルが得意なやつじゃないと
そもそもGroupbyの動作を知ってるやつが少ない
俺にはとても奇麗だとは思えん
416デフォルトの名無しさん:2012/11/11(日) 18:22:34.38
>>415
それはキミが手続き脳だからだろ。
それとも「連番」を「インデクスとの差が一定」と
捉えられないバカなのか。
417デフォルトの名無しさん:2012/11/11(日) 18:27:40.58
ぶっちゃけその台詞は>>376が言っても説得力ないけどなー
418デフォルトの名無しさん:2012/11/11(日) 18:28:27.45
>>376以外が、だった
419デフォルトの名無しさん:2012/11/11(日) 18:47:33.68
ライブラリ読み込んでる時点でダメだろ。
420デフォルトの名無しさん:2012/11/11(日) 19:09:40.73
ルールがよくわからんのでアウトなんだろうなあと思いつつ>>376をパクらせていただいて

#!/usr/bin/perl
use strict;
use warnings;
my @a = (1,3,4,5,7,9,10,11);

my %b;
for(0..@a-1){push @{$b{$a[$_]-$_}}, $a[$_];}

use Data::Dumper;
print Data::Dumper->Dump([\%b],['*b']);
__DATA__

最後にmap{$b{$_}}sort {$a<=>$b}keys %bでもかまさなきゃだめかな
……それ以前の問題かもしれないけど
421デフォルトの名無しさん:2012/11/11(日) 19:24:49.07
>>414
> その前に {|n,c| n-c } で &:- …は使えなかった

使えるよ。これで本当の最終形か。

[1,3,4,5,7,9,10,11,13].group_by.with_index(&:-).values
#=> [[1], [3, 4, 5], [7], [9, 10, 11], [13]]
422デフォルトの名無しさん:2012/11/11(日) 19:38:54.44
> (&:-)
なかなかかわいい
423デフォルトの名無しさん:2012/11/11(日) 19:40:40.90
なんというか短いだけで簡潔さがないな
424デフォルトの名無しさん:2012/11/11(日) 20:33:39.77
短いけど読むのに時間がかかるという
リーダブルコード的にはダメなコードばかりなので
読むのに時間がかからないコードを書いた。
無駄なことをしていない分速度もこっちが早いと思う。

my @list = (1, 3, 4, 5, 7, 9, 10, 11, 13);

while(my $i = shift @a) {
 if($i+2 == $a[1]) { #値が2つ先まで連続していれば
  print "$i..";
  do {$i = shift @a} while($i+1 == $a[0]) #連続している間は省略する
 }
 print $i;
 print ", " if @a;
}

1,2,4 というのを 1..2,4 とするか 1,2,4 とするか迷ったが後者にしてみた。
前者が良ければ最初のifの数値2箇所をそれぞれ1つ減らせばいい。
425デフォルトの名無しさん:2012/11/11(日) 20:37:38.80
もし0のことも考慮したいのなら

while(defined(my $i = shift @a)) {

こうしてくれ。
426デフォルトの名無しさん:2012/11/11(日) 20:38:47.32
あ、しなくても大丈夫だったw
427デフォルトの名無しさん:2012/11/11(日) 20:39:51.00
>>416
>>376のコード読めばああなるほどと分かるんだけど
真っ先に数列の性質に着目してコード化して見せた>>376はやっぱりすごいよ
>>376と、コードを見て初めて気づく人と、コードを見ても分からない人の間には
それぞれ超えられない壁がある
428デフォルトの名無しさん:2012/11/11(日) 20:41:55.13
でも、groupbyという便利関数を使ってるだけだからなぁ。
あの関数が使えるって思いついただけだと思う。
429デフォルトの名無しさん:2012/11/11(日) 20:50:53.94
>>424
あまつさえデフォで遅くて読みにくいことで定評あるPerlで
『リーダブルコード』で駄目な例に出てきそうなコメントバリバリのコードひっさげて
「リーダブルコード的にはダメなコードばかり」「速度もこっちが早い」とかどんなギャグかと

>>428
くやしいのう くやしいのう
430デフォルトの名無しさん:2012/11/11(日) 20:59:03.35
>>429
読めよw

リーダブルコードより

8章 巨大な式を分割する

短く書こうとして逆に分かりにくくなっていたことについての1文。

どうして1行で書こうとしたのだろう? そのときは「オレは頭がいい」と思っていたのだ。
ロジックを簡潔なコードに落とし込むことに一種の喜びを感じていた。
この気持ちはみんなにも理解してもらえると思う。まるでパズルを解いているような感じだ。
仕事は楽しくやりたいからね。問題は、これがコードのスピードバンプになっていたことだ。
(P.102)
※スピードバンプ:ここではコードを読む速度を遅くさせるものという意味
431デフォルトの名無しさん:2012/11/11(日) 20:59:32.04
同じ事を書いているにもかかわらず>>421>>376を比較すると、
>>376>>376の着想にPythonの表現力がついてこれてないもどかしさがあるな
432デフォルトの名無しさん:2012/11/11(日) 21:02:48.13
>>431
うんうん。頭がいいと思っていたって話だねw
433デフォルトの名無しさん:2012/11/11(日) 21:03:59.60
着想とか言ってる時点でダメだな。
頭が良ければわかる? わからない奴はついてこなくていい?
なんだろそれは、読むのが困難だって言ってるようなもんだ。
434デフォルトの名無しさん:2012/11/11(日) 21:11:52.19
>>376は可読性も問題無いと思う
でも、>>378のような仕様変更があると
全書き換えになる所が弱点
洗練されすぎてて仕様変更に弱い
435デフォルトの名無しさん:2012/11/11(日) 21:18:10.82
>>376程度の工夫で読めなくなる人は
プログラム業界からお引き取りしてもらったほうが
「お互い」幸せに思えるが
436デフォルトの名無しさん:2012/11/11(日) 21:20:40.69
【御題】
1から10までの数を二組の集合x,yに分けたとき
・sum(x) > sum(y)
・product(x) < product(y)
を満たすx,yを全て出力せよ(出力の表現は自由)
437デフォルトの名無しさん:2012/11/11(日) 21:23:49.31
>>434
そりゃgroupbyを使えばだろ?

例えば数列中から連続している区間を取り出すhogehogeって関数があったとしたら
(hogehoge ・・・ 数値が連続していればその区間の開始と終わりを、そうでなければ単一の値をクロージャに渡す)

print join(', ', hogehoge { @_ > 1 ? "$_[0]..$_[1]" : $_[0] } @a)

これぐらい可読性よく書けるよ。
438デフォルトの名無しさん:2012/11/11(日) 21:24:26.33
>>421
使えたーありがとう

>>378 対応は、こんな感じかな
.map{|_,e| e.length > 1 ? "#{e.first}..#{e.last}" : e.first.to_s }.join(", ")
439デフォルトの名無しさん:2012/11/11(日) 21:24:40.49
>>435
えと、みんながその発想を褒めてる時点で
それが答えなんですが・・・。
440デフォルトの名無しさん:2012/11/11(日) 21:31:19.56
>>439
普通に「読める」コードだけど自分では思いつかなかったから褒めてるんだろ
読めるコードでも自分で普通に思いついて書かないようなコードはダメだってか?
どんなファッショだよ
441デフォルトの名無しさん:2012/11/11(日) 21:35:59.89
だめな理由はgroupby使ってるからじゃね?

ためしにgroupbyのコードを
書いてみてよ。
442デフォルトの名無しさん:2012/11/11(日) 21:45:43.76
>>436

Mathematica

Table[
 x = IntegerDigits[i, 2] // PadLeft[#, 10] & // # * Range[1, 10] & //
   Map[Which[# == 0, {}, True, #] &, #] & // Flatten;

 y = Complement[Range[1, 10], x];

 tf = And[Apply[Plus, x] > Apply[Plus, y],
    Apply[Times, x] < Apply[Times, y]];

 If[tf, {{x, y}}, {}], {i, 1, 2^10}] // Flatten[#, 1] &


{{{4,5,9,10},{1,2,3,6,7,8}},{{3,7,9,10},{1,2,4,5,6,8}},
 {{3,7,8,10},{1,2,4,5,6,9}},{{3,6,9,10},{1,2,4,5,7,8}},
 {{2,8,9,10},{1,3,4,5,6,7}},{{2,7,9,10},{1,3,4,5,6,8}},
 {{1,8,9,10},{2,3,4,5,6,7}},{{1,5,6,7,9},{2,3,4,8,10}},
 {{1,4,6,8,9},{2,3,5,7,10}},{{1,4,6,7,10},{2,3,5,8,9}},
 {{1,4,5,9,10},{2,3,6,7,8}},{{1,4,5,8,10},{2,3,6,7,9}},
 {{1,3,7,9,10},{2,4,5,6,8}},{{1,3,7,8,10},{2,4,5,6,9}},
 {{1,3,7,8,9},{2,4,5,6,10}},{{1,3,6,9,10},{2,4,5,7,8}},
 {{1,3,6,8,10},{2,4,5,7,9}},{{1,3,5,9,10},{2,4,6,7,8}},
 {{1,2,8,9,10},{3,4,5,6,7}},{{1,2,7,9,10},{3,4,5,6,8}},
 {{1,2,7,8,10},{3,4,5,6,9}},{{1,2,6,9,10},{3,4,5,7,8}}}
443デフォルトの名無しさん:2012/11/11(日) 21:50:35.02
>>441
fold等よりよほど用途が限定されていて、関数の名前だけでグループ分けすると
いうことがすぐにわかるgroupbyがダメとか、意味が分からなすぎる

可読性でゴネてるやつは、
(x + 1) & ~1
のようなCのコードの意味が分からないからといって
if (x % 2 == 1) ++x
のように書き直して簡潔さを犠牲にして分岐命令を増やすようなタイプだろうか?
本当に業界を去って頂いた方がお互いのためかもな
444デフォルトの名無しさん:2012/11/11(日) 21:50:38.23
>>441
Haskellだけど

groupby _ [] = []
groupby f (x:xs) = (x:ys) : groupby f zs
  where (ys,zs) = span ((==f x).f) xs
445デフォルトの名無しさん:2012/11/11(日) 21:54:02.72
言語の良し悪しってのは実は言語そのものではなく
ライブラリがどれだけ充実しているかにあるというのは
知ってはならない真実なんだろうなぁ。
446デフォルトの名無しさん:2012/11/11(日) 21:55:09.66
groupbyがいいとなれば
どんな言語でもgroupby相当の物を
持ってくるなりして使えば
同じように書けそうな気がするね。
447デフォルトの名無しさん:2012/11/11(日) 21:56:53.99
>>436
Haskell

import Data.List
main = print [(x,y) | let s = [1..10], x <- subsequences s, let y = s \\ x, sum x > sum y, product x < product y]
448デフォルトの名無しさん:2012/11/11(日) 21:58:38.71
>>443
え? こういう問題ってライブラリは使わないで
基礎的な命令だけで解くことが目的の
アルゴリズムの問題なんじゃないの?

言語の標準(?)ライブラリ自慢になってちゃ
面白く無いと思うけど。
449デフォルトの名無しさん:2012/11/11(日) 21:59:44.26
ID出るといいんだけどねー
450デフォルトの名無しさん:2012/11/11(日) 22:01:53.88
出したいなら代わりにトリップ出せばいいと思うよw
451デフォルトの名無しさん:2012/11/11(日) 22:03:50.53
>>443
上の式は実行効率の良さはともかく簡潔だとは思わんな・・・
下の文より分かりづらい
452デフォルトの名無しさん:2012/11/11(日) 22:05:08.72
>>450
俺だけ出しても仕方あるまいよ。君頭いいね
453デフォルトの名無しさん:2012/11/11(日) 22:05:18.25
>>448
「基礎的な命令」を正確に定義して
454デフォルトの名無しさん:2012/11/11(日) 22:06:53.71
>>453
関数、メソッドではないもの。
455デフォルトの名無しさん:2012/11/11(日) 22:08:03.71
>>454
全てがメッセージパッシングなオブジェクト指向言語はどうしたら
456デフォルトの名無しさん:2012/11/11(日) 22:09:26.71
つーか制限かけるとつまんねーんだよ
何でもありだから言語固有のコードが出て来て面白いんだろが
457デフォルトの名無しさん:2012/11/11(日) 22:10:50.24
>>455
ifもループも配列も
全部、関数やメソッドなのかい?
なら参加権なしってことだ。
458デフォルトの名無しさん:2012/11/11(日) 22:11:59.12
いつまでもバナナはおやつに含まれますか論争してんじゃねぇよ・・・
459デフォルトの名無しさん:2012/11/11(日) 22:13:01.51
>>456
いや、今回の場合ただの関数があるかないか自慢になってるから。

よし、こうしよう。他の言語にも
同等の関数はあるという前提で
いろんな言語で実装してみるというのはどうだ?
460デフォルトの名無しさん:2012/11/11(日) 22:14:09.26
groupbyみたいな単純な関数(>>444)を使っただけで
ライブラリ自慢になってるとか馬鹿らしいよ
461デフォルトの名無しさん:2012/11/11(日) 22:20:42.02
じゃあgroupbyのなかで使ってる
spanを実装しなよw
462デフォルトの名無しさん:2012/11/11(日) 22:23:58.08
ひどい自演を見た
463デフォルトの名無しさん:2012/11/11(日) 22:26:58.07
>>461
span f xs = (takeWhile f xs, dropWhile f xs)
464デフォルトの名無しさん:2012/11/11(日) 22:30:33.93
>>461
from webbrowser import *
open_new_tab("http://www.youtube.com/watch?v=anwy2MPT5RE&t=1m00s")
465デフォルトの名無しさん:2012/11/11(日) 22:32:46.11
groupbyを使わないで同じことをやると、あまり面白くない

a = [1,3,4,5,7,9,10,11,13]
b = [a[i]-i for i in range(len(a))]
print([[a[i] for i in range(len(a))if b[i]==j]for j in range(min(b),max(b)+1)])
466デフォルトの名無しさん:2012/11/11(日) 22:33:25.23
>>434
それは言語次第だと思うけど、どっちにしろ全書き換えってこたないと思う

PowerShellだと>>397にの後ろにパイプ式を追加するだけで済んだよ
>> $s = 1,3,4,5,7,9,10,11,13 | group { $_-$global:i++ } |
% { if ( $_.count -gt 2 ) { "($($_.group -join ','))" } else { $_.group } }
>> $s -join ','
1,(3,4,5),7,(9,10,11),13
467デフォルトの名無しさん:2012/11/11(日) 22:39:19.91
そもそも>>376はPythonではなく
書いた376が賞賛されてることに気付いた方がいい
だからライブラリ自慢なんて的外れ
468デフォルトの名無しさん:2012/11/11(日) 22:39:33.79
入れ子リストという構造自体はごく汎用的だから、出力形式を変えたければ単に
その後形式を変換すればいいだけ
一般論として形式AからBに変換するコードを足すと、最初からBを出力するつもりの
コードよりは長くなるかもしれないが、どういう形式を選んでもそういうことは有り得る

>>434はどういう根拠で>>376が仕様変更に弱いと思ったんだろう
469434:2012/11/11(日) 22:46:21.44
>>378はリストを作る段階から(始点,終点)形式で作れって意味かと思い込んでた
すまぬ、すまぬ...
470デフォルトの名無しさん:2012/11/11(日) 22:54:03.90
>>376じゃないけど、もちろんPythonでも>>376に1行足せばいいだけ

# >>376の「嫌いな」形式に変換する
xs = [1, 3, 4, 5, 7, 9, 10, 11, 13]
groups = [list(g) for k, g in groupby(xs, lambda n, c=count(): n - next(c))]
converted = [group[0] if len(group) == 1 else tuple(group) for group in groups]
471デフォルトの名無しさん:2012/11/11(日) 22:54:31.08
>>436
Squeak Smalltalk で

| in out |
in := 1 to: 10.
out := OrderedCollection new.
(1 to: in size // 2) do: [:m |
 in combinations: m atATimeDo: [:x |
  | y |
  y := in copyWithoutAll: x.
  (x sum > y sum and: [(x reduce: #*) < (y reduce: #*)]) ifTrue: [out add: x copy]]].
^out
472434:2012/11/11(日) 22:57:10.43
>>470
こうじゃないの?

converted = [group[0] if len(group) == 1 else (group[0],group[-1]) for group in groups]
473デフォルトの名無しさん:2012/11/11(日) 23:05:43.80
>>472
ああ、全部出力しちゃいけないのか…
題意をよく読んでなかった、ごめん
474デフォルトの名無しさん:2012/11/11(日) 23:14:19.70
あ、ほんとだ、俺も間違えてた
475デフォルトの名無しさん:2012/11/11(日) 23:16:23.61
groupbyはもういいから、次のお題>>436をどう書く?
476デフォルトの名無しさん:2012/11/11(日) 23:23:23.69
俺の頭じゃ例がないとxとyの状態がよく分からんわ・・・
xが10個とも持ってる場合とかも含めた総当りをかっこよく書いてちょってことでいいんかね
477デフォルトの名無しさん:2012/11/11(日) 23:26:23.25
>>376の良さは、1,3,4,5,5,7,9,10,11,13という並びがあった場合、
[[1, 5], [3, 4, 5, 7], [9, 10, 11], [13]]
ではなく、
[[1], [3, 4, 5], [5], [7], [9, 10, 11], [13]]
が返ってくるところ。
478デフォルトの名無しさん:2012/11/11(日) 23:26:50.35
>>476
正解。

そう、当たり。
479デフォルトの名無しさん:2012/11/11(日) 23:28:58.08
>>477
お題で重複はないって条件にあるんでー
480デフォルトの名無しさん:2012/11/11(日) 23:30:00.63
>>477
重複があったらダメなコードのが少なくね?
481デフォルトの名無しさん:2012/11/11(日) 23:55:40.24
>>477
それって、どっちかっていうとPythonのgroupbyの仕様バグくさいけどな。
482デフォルトの名無しさん:2012/11/12(月) 00:07:09.83
引数にジェネレータが取れる仕様だからじゃないの
無限列かもしれないんだから
483デフォルトの名無しさん:2012/11/12(月) 00:16:09.94
無限列ならなおさら出てきたところまではまとめて欲しいと思うが…
そもそも仕様に「SQLのと違う」って断わり書き入れるくらいなら、名前変えろよと
Python作り手の考えることはいっけん理屈が通っているようでけっきょく抜けとる
484デフォルトの名無しさん:2012/11/12(月) 00:18:12.55
戻り値もジェネレータだからねぇ
485デフォルトの名無しさん:2012/11/12(月) 04:08:21.27
>>427
そういう、「思いついた俺すげえ。」「分かる俺すげえ」みたいなのは
自己満足にはいいけど、現実世界ではある程度は万人に分かることが重要じゃないかな
486デフォルトの名無しさん:2012/11/12(月) 04:20:03.90
>>481-484
雲行きが怪しくなってきたなあ
結局、groupby自体、どういう仕様なのかはっきりしないものであって
人によって解釈が異なるってことか
ますます可読性に難があることがあらわになってきたね

groupbyのような単純な関数で文句を言うな、可読性に問題はない
とか言ってた連中大恥じゃないかw
487デフォルトの名無しさん:2012/11/12(月) 04:49:55.53
>>485
さすがに>>376程度も理解できんのは業界から去って欲しくね?
488デフォルトの名無しさん:2012/11/12(月) 05:07:44.98
初めてgroupbyという名前を聞いた人が
その機能を考えて全員一致するなら
わかりやすい関数だって見とめてやるよ
489デフォルトの名無しさん:2012/11/12(月) 07:32:41.52
>>487
ちなみに未だになんでnextが必要なのかわからない
俺は去ることになりそうだ
pythonを知ってるから内包表記は理解できたが、
まずその段階でさる人が多そうだ
99%は去ることになると思う
490デフォルトの名無しさん:2012/11/12(月) 07:42:15.51
結局、こういうややこしいパズルみたいなのはバグを作り込むんだよね
「分かる俺すげええええ」して、異を唱える他の人を「どうせ分からないんだろう」とバカにして
悦に入っていたやつも、ほとんどは>>477まで想定して言ってたわけじゃないんだろうなw
491デフォルトの名無しさん:2012/11/12(月) 07:54:33.62
>>489
count()の戻り値はジェネレータだから

>>488
全部の言語で仕様が一致する必要があるの?
mapですら違うよ?
492デフォルトの名無しさん:2012/11/12(月) 08:04:06.37
全部の言語で一致する必要はないけどこの場合の問題は
SQLの方のgroupbyを想像する人の方が多数派であると予想されること
493デフォルトの名無しさん:2012/11/12(月) 08:07:38.87
>>486
一番恥ずかしいのは「groupby書いてみろよ(書けないだろ?ww)」的な事書いて
速攻でレスされた441だと思います
494デフォルトの名無しさん:2012/11/12(月) 08:09:07.56
SQLは無限列を扱う訳じゃないからねぇ
495デフォルトの名無しさん:2012/11/12(月) 08:10:57.78
無限列ならなおさら出来たところでまとめて欲しいけどねぇ
496デフォルトの名無しさん:2012/11/12(月) 08:18:16.55
googleコーディング規約で「内包表記はシンプルな場合のみ利用しましょう。
複数のfor式、フィルター式はやめましょう。」的なのがあったけど、
groupby以前にまずこれに違反してるな
内包表記とgroupbyとlambda組み合わせちゃってるから
497デフォルトの名無しさん:2012/11/12(月) 08:19:48.30
>>495
思いつきで言ってるでしょ
戻り値も無限列の可能性がある(だから戻り値もジェネレータ)なのに、
どうやってまとめるの?
498デフォルトの名無しさん:2012/11/12(月) 08:23:11.95
googlerですら「複雑な文はやめましょう。ちなみに複数のfor使っただけで内包表記は複雑です」
とはっきり言ってるんだよね。
もちろん376みたいなのはNGでしょ。
やっぱり、虚勢を張りたい気持ちは分かるが、謙虚にならねばならない。
Googlerのように。
499デフォルトの名無しさん:2012/11/12(月) 08:25:18.98
>>497
普通に出来そうだけど
何で出来ないのか理解できない

そもそも、理解できたとしてもそういう内部の事情を考慮しないと分からない時点で
分かりにくい
500デフォルトの名無しさん:2012/11/12(月) 08:39:35.87
馬鹿には無理
501デフォルトの名無しさん:2012/11/12(月) 08:41:27.09
残念ながらこの業界の90%はバカなのです。
まあ趣味レベルの仕事であなた一人で仕事を完結させるならいいですが。
502デフォルトの名無しさん:2012/11/12(月) 08:42:09.19
さすがにgooglerを馬鹿とは言いたくないけどねぇ
503デフォルトの名無しさん:2012/11/12(月) 09:26:19.18
使うのを控えるのと理解できないのとでは全然違う
504デフォルトの名無しさん:2012/11/12(月) 10:42:15.84
>>489
>>491が言ってるようにcount()を含めたitertoolsの関数はジェネレータを返す
next()はジェネレータの次の値を取り出す、ただそれだけの関数
JavaのIteratorインタフェースのnext()メソッドとやってることは等価だし
C++のSTLを知ってればiteratorやstd::advance()のようなものを
知っているはず

99%は言い過ぎ、バカが自分だけじゃないと主張して安心したいだけにしか見えない
505デフォルトの名無しさん:2012/11/12(月) 11:07:46.81
数行のコードを誉めたり貶したりする何百行ものコメントを読まされる人は大変だろ
このスレで最も複雑なのはgroupbyでも内包表記でもない
日本語とかコミュ能は規約で色々禁止した方が生産性上がるんじゃねぇの
506デフォルトの名無しさん:2012/11/12(月) 11:34:44.57
Pythonのgroupbyが理屈優先でユースケース想定不足な謎仕様になっていることと
本来のSQL的なgroupby程度すら直感的に理解できないリテラシー不足が大勢いることを
一緒くたにして議論してはいけない
507デフォルトの名無しさん:2012/11/12(月) 11:40:42.43
>>484
前後するけど、戻り値もそのキー値の値もジェネレーターなのは
どんなユースケースを想定しているのだろうか?
単純な例で、count()を偶奇でgroupbyする場合だとまったく意味をなさないように思うのだが。
508デフォルトの名無しさん:2012/11/12(月) 13:22:31.44
>>507
そういう場合は入力をソートする

>groupby() の操作は Unix の uniq フィルターと似ています。 key 関数の値が変わるたびに
>休止または新しいグループを生成します (このために通常同じ key 関数でソートしておく必要があるのです)。
>この動作は SQL の入力順に関係なく共通の要素を集約する GROUP BY とは違ます。
509デフォルトの名無しさん:2012/11/12(月) 14:10:27.78
>>508
count()はソート済みでは?
そもそも聞きたいのは「どうしたらできるか?」ではなく
返値やキーの値がジェネレーターだと「どんなシチュで何が便利なのか?」であって

たとえばキーの種類が増えていくとき、返値がジェネレーターだと便利だよね これは分かる。
でも、既に存在するキーにグループ分けされるはずの要素が新たに現われたとき、
既存のキーの値(ジェネレーター)に追加されるわけではないんだよね。
今の仕様だと、既存のとは別に同じキーのキーと値のペアが作られるだけ
これではほとんど旨味がないと思うんだけど
510デフォルトの名無しさん:2012/11/12(月) 15:14:42.19
>>509
groupbyに渡す key関数で ソート
511デフォルトの名無しさん:2012/11/12(月) 18:18:57.78
>>509
要素の順序が重要なとき

ランレングス圧縮から

名前,日時,発言 の会話ログ・データが時系列にあって
名前が連続してる時は名前表示をひとつに纏めたいとか、雑多な作業にまで色々と使える
512デフォルトの名無しさん:2012/11/12(月) 20:30:07.33
PythonのgroupbyからSQLのgroup by相当は簡単に作れる、ソートしてもしなくても作れる
SQLのgroup byからPythonのgroupby相当は作れない
513デフォルトの名無しさん:2012/11/12(月) 21:32:01.93
ていうか、世の中の90%のダメプログラマは
>>424の方が良いコードだと感じるの?マジで?
括り出しのロジックと端末への出力の分離すらできてない
最低のコードだと思うんだけど
514デフォルトの名無しさん:2012/11/12(月) 21:33:28.46
お ま ま ご と
515デフォルトの名無しさん:2012/11/12(月) 21:38:55.29
>>424
@a が未定義
要素に0が含まれてるとその時点でループ終了
516デフォルトの名無しさん:2012/11/12(月) 21:39:50.74
>>513
便利メソッドがないという前提で
お前書いてみて。
517デフォルトの名無しさん:2012/11/12(月) 21:40:34.99
>>515
> 要素に0が含まれてるとその時点でループ終了
次2つのレスぐらい読めないの?
518デフォルトの名無しさん:2012/11/12(月) 21:56:45.63
>>513
>>424はPerlの文法知らないからチンプンカンプンだわw
個人的に駄目プログラマでも分かりやすいと思ったのはこの辺だな
>>363-364 >>374
519デフォルトの名無しさん:2012/11/12(月) 22:14:25.21
>>513
端末?を見下すやつってなんなの?アップル信者なの?
520デフォルトの名無しさん:2012/11/12(月) 22:38:08.78
>>424は新しいリストを得るのではなく印字してるだけに見えるね
521デフォルトの名無しさん:2012/11/12(月) 22:38:33.77
今のところ364が一番分かりやすいな
やっぱり変数に型がないと駄目だね
522デフォルトの名無しさん:2012/11/12(月) 22:44:56.02
>>519
ターミナル軽視はWindows一辺倒の人に多いかと
523デフォルトの名無しさん:2012/11/12(月) 22:58:09.93
ループ終えたあとには元のリスト@list(@aのtypoか)は空リストになるのか
これは>>513に分があるような
524デフォルトの名無しさん:2012/11/12(月) 23:23:06.73
424のコードは良く分からないが、コメントは分かりやすいw
525デフォルトの名無しさん:2012/11/12(月) 23:36:10.73
印字に文句言ってる奴が多いから、perlを知らない俺が妄想でperlの仕様を
補間してちゃっちゃと改良してやったよ。
間違ってるけどこんな感じで出来るだろ。本質的じゃないことに文句言い過ぎなんだよ

my @list = (1, 3, 4, 5, 7, 9, 10, 11, 13);
my @result = ();
while(my $i = shift @a) {
 @result << $i;
 if($i+2 == $a[1]) { #値が2つ先まで連続していれば
  do {$i = shift @a} while($i+1 == $a[0]) #連続している間は省略する
  $(@result[-1]) << $i;
 }
}
526デフォルトの名無しさん:2012/11/12(月) 23:50:58.07
動くといいね
527デフォルトの名無しさん:2012/11/12(月) 23:58:05.00
結果を変数に入れて副作用を使ってリストを作っていくコードが
分かりやすいな
過度に関数型チックで簡潔にしようとしているのは、処理の流れが複雑なリッチな関数
に頼ることで処理がブラックボックス化し、結果に対する変化が見えない
ことで分かりにくくなっている気がする
528デフォルトの名無しさん:2012/11/13(火) 00:04:32.31
>>504
そもそもcount()がジェネレータを返すというのを知らなければ
いくらjavaやSTLに詳しかろうが分からんだろ
529デフォルトの名無しさん:2012/11/13(火) 00:15:20.16
#値が2つ先まで連続していれば
#連続している間は省略する

というソースコードよりも

#連続している間は省略する
#値が2回以上省略されれば

というソースコードの方が分かりやすいのでは?
530デフォルトの名無しさん:2012/11/13(火) 00:25:07.41
こんな感じじゃないかな。構造は1回以上の繰り返し。
my @list = (1, 3, 4, 5, 7, 9, 10, 11, 13);
my @r;

while(defined(my $i = shift @list)){
if (defined $list[0] and $i + 1 == $list[0]){ # 連続していれば
my $s = $i;
do {
$i = shift @list;
} while(defined $list[0] and $i + 1 == $list[0]); # 間を飛ばす
push @r, [$s, $i];
next;
}
push @r, $i;
}
531デフォルトの名無しさん:2012/11/13(火) 00:27:08.19
あいうえお.かきくけこさしすせそたちつてと....
と五十音表を作りたいのですが
utf8で一気に作る方法ありませんか?
教えてください
532デフォルトの名無しさん:2012/11/13(火) 00:28:06.83
お題に書かれた順番で考えたほうが分かりやすい人と
連番との差でグループ化できると考えたら分かりやすい人がいるというだけだろ。
my @list = (1, 3, 4, 5, 7, 9, 10, 11, 13);
my %result = ();
for(my $i=0;$i<$#list+1;++$i){push(@{$result{$list[$i]-$i}},$list[$i]);}
533デフォルトの名無しさん:2012/11/13(火) 00:33:03.99
>>527
それは分かりやすさのベクトルが違うと思うよ
「玄関で右曲がって交差点で左曲がって500m直進した右手の建物に入る」って言った方が分かりやすいのか
「自宅から国会議事堂に行く」って言ったほうが分かりやすいのか、そういう違いだと思う
534デフォルトの名無しさん:2012/11/13(火) 00:35:11.75
my @aiueo = (
"あ", "い", "う", "え", "お",
"か", "き", "く", "け", "こ",
"さ", "し", "す", "せ", "そ",
"た", "ち", "つ", "て", "と",
"な", "に", "ぬ", "ね", "の",
"は", "ひ", "ふ", "へ", "ほ",
"ま", "み", "む", "め", "も",
"ら", "り", "る", "れ", "ろ",
"わ", "ゐ", "ゑ", "を", "ん",
"や", "ゆ", "よ");

これ以外で教えてください
535デフォルトの名無しさん:2012/11/13(火) 00:43:43.80
・あいうえお...を1つずつ取り出して0から47まで代入
・qw(あ い う え お ...)
・$aiueo[0]="あ"; ....
#動作確認はしてない
536デフォルトの名無しさん:2012/11/13(火) 00:55:28.05
>>528
それはどんな言語のどんな関数についても言えることだろう……
537デフォルトの名無しさん:2012/11/13(火) 00:59:48.96
>>519
>>513は別に端末を見下しているんじゃなくて、データを返すコードではなく
端末に値を出力するだけのコードは汎用性が皆無であることを問題視してるんだろ
538デフォルトの名無しさん:2012/11/13(火) 01:06:35.45
>>527
それってシェルで言うと、
grep $PATTERN file
ですむことを
while read line; do
&nbsp; &nbsp; if expr line : $PATTERN; then
&nbsp; &nbsp; &nbsp; &nbsp; print line
&nbsp; &nbsp; fi
done < file
と書いた方が分かりやすいと言ってるようなもんだよな
539デフォルトの名無しさん:2012/11/13(火) 01:08:33.31
うわ、&はエスケープされるようになったの?
while read line; do
if expr line : $PATTERN; then
print line
fi
done
540デフォルトの名無しさん:2012/11/13(火) 01:22:42.66
>>376はラムダ式の呼び出しのたびにc=count()が実行されて
毎回next(c)で0が返りそうにしか見えないんだけど
どういうカラクリなんだよ?

あんまりPython知らないからあれだけど
これで業界去らなくちゃいけないのは厳しいわw
541デフォルトの名無しさん:2012/11/13(火) 01:32:52.70
そこはPythonを知らないなら仕方がないね
Pythonのデフォルト引数は一度だけ(関数の定義時)にしか評価されない
542デフォルトの名無しさん:2012/11/13(火) 01:38:09.05
Pythonの仮引数のデフォルト値は一回しか評価されない
何回コールしても、その同じオブジェクトが入ってる

def foo(i,a=[]): a.append(i); return a

print(foo(1)) # [1]
print(foo(2)) # [1,2]
print(foo(3)) # [1,2,3]
print(foo(4)) # [1,2,3,4]
543デフォルトの名無しさん:2012/11/13(火) 01:56:31.50
説明ありがとう
しかし分かりづらい仕様だな

これ関数型的に考えるなら先にzipして
[(0,1),(1,3),(2,4),...]
てリストを作ってgroupByに渡すべきなんじゃないだろうか?
Pythonだとそれも面倒なのかな?

中途半端に手続きが入ってる感じが余計分かりづらくしている気がする
544デフォルトの名無しさん:2012/11/13(火) 03:21:41.11
一つ前の要素と現在の要素をkey関数で評価し、
真の間の要素を同じグループに纏める関数を手続きで書いた。

ideone.com/K2qrKO

sequence = [1,4,5,6,7,9,10,11,13]
is_next_num = lambda prev,current: prev+1 == current

print(list(group_while(sequence, is_next_num)))
545デフォルトの名無しさん:2012/11/13(火) 03:36:31.89
group by も、実装方法は幾つか種類があるようだけど、
実態は、よくある処理の汎用的な部分を抽出し、再利用しやすくしたものなので、
紐解いてみればそんなに難しくないよ。ハッシュを使った実装だとこんな感じ
(テストはしてない。注意インデント全角です)

sub group_by(&@) {
 my ($keyfunc,@sequence) = @_;
 my %groups = ();
 foreach (@sequnce) {
my $key = &$keyfunc($_);
  push(@{$groups{$key}}, $_);
 }
 return %groups;
}

# 用例
sub uniq(@){ my %d = group_by {$_[0]} @_; keys %d }
546デフォルトの名無しさん:2012/11/13(火) 03:39:30.11
関数型・手続き云々ではなく、こういったユーティリティ関数の組み合わせで組んだコードの利点は
式単位での部品の再利用性。同様の処理を書くのに差分のみのコーディングで済むので、
バグが入り込む余地が比較的少なく、生産性・保守性も優れてる所にあります。=>プログラマの負担軽減に繋がる
547デフォルトの名無しさん:2012/11/13(火) 04:54:10.50
お、おう
548デフォルトの名無しさん:2012/11/13(火) 05:24:10.76
>>546
ただ、最適化されたコードではないから
遅くなるんだよね。

二回もループして一旦別配列を作ったりするから。
549デフォルトの名無しさん:2012/11/13(火) 05:38:57.44
このスレでの経緯から見ると、生産性や保守性に優れていて
バグの軽減につながるというのは眉唾
何をやっているのか理解に苦しむ人が続出し、pythonジェネレータや
groupbyの分かりにくさや曖昧さを露呈した
pythonやrubyでのgroupbyに慣れた人が
sql型のgroupbyを持つ言語でバグを作り込みそうだ
550デフォルトの名無しさん:2012/11/13(火) 06:09:13.60
華麗にスルー
551デフォルトの名無しさん:2012/11/13(火) 06:24:01.71
それに、プログラミングコンテストで好成績を収めているのは
C++で手続き型丸出しの書き方の人が多いという現実がある
関数的な書き方が生産性が高いというのは幻想だと思う
552デフォルトの名無しさん:2012/11/13(火) 06:57:41.07
>>537
そこまで出来ればあとはアレンジだけだと思うがなあ
入力を即値→標準入力から読ませるに変えるのもLLは1〜2行で済んだりするし
553デフォルトの名無しさん:2012/11/13(火) 07:21:13.61
書き捨てコードとして貼られたら何も思わなかったけど
見本を見せてやると言わんばかりに貼られたコードだからねぇ

ああいうコードにダメさを感じないPGって
MVCとかも本当には理解してなさそう
554デフォルトの名無しさん:2012/11/13(火) 07:27:02.64
>>527>>551
>>363-364 >>374 あたりは読み易いという意見もあるけど?
555デフォルトの名無しさん:2012/11/13(火) 07:34:13.78
>>543
zipは関数型では良いけどオブジェクト指向では微妙だよな
二つのコレクションのどっちがレシーバになるべきか迷う
556デフォルトの名無しさん:2012/11/13(火) 07:54:47.04
>>553
でも結局>>525>>530と同じようなコードなんだし
本質から離れた揚げ足取りで横やりを入れてる感じは否めない
557デフォルトの名無しさん:2012/11/13(火) 08:06:02.67
>>555
Ruby使いだけど
その点ではPythonみたいな関数タイプもいいなと思う
zip(列挙型1,列挙型2),...

Rubyだと
列挙型1.zip(列挙型2,...)
結果の要素数がレシーバーに合わされるっていうのがわかりやすいともいえるけど

Pythonのような
全部のなかで要素数が最小のや、最大のにあわせたzipも欲しいところ
558デフォルトの名無しさん:2012/11/13(火) 08:21:15.36
>>556
ロジックがIOと分離されてないとこにケチ付けられてるのに
ロジックが同じだから大差無い?馬鹿すぎて目眩がする
559デフォルトの名無しさん:2012/11/13(火) 08:25:40.27
肝心のロジックも冗長なだけのゴミ
560デフォルトの名無しさん:2012/11/13(火) 08:41:16.14
殺伐としたスレにcoffeescriptが

a = [1, 3, 4, 5, 7, 9, 10, 11, 13]
r = []
for i in [0...a.length]
 if i > 0 && a[i - 1] + 1 == a[i] then r[r.length - 1].push a[i] else r.push [a[i]]
561デフォルトの名無しさん:2012/11/13(火) 09:50:24.82
現実のプログラムでロジックとIO分離すんの結構面倒で難しいよね
トイプログラムでなければ進捗表示とかロギングとか色々要求が出てくるし
562デフォルトの名無しさん:2012/11/13(火) 11:13:46.13
後はGUIだとユーザによる中断/キャンセルとかな
563デフォルトの名無しさん:2012/11/13(火) 12:48:06.70
旅人と上着を分離・・・ah
564デフォルトの名無しさん:2012/11/13(火) 20:27:14.67
進捗表示とかの処理をロジックと分離するのにも
ジェネレータや遅延リストが役立つよ
565デフォルトの名無しさん:2012/11/13(火) 22:07:57.71
>>533
後者はもっと違う気がする
喩えるなら、「A君が自宅から国会議事堂に行くときのように、B君の自宅からホワイトハウスに行くんだよ。わかった?」
って言ってる感じ
566デフォルトの名無しさん:2012/11/13(火) 22:28:00.31
>>560
どうもr[r.length - 1]が冗長だよな
indexを使わざるを得ないのも不格好だ
俺的最強言語ならこうなるな

for a in [1, 3, 4, 5, 7, 9, 10, 11, 13]
 if a.to(-1) == a - 1 then r.last += a else r += [a]

こんな言語いかにもありそうなんだがな
ここまで簡潔なのはなぜか無い
567デフォルトの名無しさん:2012/11/13(火) 22:44:37.04
aに入ってるのは数字なのに、なんでa.to(-1)でリストの一つ前の数字を差せるんだよ
そんな気持ち悪い言語あってたまるか
568デフォルトの名無しさん:2012/11/13(火) 22:52:52.27
俺的最強言語(笑)ではa = 1のときどうなるの?
569デフォルトの名無しさん:2012/11/13(火) 22:58:07.49
>>567-568
想像力のない奴らめ
aはこのスレで流行のジェネレータで、単にaと書くのはa.valueの
省略形じゃ
わかったか愚民どもめ
570デフォルトの名無しさん:2012/11/13(火) 23:02:30.90
ジェネレータ知らんのに無理すんなwww
571デフォルトの名無しさん:2012/11/13(火) 23:10:42.96
知ってるけど?
PostgreSQLでいう、シーケンスみたいなもんだろ。
呼び出すごとに値を返す。
572デフォルトの名無しさん:2012/11/13(火) 23:12:35.46
for a in g: <= この場合gがジェネレータで、aはジェネレータに生成された値

> aはこのスレで流行のジェネレータで、単にaと書くのはa.valueの
> 省略形じゃ

馬鹿すぎるwwwwwwwwwww
573デフォルトの名無しさん:2012/11/13(火) 23:12:54.45
ぼくがかんがえたさいきょうのジェネレータ
相手は死ぬ
そういう年頃があってもいいじゃない
574デフォルトの名無しさん:2012/11/13(火) 23:14:00.82
>>572
お前、Pythonごときと俺の最強言語が一緒だと思うなよ?
575デフォルトの名無しさん:2012/11/14(水) 00:00:17.62
【お題】
1. 円周率を小数点以下1000桁まで求めるコードを組み
2. その結果を用いて、小数点以下に列ぶ数字の出現数順に並べて出力せよ

1は書き下ろしはもちろん、ライブラリを使っても1000桁のコピペでも構わないがコードとして示すこと。
参考:http://mail2.nara-edu.ac.jp/~asait/c_program/sample0/pi.htm
2の出力結果も示すこと。出現数が多い順に並んでいて出現数が分かれば形式は自由
できれば、1レス以内に収まる簡潔なコードが望ましいが、適宜コード貼り付けサイトも活用されたし
576デフォルトの名無しさん:2012/11/14(水) 00:04:14.26
print(sortByShutugensu(getEnshuritsu(1000)))

できた
577デフォルトの名無しさん:2012/11/14(水) 01:11:29.55
>>575 Rubyで
require 'bigdecimal/math'

pi1000 = BigMath.PI(1000).*(10**999).to_i.to_s
histogram = pi1000.chars.each_with_object(Hash.new{|h,k| h[k] = 0}){|s,h| h[s] += 1}
p histogram.sort_by{|(a,b)| [-b,a]}

結果
[["1", 116], ["9", 105], ["2", 103], ["3", 103], ["8", 101], ["5", 97], ["7", 95], ["6", 94], ["0", 93],["4", 93]]

全部で一行のメソッドチェーンにするのもアレなんで分割した
578デフォルトの名無しさん:2012/11/14(水) 01:48:56.79
>>575
意外と簡単な処理で数万桁くらいまでなら求められるんですね。びっくり。
Squeak Smalltalk で。

| atan pi1000 |

atan := [:m :d |
 | x y m2 i limit |
 x := y := (1 asScaledDecimal: d) / m.
 m2 := m * m.
 i := 0.
 limit := (10 raisedTo: d negated) asScaledDecimal: d.
 [ | z |
  z := (y := y / m2) / (2 * (i := i + 1) + 1).
  x := i even ifTrue: [x + z] ifFalse: [x - z].
  z < limit
 ] whileFalse.
 x
].

pi1000 := (atan value: 5 value: 1000) * 4 - (atan value: 239 value: 1000) * 4.
((pi1000 asString allButFirst: '3.' size) first: 1000) asBag sortedCounts

"=> {116->$1 . 106->$9 . 103->$2 . 102->$3 . 101->$8 . 97->$5 . 95->$7 . 94->$6 . 93->$0 . 93->$4} "


ついでに10000桁も算出&カウントしてみた。

=> {1046->$5 . 1026->$1 . 1021->$2 . 1021->$6 . 1014->$9 . 1012->$4 . 974->$3 . 970->$7 . 968->$0 . 948->$8}
579デフォルトの名無しさん:2012/11/14(水) 11:41:07.64
意外と >>577>>578 の結果が違うんですね。びっくり。
580デフォルトの名無しさん:2012/11/14(水) 12:40:42.12
頭の3.を含むか含まないかの違いだろう
”小数点以下に列ぶ数字の...”って云っているので、含めない方が正解か?
581デフォルトの名無しさん:2012/11/14(水) 13:00:16.38
3 の出現数だけならそれで説明付くが
9 の出現数が違うのはなぜだろう
582デフォルトの名無しさん:2012/11/14(水) 13:01:33.40
1001桁目か1000桁目か999桁目が9なんだろ
583デフォルトの名無しさん:2012/11/14(水) 13:04:29.08
これはひどい
584デフォルトの名無しさん:2012/11/14(水) 13:06:13.60
ざこば
585デフォルトの名無しさん:2012/11/14(水) 14:17:52.77
In[1]:= DigitCount[N[Pi, 1001], 10, Range[0, 9]]
Out[1]= {93, 116, 103, 103, 93, 97, 94, 95, 101, 106}

Mathematicaで3.を含んで小数点以下1000桁
586デフォルトの名無しさん:2012/11/14(水) 14:35:12.11
WolframAlpha でもできた。簡単のため出現頻度は 1, 2, 3, ... ,9, 0 の順で固定。

http://www.wolframalpha.com/input/?i=DigitCount[N[Pi%2C1001]]
[116, 103, 103, 93, 97, 94, 95, 101, 106, 93]

http://www.wolframalpha.com/input/?i=DigitCount[N[Pi%2C10001]]
[1026, 1021, 975, 1012, 1046, 1021, 970, 948, 1014, 968]
587デフォルトの名無しさん:2012/11/14(水) 21:01:39.75
>>575 Haskell

import Data.List
import Data.Ord

arctan :: Rational -> [Rational]
arctan m = [s*(m^n)/toRational n | (n,s) <- zip [1,3..] $ cycle [1,-1]]

main = print . sortBy (comparing (negate.snd)) .
  map (\s -> (head s, length s)) . group . sort . show . fst .
  properFraction $ (4 * (4 * x - y) - 3) * n
  where
  n = 10^1000
  x = sum $ takeWhile ((1/(16*n) <).abs) $ arctan (1/5)
  y = sum $ takeWhile ((1/(4*n) <).abs) $ arctan (1/239)


-- 結果
[('1',116),('9',106),('2',103),('3',102),('8',101),('5',97),('7',95),('6',94),('0',93),('4',93)]
588デフォルトの名無しさん:2012/11/14(水) 21:08:06.40
うぉ、はずかしっ、3は含まないのか
require 'bigdecimal/math'
pi1000 = BigMath.PI(1000).-(3).*(10**1000).to_i.to_s
histogram = pi1000.chars.each_with_object(Hash.new{|h,k| h[k] = 0}){|s,h| h[s] += 1}
p histogram.sort_by{|(a,b)| [-b,a]}

結果
[["1", 116], ["9", 106], ["2", 103], ["3", 102], ["8", 101], ["5", 97], ["7", 95], ["6", 94], ["0", 93],["4", 93]]

自前で計算させると
require 'bigdecimal'
def atan_i(m, limit=1000)
x = y = BigDecimal(1).div(BigDecimal(m),limit)
m2=BigDecimal(m)**2
i = 0
loop do
z = (y = y.div(m2,limit)).div((2*(i += 1) + 1),limit)
x = i.even? ? x+z : x-z
return x if z.round(limit).zero?
end
end
pi = (atan_i(5)*4-atan_i(239))*4
pi1000 = ((pi-3)*10**1000).to_i.to_s
histogram = pi1000.chars.each_with_object(Hash.new{|h,k| h[k] = 0}){|s,h| h[s] += 1}
p histogram.sort_by{|(a,b)| [-b,a]}
589デフォルトの名無しさん:2012/11/14(水) 21:33:19.81
XMPP::Conn: ReceivedID: nope...
XMPP::Conn: WaitForID: haven't gotten it yet... let's wait for more packets
XMPP::Conn: Process: timeout(1)
XML::Stream: Read: buff(<stream:error><host-unknown xmlns='urn:ietf:params:xml:ns:xmpp-streams'/></stream:error>)


これは何が原因だと思いますか?
教えてください
<stream:error><host-unknown xmlns='urn:ietf:params:xml:ns:xmpp-streams'/></stream:error>
590デフォルトの名無しさん:2012/11/14(水) 23:41:47.68
>>575
Common Lisp

(labels ((pi (x)
(labels ((my-atan (y)
(loop for i upto x
for j = (1+ (* i 2))
sum (/ (if (evenp i) 1 -1) j (expt (/ y) j)))))
(* (- (* (my-atan 1/5) 4) (my-atan 1/239)) 4))))
(loop with l = (loop for i upto 9 collect `(,i . 0))
for (q r) = (multiple-value-list (floor (* (- (pi 1000) 3) 10)))
then (multiple-value-list (floor (* r 10)))
repeat 1000
do (incf (cdr (assoc q l)))
finally (return (sort l #'> :key #'cdr))))
591デフォルトの名無しさん:2012/11/15(木) 20:18:23.30
592デフォルトの名無しさん:2012/11/15(木) 23:25:33.52
>>575
JavaとC#で一番簡潔なコードは
1000桁コピペだった件
やっぱりLLの足下にも及ばなかったよ……
593デフォルトの名無しさん:2012/11/16(金) 01:25:24.22
標準ライブラリにBigMath.PIがあるかないかの違いで
威張られても・・・
594デフォルトの名無しさん:2012/11/16(金) 07:52:55.12
JavaドカタにはBigMath.PIが無かったら手も足も出ないわな
LLの方が言語だけじゃなくプログラマの質も高い
595デフォルトの名無しさん:2012/11/16(金) 08:06:02.88
>プログラマの質も高い

言語に下駄履かせてもらってるんだけど
596デフォルトの名無しさん:2012/11/16(金) 08:16:15.29
高い下駄を履きこなせるのも能力のうち
597デフォルトの名無しさん:2012/11/16(金) 08:29:35.26
いや、簡単に使えるんだから
低い下駄だろw
598デフォルトの名無しさん:2012/11/16(金) 11:13:18.40
馬鹿には無理
599デフォルトの名無しさん:2012/11/16(金) 20:21:03.40
過去の資産や政治的理由を除いて、純粋に言語の機能だけでみればC#
そして、政治的理由とトレンドを考えてsharpkitで遊ぼうとしたけどもインストーラーが動かない

>>594
冗談抜きでLLとか言ってる人たちがcのプリミティブな配列で多倍長整数やhashを実装するところが想像できない
だいたい、javaより重要なものがない
600デフォルトの名無しさん:2012/11/16(金) 20:32:10.22
>>551
c/c++プログラマと〜使い()では、手段と目的が違うからな
601デフォルトの名無しさん:2012/11/16(金) 20:55:56.93
>>599
多倍長とか言って10のマイナス1000乗の精度が求められる世界だからね
冗談抜きでは想像できないね
602デフォルトの名無しさん:2012/11/16(金) 22:29:39.67
花形IT企業勤務のレッドコーダーから見たらJava土方だの
LLだの低レベルな罵り合いは微笑ましい
603デフォルトの名無しさん:2012/11/16(金) 22:43:59.66
>>599
凄いレベルの馬鹿発見
604デフォルトの名無しさん:2012/11/17(土) 10:45:15.09
ブロックを渡せないオブジェクト指向って馬鹿だよな
ブロックがないなら継承してオーバーライドしてコンストラクタ呼べばいいじゃないって
歴史に残る馬鹿だな
605デフォルトの名無しさん:2012/11/17(土) 12:08:17.48
>>575

@Mathematica

x = Pi // N[#, 1000 + 1] & // ToString //
StringReplace[#, "3." -> ""] & // Characters // ToExpression ;

Table[{i, Count[x, i]}, {i, 0, 9}] // Sort[#, #1[[2]] > #2[[2]] &] &

{{1, 116}, {9, 106}, {2, 103}, {3, 102}, {8, 101}, {5,
97}, {7, 95}, {6, 94}, {4, 93}, {0, 93}}
606605:2012/11/17(土) 12:14:26.68
連投スマソ。

x (゚听)イラネ

@Mathematica

Pi // N[#, 1000 + 1] & // ToString //
 StringReplace[#, "3." -> ""] & // Characters // ToExpression //
 Table[{i, Count[#, i]}, {i, 0, 9}] & // Sort[#, #1[[2]] > #2[[2]] &] &

{{1, 116}, {9, 106}, {2, 103}, {3, 102}, {8, 101}, {5, 97}, {7, 95}, {6, 94}, {4, 93}, {0, 93}}
607デフォルトの名無しさん:2012/11/17(土) 16:34:17.65
>>604
× ブロックを渡せないなら指向ではない。
○ ブロックを渡すことでできる「何か」がブロック以外で出来ればオブジェクト指向。
608デフォルトの名無しさん:2012/11/17(土) 17:04:50.81
>>607
ブロックで出来る程度の事を継承でやるのは冗長で、
コード間に無駄な密結合を発生させ、可読性と保守性を落とす
馬鹿馬鹿しい行為だと>>604は指摘してるだけで、
オブジェクト指向じゃないとは書いてないよ
609デフォルトの名無しさん:2012/11/17(土) 18:18:51.09
冗長ってようするにタイピング数が多いってだけだろ?
そんなに困るのか?
610デフォルトの名無しさん:2012/11/17(土) 18:19:46.51
タイピング数が多い以外の問題を
具体的に言うことができたら>>608のいうことを
少しは信じてやってみいいぞw
611デフォルトの名無しさん:2012/11/17(土) 18:22:46.86
タイプ数それなりに重要じゃね?
例えばイテレータとかも「こんだけ冗長ならもうforループに直書きでよくね?」になるんだよなあ
612デフォルトの名無しさん:2012/11/17(土) 18:25:13.39
こんだけ冗長ってどれだけ?
共通部分は除いてどこが冗長化書いてみてよ。

タイプ数、数えてあげるからさ。
613デフォルトの名無しさん:2012/11/17(土) 20:14:36.91
for(int i=0;i<a.size();i++)total+=a.get(i);
for(Iterator<Integer>i=a.iterator();i.hasNext();)total+=i.next();

Java辺りには結構いると思うぞ
「イテレータの何が便利なのか分からない、冗長かつ読みにくくなっただけじゃん」
って思ってる人間。

LLのイテレータは大概、どう考えても書きやすく読みやすくなるから
自然と使うようになると思う。「良いものを自然と使いたくなる」ってのは案外重要だと思うんだ。
614デフォルトの名無しさん:2012/11/17(土) 20:34:50.75
データ列の生成と、データの処理と、繰り返し終了の判定
これらの直交する処理を分離しておくと再利用性が高くなるね
615デフォルトの名無しさん:2012/11/17(土) 21:45:08.52
つうかJavaでも
for(Integer i:a) total+=i;
って書けるんだが・・・
616デフォルトの名無しさん:2012/11/17(土) 22:29:35.18
Java相手だからって馬鹿にしすぎ
流石にイテレータでループくらいは短く書けるよ、結構昔(Java5)から
617デフォルトの名無しさん:2012/11/17(土) 22:34:28.00
昔の知識で止まったまま批判してることとかよくあるね。XPの頃のままでWindowsを批判するMacユーザーとか。
618デフォルトの名無しさん:2012/11/17(土) 22:39:46.50
>>613
予想通り、批判が的はずれでワロタw
619デフォルトの名無しさん:2012/11/17(土) 22:51:27.98
>>613
a.get(i)はaとiが分離しているから変数が2個いる
Iteratorクラスを作れば変数を1個減らせる (クラスは1個増える)

あくまで減らすのが目的だから
良いクラスを増やせば良いことがあるみたいな言い方はおかしい
620デフォルトの名無しさん:2012/11/17(土) 23:02:13.36
冗長さが実用上ハンデになるか否か議論したくても
まとまったソースコードも無いんじゃ水掛け論だよ

せめて、スレに出て来た御題のどれか一つでも解いてくれたら……
621デフォルトの名無しさん:2012/11/17(土) 23:13:43.20
Java8からクロージャも書けるようになるから、ブロックがどうのこうのって議論もあれだな
今でもScalaとかあるけど
622デフォルトの名無しさん:2012/11/17(土) 23:21:12.60
クロージャじゃなくてSAMタイプの構文糖だけど、言いたい事は分かる
623デフォルトの名無しさん:2012/11/17(土) 23:24:29.58
ソートアルゴリズムと比較関数をStrategyとして受け取って、
ソート後に出力するというStrategyパターンの例(Java)


import java.util.*;

interface SortStrategy<T> {
void sort(List<T> l, Comparator<T> comp);
}

class CollectionsSortStrategy<T> implements SortStrategy<T> {
public void sort(List<T> l, Comparator<T> comp) { Collections.sort(l, comp); }
}

class Context<T> {
private SortStrategy<T> sort;
private Comparator<T> comp;
public Context(SortStrategy<T> sort, Comparator<T> comp) { this.sort = sort; this.comp = comp; }
public void execute(List<T> l) { this.sort.sort(l, this.comp); System.out.println(l.toString()); }
}

class StrategyExample {
public static void main(String[] args) {
Context<Integer> context = new Context<Integer>(new CollectionsSortStrategy<Integer>(),
new Comparator<Integer>() { public int compare(Integer v1, Integer v2) { return v1 - v2; }});
context.execute(Arrays.asList(new Integer[] {3,1,2,4}));
}
}
624デフォルトの名無しさん:2012/11/17(土) 23:26:01.91
>>623
えと、共通部分は省略してください。
ライブラリの実装までわざわざ書きますか?
importも不要です。そんなのエディタが勝手に処理するじゃないですか。
625デフォルトの名無しさん:2012/11/17(土) 23:29:42.96
guavaを使ったソートの例 (Java)
http://www.zecun.org/?m=201203

Ordering<Foo> ordering = Ordering.natural().nullsFirst().onResultOf(new Function<Foo, String>() {
 public String apply(Foo foo) {
  return foo.sortedBy;
 }
});
626デフォルトの名無しさん:2012/11/17(土) 23:31:15.47
つまりJava使いは自分でライブラリは実装しないと

そりゃドカタと言われますわ
627デフォルトの名無しさん:2012/11/17(土) 23:31:58.38
http://d.hatena.ne.jp/mtoyoshi/20100725/1280040233

List<Integer> list = Ints.asList(1,2,3,4,5);
List<Integer> evenList = (List<Integer>)Collections2.filter(list, new Predicate<Integer>() {
  @Override
  public boolean apply(Integer input) {
    return input % 2 == 0;
  }
});

List<Integer> list = Ints.asList(1,2,3,4,5);
List<Integer> negativeList = Lists.transform(list, new Function<Integer, Integer>() { // -1,-2,-3,-4,-5
  @Override
  public Integer apply(Integer input) {
    return -1 * input;
  }
});
628デフォルトの名無しさん:2012/11/17(土) 23:32:38.83
>>625
あ、車輪の再発明だから
ライブラリがあるものを書くなって意味か
お前が馬鹿だったw
629デフォルトの名無しさん:2012/11/17(土) 23:33:57.28
ソートはどうでもいいけど、ストラテジパターンはよく使う
これが冗長だとキツい
630デフォルトの名無しさん:2012/11/17(土) 23:34:35.27
このスレのお題をjavaで書くとこうなる
一件ジェネリックスが面倒だけど、エディタが補間してくれるので
そうでもない
 int[] a = {1, 3, 4, 5, 7, 9, 10, 11, 13};
 List<List<Integer>> r = new ArrayList<List<Integer>>();
 for (int i = 0; i < a.length; i++) {
  if (i == 0 || a[i - 1] != a[i] - 1) {
   r.add(new ArrayList<Integer>());
  }
  r.get(r.size() - 1).add(a[i]);
 }
631デフォルトの名無しさん:2012/11/17(土) 23:37:36.35
Java7ならこう書けるはず。new ArrayList<>();

結局型安全という付加価値をつけた分
コードが長くなってるだけで、冗長ではないんだよ

型安全のメリットを失ってまで短くするのは
本末転倒ってもんだ。
632デフォルトの名無しさん:2012/11/17(土) 23:40:59.97
>>629
> ストラテジパターンはよく使う

よく使うってのは、ストラテジパターンを使ったライブラリの
利用者側か?それともライブラリ側か?

もしライブラリ側ならそれは設計がまずいとしか思えない。
ジェネリクス使わないで型ごとに作ってたりな。

ライブラリの利用者側なら、大してコード多くないだろ。
コードの大半はエディタが未実装のメソッドのテンプレートを生成してくれるし。
633デフォルトの名無しさん:2012/11/17(土) 23:42:34.33
>>627
この冗長なコードをリンク付きでLLスレに貼るとか
鬼畜かお前は
634デフォルトの名無しさん:2012/11/17(土) 23:43:27.34
ん?で?
635デフォルトの名無しさん:2012/11/17(土) 23:44:25.06
>634
冗長なレスだなw
馬鹿には、「で?」だけでいいだろw
636デフォルトの名無しさん:2012/11/17(土) 23:46:47.49
プログラミング言語Jochoって言語作りたくなってきた
637デフォルトの名無しさん:2012/11/17(土) 23:51:01.43
まじめな話をすると、ちゃんとインデント付けて
キーワードハイライトもあると、>>623ですら結構スラスラ読める
型のところは色が付くから、型を読む必要が無いときは読み飛ばせる
638デフォルトの名無しさん:2012/11/17(土) 23:51:49.61
>>627をRubyで書くとどうなるの?
639デフォルトの名無しさん:2012/11/17(土) 23:53:05.21
そんな話はしていない。sortもcompareも
ライブラリがあるのだからそれを利用しろと。

そしてmainとかimportは何度も書くものじゃないんだから
実際に書く必要があるコードだけを書いてくれということ。
640デフォルトの名無しさん:2012/11/17(土) 23:53:35.56
rubyのコードと”文字数”で比較してみようぜ。
641デフォルトの名無しさん:2012/11/17(土) 23:55:29.75
「文字数」ならcのゴルフコードが結構いい線行くと思うけど、
LL好きにとっては、cがいい言語で、ゴルフコードが素晴らしい書き方なの?
642デフォルトの名無しさん:2012/11/17(土) 23:56:56.38
>>636
っCOBOL
643デフォルトの名無しさん:2012/11/17(土) 23:57:24.52
型を書く必要があるから「文字数」で不利ってわかってて言ってるんだろうな
そんなものは重要じゃないと言ってるのにいくら言っても分からない
644デフォルトの名無しさん:2012/11/18(日) 00:00:16.64
型安全というメリットが追加されてるんだから
こんなもんでしょ。

運用系みたいに1000行も行かないような
小さなスクリプト書くなら、型安全なくてもいいけど

それを大きく超える。一人で全部把握できないようなものは
型安全ないとやっていけないよ。
型安全がないとコード修正の影響範囲がつかめない。
645デフォルトの名無しさん:2012/11/18(日) 00:03:20.40
>>631
いや、それでも少し冗長ではあるよ
Scalaなら>>630>>364になるんだし
ただ、それが問題になるほどのことなのかは
議論の余地あり
646デフォルトの名無しさん:2012/11/18(日) 00:05:21.17
>>364って改行を無理やり減らしただけじゃねーかw
そんなトリックに騙されると思って?

val a = List(1, 3, 4, 5, 7, 9, 10, 11, 13)
var r = ListBuffer[ListBuffer[Int]]()
a.indices.foreach(i =>
 if (i > 0 && a(i) -1 == a(i -1))
  r.last + a(i)
 else
  r + ListBuffer(a(i))
)
647デフォルトの名無しさん:2012/11/18(日) 00:06:33.69
>>646
だから、それでもこっちの方が簡潔なんだが
648デフォルトの名無しさん:2012/11/18(日) 00:08:06.48
>>638
元のコードを留めた程度に書くなら
even_list = list.select{| input | n % 2 == 0 }
negative_list = list.map{| input | -n }
かなあ、実際は偶数判定をするメソッドが既にあるのでもっと簡潔だが
649デフォルトの名無しさん:2012/11/18(日) 00:09:43.12
間違えた n は input に脳内変換してくれ
650デフォルトの名無しさん:2012/11/18(日) 00:13:40.35
>>647
簡潔じゃないとは言ってないよ
空白改行除いて、Javaでは181文字だったのが143文字まで減っている。
38文字タイピング文字数を減らせている。
651デフォルトの名無しさん:2012/11/18(日) 00:14:30.81
>>627はJavaだと普通に
 List<Integer> list = Arrays.asList(1,2,3,4,5);
 List<Integer> r = new ArrayList<Integer>();
 for (Integer e:list) {
  if (e % 2 == 0) r.add(e);
 }
 r = new ArrayList<Integer>();
 for (Integer e:list) {
  r.add(-e);
 }
って書くけど、これじゃ駄目なの?
無理矢理なんちゃらパターンやら小難しいこと考える必要あるんか?
652デフォルトの名無しさん:2012/11/18(日) 00:15:13.46
>>650
そうだね。だから少し冗長だね。と言ってるんだけど
何を反論したいの?
同じ意見じゃん
653デフォルトの名無しさん:2012/11/18(日) 00:17:21.63
>>648
> 実際は偶数判定をするメソッドが既にあるので

Javaにもそれがあったら(なければ作ればいいだけだけどw)

List<Integer> list = Ints.asList(1,2,3,4,5);
List<Integer> evenList = (List<Integer>)Collections2.filter(list, new Predicate<Integer>() {
  @Override
  public boolean apply(Integer input) {
    return input % 2 == 0;
  }
});

このコードはここまで短くなりそう。

List<Integer> list = Ints.asList(1,2,3,4,5);
List<Integer> evenList = (List<Integer>)Collections2.filter(list, MyUtil.Filter);
654デフォルトの名無しさん:2012/11/18(日) 00:18:54.66
>>651

>>653みたいによくあるアルゴリズムを
関数化することでコードを短く出来る。
655デフォルトの名無しさん:2012/11/18(日) 00:20:36.38
>>654
わかりにくいだけじゃん
651でも十分簡潔で分かりやすいコードなんだが
無理矢理短くしてもメリットあまりないと思うけど
656デフォルトの名無しさん:2012/11/18(日) 00:20:49.32
あとバグの可能性が減る。
結局のところ return input % 2 == 0; の
比較行しか見なくて済むから、
このコードは実質たったのこれだけとかんがえられる。
657デフォルトの名無しさん:2012/11/18(日) 00:23:17.08
たかがこの程度でバグの可能性が減るってのは本当かどうか怪しいな
この例は元のコードが簡潔だから良い例じゃない
しかし、ちょっと前にも、ジェネレータやらgroupbyでバグの可能性が増えてたから
LLで関数型スタイルが良いんだというのは結局思い込みじゃないの
658デフォルトの名無しさん:2012/11/18(日) 00:23:21.91
>>655
そりゃ今回は条件の内容がわかりやすいからだろw

もし複雑な条件でも、その条件だけを入れ替え可能になっている。
使うときはすごく簡単になるぞ。
659デフォルトの名無しさん:2012/11/18(日) 00:25:02.61
>>658
仮に複雑な条件でも、どちらの書き方でもif文が複雑になるでしょ
外側のforで回す構造は簡潔かつ分かりやすいままじゃん
そんなメリットだとは到底思えないけど
660デフォルトの名無しさん:2012/11/18(日) 00:28:56.88
>>659
if文を分離できるって所が重要なんだよ。

コードの内容は同じでも、それを使う部分が凄くシンプルになる。
そしてif文の中身が交換可能になってる。
同じインターフェースを持っているものに入れ替え可能という追加機能がある。

※filterの中身は外部から与えられる。
List<Integer> evenList = (List<Integer>)Collections2.filter(list, filter);

どちらもコードは同じようにシンプルなら
追加機能がある法が良い。
661デフォルトの名無しさん:2012/11/18(日) 00:30:41.84
>>660
何が重要なのかさっぱり分からない
簡潔なfor文書けば良いだけなのに
そんなにfor文繰り返すのが嫌なのか?
662デフォルトの名無しさん:2012/11/18(日) 00:57:40.36
Interfaceつかうコードにメリットが見いだせないのか、
お題が単純だからロジックを分離するほどでもないって意味なのかどっちなんだろう。
663デフォルトの名無しさん:2012/11/18(日) 01:25:51.26
filterやmapごときなら、単純なfor文で代用できるので分離に躍起になるほどではない。
ソートのようなもっと複雑な制御ロジックなら、ロジックを分離する意味が
大きいかもしれないが、そう頻繁にあることではないし、その場合にはInterfaceを使えるわけだし
java8ではそれも簡単になるだろう
664デフォルトの名無しさん:2012/11/18(日) 01:30:52.15
大体、そんなにLLが優れているなら、GCJなどの大会でLLが席巻していないとおかしいだろう
現実はC++が最も実績を残しているし、Javaもそれに次いで多い
665デフォルトの名無しさん:2012/11/18(日) 01:48:05.55
問題に応じて複数の言語を用意しておくものじゃないの
というか、ああいう競技だと問題が大きくて
制限時間に収まらないとかがあるから
666デフォルトの名無しさん:2012/11/18(日) 04:08:00.28
GCJってGNUのJavaのやつしか知らんが
大会ってそもそも「何分で実装出来るか」じゃなく
「制限時間内でどれだけ効率の良いプログラムに出来るか」
を競うのが主流じゃないのん?LLにとっては不利な条件でしょ
667デフォルトの名無しさん:2012/11/18(日) 04:34:59.87
LLに不利なことがあるなんて・・・・
668デフォルトの名無しさん:2012/11/18(日) 04:42:04.16
世の中不利なことばかりです
669デフォルトの名無しさん:2012/11/18(日) 05:57:52.41
JavaとかC#はIDEの補完が効くから実際のタイピング数は少なくて済むよね。
670デフォルトの名無しさん:2012/11/18(日) 07:37:51.59
>>666
残念ながらそういう条件じゃない
GCJの場合はLLでも完全に間に合うように作ってある
過去にはPythonで一位になった人もいた
スピードが大事で、まさに「何分で実装できるか」のような
大会
そういう大会で上位陣にはC++やJavaが多い
671デフォルトの名無しさん:2012/11/18(日) 07:53:38.98
>>646
Haskellだと>>630>>374になるよ
Scalaよりさらに短い
672デフォルトの名無しさん:2012/11/18(日) 08:23:14.11
>>670
http://www.go-hero.net/jam/12/languages/6

実際のところ、LL使いは殆ど参加してない
673デフォルトの名無しさん:2012/11/18(日) 08:29:30.18
あと実行速度も超重要だから、特にLarge > GCJ
674デフォルトの名無しさん:2012/11/18(日) 08:31:43.01
>>672
それはLLがこの大会で有利な言語じゃないからみんな使わないだけ
>>673
Largeでも十分LLで間に合うよ
675デフォルトの名無しさん:2012/11/18(日) 08:35:50.50
> それはLLがこの大会で有利な言語じゃないからみんな使わないだけ

速度的に不利だからね
676デフォルトの名無しさん:2012/11/18(日) 08:36:08.78
てか、>>672のグラフは決勝に残った人がLLを全く使ってないということを示してるだけじゃん。
LL使いは決勝までに全員敗退したんでしょw
677デフォルトの名無しさん:2012/11/18(日) 08:37:18.95
速度的に不利だからね
678デフォルトの名無しさん:2012/11/18(日) 08:37:20.80
>>675
だから速度は全く関係ない。正しいアルゴリズムならLLで間に合うように作ってある。
しかも、間に合うか間に合わないかの二択で点数決まるから、全く不利にならない。
679デフォルトの名無しさん:2012/11/18(日) 08:38:15.02
C++なら正しくなくても力技で解けるけどね
680デフォルトの名無しさん:2012/11/18(日) 08:40:10.22
ちなみに2011年はPythonが優勝した(まあ決勝の他の人は全部非LLだったけど)
LLでも間に合うように作ってあるからそういうことも可能
LLの速度は全然不利ではない
681デフォルトの名無しさん:2012/11/18(日) 08:41:16.78
>>679
そんなことになるのは予選やRound1くらい
決勝近くなってくると、問題はちゃんと洗練されるから
そんなことにはならない
682デフォルトの名無しさん:2012/11/18(日) 08:43:48.08
C++勢はSmallを力技で解いてポイント稼ぎ
683デフォルトの名無しさん:2012/11/18(日) 09:06:02.11
>615
C++も最近出来るようになったね
684デフォルトの名無しさん:2012/11/18(日) 09:09:18.10
>>682
例えばどの問題?
LLでも力技で間に合うように作ってあるんだが。
pypyに代表されるように、JITコンパイラで最近のLLは結構速いしな
685デフォルトの名無しさん:2012/11/18(日) 09:42:57.92
LL使いって、関数がお膳立てされている世界で生きてるから
そんなのが通用しない、自分で問題を解くような世界では
生きられないんだよw
686デフォルトの名無しさん:2012/11/18(日) 10:09:39.27
C++は安全性を重視しない点はLLに似ているよね
間違いを事前に防止できなくても後で直せばいい
現に、Java7がだめでもJava8で改善すればいいって開き直る奴が最強だからな
687デフォルトの名無しさん:2012/11/18(日) 10:16:25.37
Haskell知らないんだけど、>>374ってLispっぽいcarcdr式の
パターンマッチしか使えんの?foldrで逆からになっててわかりにくい
こういう風にリストの末尾でパターンマッチしたいんだけど

f ys:y x | y ==x-1 = ys:(y:x)
f ys x = ys:[x]
main = print $ foldl f [] [1,3,4,5,7,9,10,11,13]
688デフォルトの名無しさん:2012/11/18(日) 12:18:43.59
右畳み込みと左畳み込みで分かり易さが違うとは、これいかに

a + (b + (c + d))
(a + b) + c) + d
689デフォルトの名無しさん:2012/11/18(日) 12:21:52.06
だって、普通先頭から末尾に向かって処理していくでしょ
690デフォルトの名無しさん:2012/11/18(日) 12:24:59.11
>>687
リストでは無理
遅延評価のおかげで無限列でも動くし、foldrに慣れてください、としか
691デフォルトの名無しさん:2012/11/18(日) 12:27:59.37
>>689
先頭から順番に処理してますよ > foldr
692デフォルトの名無しさん:2012/11/18(日) 12:58:01.88
>>690
意味が分からん
>>687でも無限列で動くでしょ

>>691
どういう意味?
ysは後ろの数字からリストに入ってきて大きくなっていくでしょ
693デフォルトの名無しさん:2012/11/18(日) 13:03:07.20
ああ、意味が分かった
遅延評価してるって言いたいだけか
でも、それは687に対するメリットではないし、基本的に演算の左辺と右辺の優先順位が右辺になってる
ことに変わりはないよね
694デフォルトの名無しさん:2012/11/18(日) 13:04:15.01
>>692
無限列の末尾なんて取れないでしょ
lastを取ろうとした所で無限ループ
695デフォルトの名無しさん:2012/11/18(日) 13:06:57.35
>>694
パターンマッチング適用時点では、常に無限でないリストが入ってくるから
そうはならない
696デフォルトの名無しさん:2012/11/18(日) 13:10:57.07
>>695
> パターンマッチング適用時点では、常に無限でないリストが入ってくるから

リストが無限列かどうかを判定するのは無理だし、
可能だとしても無限列が入ってきたら
マッチするパターンが存在しなくて>>687は動かない
697デフォルトの名無しさん:2012/11/18(日) 13:11:54.95
>>696
少なくとも687に関して言うなら、fの引数として絶対に無限列は入ってこないよ
作成途中の非無限列しか入ってこない
698デフォルトの名無しさん:2012/11/18(日) 13:15:08.28
>>697
ああ、そうでした
完全にこちらの間違いでした
699デフォルトの名無しさん:2012/11/18(日) 13:15:58.22
え?w
2chでそんなに素直に謝る人初めて会ったw
君は凄い人だねw
700デフォルトの名無しさん:2012/11/18(日) 13:51:37.53
いやいや、実は>>374は無限列で動かないので
最初の前提から間違っていたw
恥ずかしいww


言いたかった事は、下のような関数定義で
上は無限列でもOKだけど、下はダメだよ的な事が言いたかった...

map f = foldr (\x xs -> f x : xs) []
map f = foldl (\xs x -> xs ++ [f x]) []
701デフォルトの名無しさん:2012/11/18(日) 14:38:33.68
>>700
ちょっとわからないのは、
(1) >>374>>687も動かないのはなぜか
(2) 両方動かないのならやっぱり、末尾のパターンマッチが駄目な理由にはふさわしくないのでは?
(3) mapで上はいいのに、下は駄目な理由は?(Haskellがそういう実装になってるのはどういう理由なのか。止むに止まれぬ理屈なのかどうか)
702デフォルトの名無しさん:2012/11/18(日) 14:44:56.50
foldl'
703デフォルトの名無しさん:2012/11/18(日) 16:05:53.16
>>680
そもそもweb系言語で計算量について考えるような問題領域なんてあるの?
704デフォルトの名無しさん:2012/11/18(日) 16:08:29.61
>>701
(1)正直よく分からない。動きそうなんだけど、どこかで評価が止まらない...

(2)末尾だけパターンマッチできればOK?それとも先頭と末尾の両方をパターンマッチできる必要有り?

(3)説明が難しいんだけど、例えば>>700で map f [1..4] って式は、

上: f 1 : (f 2 : (f 3 : (f 4 : [])))
下:((([] ++ [f 1]) ++ [f 2]) ++ [f 3]) ++ [f 4]

って感じになる。head $ map f [1..4] ってすると、どちらも f 1 を返すけど
上の式は遅延評価により (f 2 : (f 3 : (f 4 : []))) はまだ評価されない
一方、下のほうは ++ を内側まで評価しないと f 1 まで行き着かない
705デフォルトの名無しさん:2012/11/18(日) 16:12:28.44
c++やjavaで何かしら問題を解く上で計算量について考える場面に出くわすことがあったとしても、
スクリプト言語でどーこーするような領域で計算量について深刻に考える方がどこかおかしい。
706デフォルトの名無しさん:2012/11/18(日) 16:16:28.44
さすがにO(1)とO(n)とO(n log(n))とO(n^2)の違いくらいは意識するでしょ
707デフォルトの名無しさん:2012/11/18(日) 16:18:42.75
その昔、perlのsortやhashの内部実装についての書籍でオライリーが儲けていたよね
708デフォルトの名無しさん:2012/11/18(日) 16:22:00.61
Rubyのhashは1.8までメモリリークしてたよ
709デフォルトの名無しさん:2012/11/18(日) 16:38:55.91
pythonがwebで主流になれなかった理由がインデントのせいってことに1ペリカ
710デフォルトの名無しさん:2012/11/18(日) 16:51:04.73
pythonには標準のGUIのライブラリが必ず入ってるからじゃないの?
711デフォルトの名無しさん:2012/11/18(日) 17:01:04.46
想像だけど、htmlやxmlに組み込んだ際に、インデントでワケワカメになるからだと思ふ
てか、python標準のGUIライブラリってドレになるの?tk?gtk?wx?
rails製のmetasploitがCGIによるインターフェースってあたり、
クロスプラットフォームなGUIほど混沌とした世界もないんじゃないかな
712デフォルトの名無しさん:2012/11/18(日) 17:02:55.31
標準って意味ではtk
ttkもサポートされて見た目は改善されたが、もうtkってイメージだけでね...
713デフォルトの名無しさん:2012/11/18(日) 17:28:14.71
tkって、枯れてて、さっさと仕事片付けろってな用途にはピッタリじゃね?
714デフォルトの名無しさん:2012/11/18(日) 17:41:49.07
事実上wx辺りがメインになるかねえ
715デフォルトの名無しさん:2012/11/18(日) 18:06:54.49
wxはandroidからiOSまでと公式が風呂敷を広げたもののコミッタ、メンテナが集まらなかった不遇の子
そのうち、wxhtml5とか出来てそう。
716デフォルトの名無しさん:2012/11/18(日) 21:05:23.00
>>621
ようやくクロージャ入るんだ、ありがたい。
ラムダは7から入ってるんだっけ?
717デフォルトの名無しさん:2012/11/18(日) 21:20:23.24
クロージャが入ると匿名クラスで書かなくて良くなるから
3行ぐらい行数が減らせるんだっけ。
まあその3行はエディタが自動生成してくれる部分なんだが。
718デフォルトの名無しさん:2012/11/18(日) 21:24:06.67
クロージャーとラムダの違いって何?
概念とか言葉で説明するんじゃなくて
具体的な違いが知りたい。
719デフォルトの名無しさん:2012/11/18(日) 21:32:50.12
   _\.ー、ヽ } Vレ〃レ7/ノ  __
   > `ヽ ヽ)      ´∠r " /_
 _,..ゝ               _∠
 >      ,.....---....、    ∠、
⌒>    /:::::::::::::::::::::\   __.>
  `>、 ./:「トL「¨M¨'ヽ、::::!/
     ̄7Y´、__,  、_, Y′
     ノ∧ <・」 , L・> !}__
  r‐v'´:::::ヾ:、   r−、  ./::::::::::|`L、
../! i:::::::::::::::/ヽ  ̄ _ イ:::::::::::::! l ヽ
  i l:::::::::::::::l _  ̄   〉::::::::::::! l  ヽ
これがクロウじゃ

そしてこれがラムだ
              __ ,、__
          ,, -,,' ´ ̄" ` ''ー`、 `ヽ.         
   ___ ,,.. -' "/ { ` -一-ヾ ヽ.  ヽ    ☆
 /      ▽ / ∧ ヽ、, _,,  }}_} ・  ii /
/        {  {ゝ{__`ー-Y´f。Vハ'V } * ・ ii
! 〃      i  ハ ´{ ヽ   、ソ  } く  ☆ ii           
ヾ{{    ☆ `ヾ、_`ヽ'^' ヽ   " ! ! i ゚ : ii          
  ヽ{{  * .      ハ  く) /.l、! !  ; .ii           
   ヾ、.        { ` ーj‐'  {ムノ_   ノ            
     ヾ       , '´  ̄ー‐‐- '   ` く           
        ` ー---─,'         、   、}              
            ,'   ,〈 , -ー‐-、i∠⌒ヽ           
           ,'  ∧<=ニ二‐ノヽ、二ソ           
           /  ./ }  `"''' ";  `7T´     
720デフォルトの名無しさん:2012/11/18(日) 21:47:33.19
Java8に入るのは紆余曲折を経た上、クロージャではなくラムダだとか
ブロック云々程度ならラムダで十分ではあるが
721デフォルトの名無しさん:2012/11/18(日) 21:57:35.58
クロージャーはスコープが広すぎるっていう問題があるんだよね。

クロージャの中からその外のスコープの変数が丸見えになっちゃう。
もちろん書き込みの可能。

便利なこともあるのだけれど、クロージャーの中は
その中でスコープは閉じていて欲しい。
関数と同じで引数と戻り値があるのだから十分なはず。

そう考えるとラムダのほうが優れてるかな。
722デフォルトの名無しさん:2012/11/19(月) 01:57:43.69
ごめん、何言ってんのか分かんない
723デフォルトの名無しさん:2012/11/19(月) 02:09:23.72
クロージャの内側からの可視性は
(たぶんほとんどの言語で)その外側の関数内までなので
そこまで広いとは言えないと思うが

問題になるとしたらエクステントの方で、無限エクステントになってしまう
寿命が確定できないのはある意味めんどくさい
とはいえ、普通はGCに管理を任せるから問題にはならないけど
724デフォルトの名無しさん:2012/11/19(月) 04:52:09.83
ごめん、エクステントって何?
725デフォルトの名無しさん:2012/11/19(月) 07:52:31.26
Scalaがあるので、SAMタイプの構文糖(ラムダより劣ってる)なんてどうでもいい
726デフォルトの名無しさん:2012/11/19(月) 07:54:50.14
>>718
関数() {
変数aを宣言;
関数内関数() {
// ここから変数aにはアクセスできなかったり、制限付きだったりする
}
}

関数() {
変数aを宣言;
クロージャ {
// ここから変数aに自在にアクセスできる
}
}
727デフォルトの名無しさん:2012/11/19(月) 14:26:11.72
クロージャ = >>726の下のような性質を持った関数
ラムダ = 無名関数
なんじゃないの?
ラムダかクロージャーかっていう表現は少しおかしい気がする
728デフォルトの名無しさん:2012/11/19(月) 15:05:45.20
イギリスのRubyカンファレンスBritrubyが人種・性別差別問題で開催中止に
http://developer.cybozu.co.jp/akky/2012/11/britruby-cancelled/
729デフォルトの名無しさん:2012/11/19(月) 15:17:55.16
>>727
クロージャか非クロージャか…だね本来の区別は
元がラムダ(=無名関数)があってもクロージャがない環境の話だからじゃないかな
730デフォルトの名無しさん:2012/11/19(月) 15:52:46.32
731デフォルトの名無しさん:2012/11/19(月) 20:17:11.41
【お題】
整数が入っている入れ子のリストから、
入れ子構造は保ったまま奇数のみを取り出す関数を書け
入れ子の深さは制限せず、空リストは取り除く事

例: [1, [2, 3], 4, [[5, [6]], 7]] #=> [1, [3], [[5], 7]]
732デフォルトの名無しさん:2012/11/19(月) 21:16:45.70
>>731
Common Lisp

(defun f (l)
(labels ((g (m)
(cond ((listp m) (delete nil (mapcar #'g m)))
((oddp m) m))))
(g l)))

(f '(1 (2 3) 4 ((5 (6)) 7))) ; => (1 (3) ((5) 7))
733デフォルトの名無しさん:2012/11/19(月) 21:47:34.30
>>731
Squeak Smalltalk

| collectOdd |
collectOdd := nil. "for compiler"
collectOdd := [:arr |
  arr inject: #() into: [:acc :elm |
   true caseOf: {
    [elm isArray] -> [acc, {(collectOdd value: elm) copyWithout: #()}].
    [elm odd] -> [acc, {elm}]}
    otherwise: [acc]]].

collectOdd value: #(1 (2 3) 4 ((5 (6)) 7)) "=> #(1 (3) ((5) 7)) "
734デフォルトの名無しさん:2012/11/19(月) 21:48:43.69
>>731
@Mathematica

f[lst_] := Module[{dropEven, rmEmpty},

 dropEven[lstx_] := Which[
  lstx == {}, {},
  ListQ[First[lstx]], Prepend[f[Rest[lstx]], f[First[lstx]]],
  OddQ[First[lstx]], Prepend[f[Rest[lstx]], First[lstx]],
  True, f[Rest[lstx]]];

 rmEmpty[lstx_] := Module[{lst1, lst0},

  lst0 = {};
  lst1 = lstx;

  While[lst0 != lst1, lst0 = lst1;
   lst1 = lst1 // ToString //
    StringReplace[#, {", {}" -> "", "{}" -> ""}] & // ToExpression];

  lst1];

 lst // dropEven // rmEmpty];


In := f[{1, {2, 3}, 4, {{5, {6}}, 7}}]

Out = {1, {3}, {{5}, 7}}
735734:2012/11/19(月) 21:58:16.86
訂正:

dropEven 内の f は dropEven の間違いスマソ。正しくは↓

dropEven[lstx_] :=
 Which[lstx == {}, {}, ListQ[First[lstx]],
 Prepend[dropEven[Rest[lstx]], dropEven[First[lstx]]],
 OddQ[First[lstx]], Prepend[dropEven[Rest[lstx]], First[lstx]],
 True, dropEven[Rest[lstx]]];
736デフォルトの名無しさん:2012/11/19(月) 21:59:46.96
>>728
rubyのコミュニティ自体に、宗教やジェンダー、学歴、雇用制度といった山ほどの社会問題が見つかるが
そこに更に人種問題が加わったわけだ。きっと神の思し召しだな。つまり、新しい時代へのイノベーションだ
737デフォルトの名無しさん:2012/11/19(月) 22:04:48.89
>>732-735
おまいらって、この手の問題、何分ぐらいで解いてるの?
738デフォルトの名無しさん:2012/11/19(月) 23:26:50.56
>>731
Squeak Smalltalk >>733とは別解

| oddNums |
oddNums := nil.
oddNums := [:elem |
  true caseOf: {
   [elem isArray] -> [(elem gather: oddNums) ifNotEmpty: [:arr | {arr}]].
   [elem odd] -> [{elem}]}
   otherwise: [{}]].

#(1 (2 3) 4 ((5 (6)) 7)) gather: oddNums "=> #(1 (3) ((5) 7)) "
739デフォルトの名無しさん:2012/11/19(月) 23:31:39.26
>>731
Scheme

(define (f l)
 (fold-right (lambda (x y)
        (let ((z (cond ((list? x) (f x))
                ((odd? x) x)
                (else '()))))
         (if (null? z) y (cons z y))))
       '()
       l))

(f '(1 (2 3) 4 ((5 (6)) 7))); => (1 (3) ((5) 7))
740デフォルトの名無しさん:2012/11/20(火) 00:15:47.39
>>731
Perl
use List::Util qw(reduce);

sub odd_list {
    reduce{
        sub{
            $_[0]->($_[1]) ? [@{$a}, $_[1]] : $a
        }->(
            ref $b ? (sub{ @{$_[0]} }, odd_list($b)) : (sub{ $_[0] % 2 }, $b)
        )
    } [], @{$_[0]}
}
my $r = odd_list([1, [2, 3], 4, [[5, [6]], 7]]);
741デフォルトの名無しさん:2012/11/20(火) 06:55:22.49
>>731
Haskell

{-# LANGUAGE MonadComprehensions #-}
import Data.Maybe

data T a = L a | N [T a]

f (L x) = [L x | odd x]
f (N xs) = [N ys | let ys = mapMaybe f xs, not$null ys]

t = f $ N [L 1, N [L 2, L 3], L 4, N [ N [L 5, N [L 6]], L 7]]
742デフォルトの名無しさん:2012/11/20(火) 07:36:31.29
おなにーすれ
743デフォルトの名無しさん:2012/11/20(火) 08:07:19.27
御題が出るとJavaドカタの書き込みが止まるスレ
744デフォルトの名無しさん:2012/11/20(火) 08:26:31.32
そもそもLLスレだしw
745734:2012/11/20(火) 12:55:42.92
>>737
自分は1時間くらい。
746デフォルトの名無しさん:2012/11/20(火) 22:12:11.04
>>731 Rubyで
def select_odd(a)
a.map do |x|
case x
when Numeric
next x.odd? ? x : nil
when Array
select_odd(x)
else
x # or raise "type error :#{x.inspect}"
end
end.reject{|x| x == nil or x == []}
end

p select_odd [1, [2, 3], 4, [[5, [6]], 7]]
# => [1, [3], [[5], 7]]
747デフォルトの名無しさん:2012/11/20(火) 22:30:49.92
>>731 Rubyで手抜き

p eval( [1, [2, 3], 4, [[5, [6]], 7]].inspect.gsub(/\d*[02468][,\s]*/,'').gsub(/(?<!^)(\[(?:\g<0>+|[,\s]*)\][,\s]*)/,''))
# => [1, [3], [[5], 7]]

ネストした空の角カッコ対を削除する正規表現にいまいち自信が無い
748質問です。:2012/11/21(水) 01:31:02.12
phpで苦労している。

この言語は、SUBMIT でデータを受け取るのに、

SUBMITで 入力データを受け取り操作に関する命令文を 
< input type="text" >

のあとに書かなくてはならない。5行づつの一覧表入出力を作っているので

更新した後、その更新行のところに再表示させるために
リダイレクトしてページ再表示したいんだけど
java c# vb.netだとredirect 命令で簡単にできるけど

phpのheader命令は、 htmlの入出力のあとに
書くと動作しない。

かといって 
< input type="text" >の前だとsubmit でデータが受取れてない。
なんかいい方法ないの?リダイレクトの方法。
749デフォルトの名無しさん:2012/11/21(水) 01:36:03.04
日本で頑張れやー
750デフォルトの名無しさん:2012/11/21(水) 08:04:33.50
解読に苦労している。
751デフォルトの名無しさん:2012/11/21(水) 08:21:19.10
httpの仕組み理解すればわかると思うよ>>748
752デフォルトの名無しさん:2012/11/21(水) 08:24:17.56
>>748
ページを更新してもフォームの値を保存するってこと?
普通Cookieとか外部ファイルでやらない?
753デフォルトの名無しさん:2012/11/21(水) 20:35:19.58
馬鹿には無理
754デフォルトの名無しさん:2012/11/22(木) 08:49:18.34
つかえる げんご
つかえない げんご
そんなの じょうしの きぶん
755デフォルトの名無しさん:2012/11/22(木) 20:19:48.87
はいはいドカタドカタ
756デフォルトの名無しさん:2012/11/23(金) 04:18:48.51
>>748

なんとかできました。
submitでとにかく無理やり、form action でクエリつけて
そのクエリから飛ばすようにしました。

print "<form method='POST' action='compsql.php?count10=".$startcount10."&ppk=1' > " ;

if (isset($_GET["ppk"]) ){
if ($_GET["ppk"]==1 ){


header("Location:compsql.php?count10=".$startcount10."&ppk=10") ;

}
}


多分、多分岐の場合は、他のプログラムphpにとばして、そこで分岐させるみたいな方法でしょうね。
C# VB.NET JAVA では同じプログラムファイルで簡単にできることが
headerの限定された、能力で、めんどい。
これって欠陥だよね。header がhtml内容に影響されるって。
757uy:2012/11/23(金) 05:01:02.17
ソース頻繁に上がるようになったのはいいけど何の話してんの?

俺からみて何の話しているか分からないってことは
多分中身のないレスで新着50は埋め尽くされている
758デフォルトの名無しさん:2012/11/23(金) 05:20:20.99
頭に欠陥のある人ですねわかります
759uy:2012/11/23(金) 05:32:58.77
おっと、檻の中から一匹がこちらに向かえって吠えてきた

土台になりたがる奴がいないと社会は周らない
その檻の中で順位付けをし、争い続けるが良い
760デフォルトの名無しさん:2012/11/23(金) 05:46:13.73
>>731 Prolog

'整数が入っている入れ子のリストから、入れ子構造は保ったまま奇数のみを取り出す'([]
,[]).
'整数が入っている入れ子のリストから、入れ子構造は保ったまま奇数のみを取り出す'(L1
,L2) :-
    '入れ子構造は保ったまま奇数のみを取り出す'(L1,L2,R1,R2),
    '整数が入っている入れ子のリストから、入れ子構造は保ったまま奇数のみを取り
出す'(R1,R2).

'入れ子構造は保ったまま奇数のみを取り出す'([List1|R1],[List2|R2],R1,R2) :-
    list(List1),
    '整数が入っている入れ子のリストから、入れ子構造は保ったまま奇数のみを取り
出す'(List1,List2),!.
'入れ子構造は保ったまま奇数のみを取り出す'([A|R1],[B|R2],R1,R2) :-
    1 is A mod 2,!.
'入れ子構造は保ったまま奇数のみを取り出す'([_|R1],R2,R1,R2).
761760:2012/11/23(金) 05:49:39.79
取り\n出す になっている所は、改行してはいけなかった。コピペのミス。
762760:2012/11/23(金) 06:05:35.96
>>731 Prolog 他にミスがあったから書き直し。'整数が入っている入れ子のリストから、入れ子構造は保ったまま奇数のみを取り出す'([],[]).

'整数が入っている入れ子のリストから、入れ子構造は保ったまま奇数のみを取り出す'(L1
,L2) :-
    '入れ子構造は保ったまま奇数のみを取り出す'(L1,L2,R1,R2),
    '整数が入っている入れ子のリストから、入れ子構造は保ったまま奇数のみを取り出す'(R1,R2).

'入れ子構造は保ったまま奇数のみを取り出す'([List1|R1],[List2|R2],R1,R2) :-
    list(List1),
  '整数が入っている入れ子のリストから、入れ子構造は保ったまま奇数のみを取り出す'(List1,List2),!.
'入れ子構造は保ったまま奇数のみを取り出す'([N|R1],[N|R2],R1,R2) :-
    1 is N mod 2,!.
'入れ子構造は保ったまま奇数のみを取り出す'([_|R1],R2,R1,R2).
763760:2012/11/23(金) 06:06:40.50
また失敗したけれど、もう直しません。すみません。
764デフォルトの名無しさん:2012/11/23(金) 08:25:52.41
ナイストライ
Prologの面白さや、やりたいことなんかが良く分かるね
765762:2012/11/23(金) 09:39:07.97
>>764
空リストは取り除く事という部分の手当を忘れていた。
766デフォルトの名無しさん:2012/11/23(金) 10:03:09.06
>>731
Javaで動的型付け

Object selectOdd(Object x) {
  if (x instanceof Integer) {
  return (Integer)x % 2 == 1 ? x : null;
  } else if (x instanceof List) {
  List lst = new ArrayList();
  for (Object y : (List)x) {
  Object z = selectOdd(y);
  if (z != null) {
  lst.add(z);
  }
  }
  return lst.isEmpty() ? null : lst;
  } else {
  return null;
  }
}


http://ideone.com/7ZJtm5
767762:2012/11/23(金) 10:03:13.59
>>764
% 文字数が多くなり制限に掛かるかも知れないから、後半の述語だけ。
% 前半の述語は述語名に但し書きを付加。空リストを排除するためリスト構造を示す表現を変えた。

'入れ子構造は保ったまま奇数のみを取り出す。ただし空リストは取り除く事。'([[A|B]|R1],[[C|D]|R2],R1,R2) :-
    '整数が入っている入れ子のリストから、入れ子構造は保ったまま奇数のみを取り出す。ただし空リストは取り除く事。'([A|B],[C|D]),!.
'入れ子構造は保ったまま奇数のみを取り出す。ただし空リストは取り除く事。'([N|R1],[N|R2],R1,R2) :-
    integer(N),
    1 is A mod 2,!.
'入れ子構造は保ったまま奇数のみを取り出す。ただし空リストは取り除く事。'([_|R1],R2,R1,R2).
768デフォルトの名無しさん:2012/11/23(金) 10:11:23.03
>>766
結局Javaが一番分かりやすい件
769デフォルトの名無しさん:2012/11/23(金) 10:24:15.16
【お題】
1) 1〜100からランダムに抽出した整数10個を要素に持つ配列を作成し、
2) その平均値と、
3) 各要素の平均値からの差の二乗値の平均の平方根(標準偏差)を算出して、
4) 1)〜3)の結果を出力するコードをどう書く?

言語のベーサルな表現実装力が見てみたいので、
可能であれば import や require 等の
機能追加をしない素の状態でのチャレンジが望ましい。

出力例:
[77, 62, 26, 17, 88, 40, 14, 11, 4, 49]
38.8
27.85964823898536

正直、デフォでこれら機能を有する統計処理のLL達のアピールを期待したお題だけれど
ループ等でしか書けそうもない普通のLL勢もひねりを加えるなどして面白くして欲しい。
770デフォルトの名無しさん:2012/11/23(金) 10:32:01.94
つまんねーお題いらね
771デフォルトの名無しさん:2012/11/23(金) 10:38:35.24
デフォルトの名前空間にインポートされてる機能の有無で
優劣付けようなんて馬鹿じゃないの?
772デフォルトの名無しさん:2012/11/23(金) 10:42:49.63
>>769
Excel

=INT(RAND()*100)
=INT(RAND()*100)
=INT(RAND()*100)
=INT(RAND()*100)
=INT(RAND()*100)
=INT(RAND()*100)
=INT(RAND()*100)
=INT(RAND()*100)
=INT(RAND()*100)
=AVERAGE(A1:A9)
=STDEVP(A1:A9)
773デフォルトの名無しさん:2012/11/23(金) 10:44:58.69
だってさー
ただの平均だよ平均
どんなバカでも頭の中で一瞬でJavaの全ソースコードが書けるお題なんだぜ?
何がアピールだよw
774デフォルトの名無しさん:2012/11/23(金) 10:52:41.07
>>769
R

data = sample(1:100, 10)
data; mean(data); sd(data)
775デフォルトの名無しさん:2012/11/23(金) 10:55:03.44
【お題】
コラッツ予想とは、「任意の0でない自然数nをとり、
・nが偶数の場合、nを2で割る
・nが奇数の場合、nに3をかけて1を足す
という操作を繰り返すと、有限回で1に到達する」という主張である。

nからスタートして1に到達するまでのステップをsとしたとき、
n = 1 .. 100000についてsを計算し、最長のsを出力せよ。

ただし、それぞれのnに対するsの計算は並列(スレッド、プロセス問わない)で行う事。
776デフォルトの名無しさん:2012/11/23(金) 11:13:22.60
>任意の0でない自然数nをとり

そもそも自然数って0含まないだろ。
777デフォルトの名無しさん:2012/11/23(金) 11:18:23.66
>777
778デフォルトの名無しさん:2012/11/23(金) 11:18:43.35
>>776
文科省乙とでも言えばいいのだろうか
自然数に0を含める流儀は数論や計算機科学など中心に
結構あるからどっちかはっきりさせる意味でも一応断ったんだろ

とでもマジレスすればいいのだろうか
それともここはギャグで返すべきだったのだろうか
779デフォルトの名無しさん:2012/11/23(金) 11:32:03.56
780デフォルトの名無しさん:2012/11/23(金) 11:33:35.66
>>775
Scala

def collatz(n: Int): Int =
if (n == 1) 1
else if (n % 2 == 1) 1 + collatz(3 * n + 1)
else 1 + collatz(n / 2)

var max = 0
(1 to 100000).par foreach (i => max = math.max(max, collatz(i)))
print(max)
781デフォルトの名無しさん:2012/11/23(金) 11:35:28.48
n==1のときは0で計算するんじゃないのか
782デフォルトの名無しさん:2012/11/23(金) 11:40:32.07
>>781
すみません
def collatz(n: Int): Int =
if (n == 1) 0
else if (n % 2 == 1) 1 + collatz(3 * n + 1)
else 1 + collatz(n / 2)

var max = 0
(1 to 100000).par foreach (i => max = math.max(max, collatz(i)))
// print(max) => 350
783デフォルトの名無しさん:2012/11/23(金) 11:41:58.50
>>775
Haskell


import Control.Parallel.Strategies

collatz 1 = 0
collatz n = 1 + collatz (if even n then n`div`2 else 3*n+1)

main = print $ maximum $ parMap rseq collatz [1..100000]
784デフォルトの名無しさん:2012/11/23(金) 11:51:02.29
scala2
(for (i <- (1 to 100000).par) yield collatz(i)) max
785デフォルトの名無しさん:2012/11/23(金) 11:57:56.02
>>783のScala版
def collatz(n: Int): Int =
if (n == 1) 0
else 1 + collatz(if (n % 2 == 0) n / 2 else 3 * n + 1)

(for (i <- (1 to 100000).par) yield collatz(i)) max
786デフォルトの名無しさん:2012/11/23(金) 11:59:49.76
まーたparがあるかないかの勝負か
rubyはどうなん?
787デフォルトの名無しさん:2012/11/23(金) 12:04:17.84
>>775
@Mathematica

maxStepCollatz[n_] := Module[{collatz},

 collatz[m_, s_] := Which[
  m == 1, s,
  EvenQ[m], collatz[m/2, s + 1],
  True, collatz[m*3 + 1, s + 1]];

 Range[1, n] // Map[collatz[#, 0] &, #] & // Max];

In := maxStepCollatz[100000]

Out = 350
788デフォルトの名無しさん:2012/11/23(金) 12:11:18.16
mathematicaわかりにくいなー
この言語は関数が結果を返せない上に、&やら//やらの意味不明の記号に
ModuleやらWhichやらのへんてこキーワードマスターしないと
使えないのか
789デフォルトの名無しさん:2012/11/23(金) 12:26:39.37
馬鹿には無理
790デフォルトの名無しさん:2012/11/23(金) 12:28:48.24
>>775
結果をキャッシュすると早く計算できるだろうな。
並列化とどう組み合わせるかが面白そうですね。
791デフォルトの名無しさん:2012/11/23(金) 12:30:54.36
Haskell的にはControl.Parallel.Strategiesってどうなの?
純粋関数型だから評価順に意味がなかったんじゃなかったのか?
792デフォルトの名無しさん:2012/11/23(金) 12:32:15.66
>>790
別に面白くはないんじゃね
配列にキャッシュ化するだけでしょ
793デフォルトの名無しさん:2012/11/23(金) 12:44:19.95
>>790
Scalaメモ化バージョン
val mem = Array.fill(100000)(-1)
mem(1) = 0
def collatz(n: Int): Int = {
if (n < mem.size && mem(n) > -1) return mem(n)
val ret = 1 + collatz(if (n % 2 == 1) 3 * n + 1 else n / 2)
if (n < mem.size) mem(n) = ret
ret
}

(for (i <- (1 to 100000).par) yield collatz(i)) max
// 350
794デフォルトの名無しさん:2012/11/23(金) 12:49:39.57
>>792
その程度のことが簡単には出来ない言語もあるのよ
Haskellとかねw
795デフォルトの名無しさん:2012/11/23(金) 12:50:09.85
>>731
書き込みできず乗り遅れてしまったのだけど、折角なので

Ruby
def f(a)
a.map{ |x| f(x) rescue x.odd? ? x : [] }.select{ |x| x.size > 0 }
end
f [1, [2, 3], 4, [[5, [6]], 7]] #=> [1, [3], [[5], 7]]
796デフォルトの名無しさん:2012/11/23(金) 13:01:59.01
>>792
小さい方から計算したほうが早そうなんだが、並列化で順番とか簡単にかける?
797デフォルトの名無しさん:2012/11/23(金) 13:03:56.80
f(x) rescue x.odd? ? x : [] ← 言語制作者のオナニー機能
798デフォルトの名無しさん:2012/11/23(金) 13:06:18.46
>>796
それを指定したら並列化の意味がないだろ
それに今回の場合、大きな数字から初めても最後には小さい数字に行き着くのだから、
小さい方から計算した方が速いってのもあんまり正しくなさそう
799デフォルトの名無しさん:2012/11/23(金) 13:10:31.16
>>797
例外と三項演算子くらいC++とかでもあるだろ
x.odd? が嫌いなら x%2>0 にでもすればいい
800デフォルトの名無しさん:2012/11/23(金) 13:11:16.64
>>798
小さい数字に行き着くのだから、小さい方から計算したほうが、
キャッシュにヒットしやすくなるようなきがするのだが。
801デフォルトの名無しさん:2012/11/23(金) 13:55:16.48
Squeak Smalltalkで

>>769

| data average sd |
data := Array streamContents: [:ss | 10 timesRepeat: [ss nextPut: 100 atRandom]].
data := (1 to: 100) asArray shuffled first: 10. "重複を許さない場合"
average := data average.
sd := ((data - average) raisedTo: 2) average sqrt.
^{data. average asFloat. sd}


>>775

| queue memo mutex collatz range |
memo := Dictionary new.
mutex := Monitor new.
collatz := nil.
collatz := [:n |
 mutex critical: [memo at: n ifAbsentPut: [
  true caseOf: {
   [n = 1] -> [0].
   [n even] -> [1 + (collatz value: n/2)]}
   otherwise: [1 + (collatz value: n*3+1)]]]].

queue := SharedQueue2 new.
range := 1 to: 100000.
range do: [:m | [queue nextPut: (collatz value: m)] fork].
range size timesRepeat: [queue next].
^(memo keyAtValue: memo max) -> memo max
802デフォルトの名無しさん:2012/11/23(金) 14:33:22.35
単純にループまわすのに比べて、メモ化でどれくらい速くなるか気になるな。
メモ化変数の同期コストと比べてどうなんだろう?
803デフォルトの名無しさん:2012/11/23(金) 16:19:36.43
あとCPU使用率と実行時間も
どれくらい並列化の恩恵があったのか
804デフォルトの名無しさん:2012/11/23(金) 17:43:38.08
>>800
それは違うな
大きな数字でも小さな数字に行き着くのだから、結局一回目でキャッシュが作られるわけで
805デフォルトの名無しさん:2012/11/23(金) 18:10:42.87
>>804
全部キャッシュすればそうだね
806デフォルトの名無しさん:2012/11/23(金) 18:14:23.92
>>775
Perl

use threads;
use threads::shared;
use Thread::Queue;
use List::Util qw(max);

my %memo : shared = (1 => 0);

sub collatz {
    my ($n) = @_;
    return $memo{$n} // ($memo{$n} = 1 + collatz($n % 2 ? $n * 3 + 1 : $n / 2));
}

my $q = Thread::Queue->new;

sub f {
    while(defined(my $n = $q->dequeue)){
        collatz($n);
    }
}

my $thr_num = 4;
my @thr = map{ threads->new(\&f) } (1..$thr_num);
$q->enqueue(1..100000, (undef) x $thr_num);
$_->join foreach(@thr);

my $s = max values %memo;

# 色々_。
807デフォルトの名無しさん:2012/11/23(金) 18:27:52.26
それってRace Conditionは解決できてるのかい?
808デフォルトの名無しさん:2012/11/23(金) 18:29:33.43
>>775
;;; Common Lisp メモ化
(defvar *max* 100000)

(defvar *memo*)

(defun memo (vlist s)
(dolist (v vlist)
(when (<= v *max*)
(setf (svref *memo* (- v 1)) s))))

(defun getmemo (n)
(when (<= n 100000)
(svref *memo* (- n 1))))

(defun collatz/memo (n s &optional (called (list)))
(cond ((getmemo n) (memo called (getmemo n))
(getmemo n))
((<= n 1) (memo called s)
s)
((evenp n) (collatz/memo (/ n 2) (1+ s) (cons n called)))
(t (collatz/memo (1+ (* 3 n)) (1+ s) (cons n called)))))
809デフォルトの名無しさん:2012/11/23(金) 18:40:32.49
メモ化なしの
(defun collatz (n s)
(cond ((<= n 1) s)
((evenp n) (collatz (/ n 2) (1+ s)))
(t (collatz (1+ (* 3 n)) (1+ s)))))

を使った場合と、 >>808 を、
(setf *memo* (make-array 100000 :initial-element nil))
してから、1から100000まで昇順に適用した場合と降順で適用した場合でを比べてみた。
(CLISP、共にコンパイル済み。i5-2450M 2.5 GHz)
降順のほうが絶対速くなるだろー、と思ったけどあんま変わんねえ。

normal
Real time: 2.478142 sec.
Run time: 2.465 sec.
Space: 68472 Bytes

memo
Real time: 0.17101 sec.
Run time: 0.156 sec.
Space: 2302568 Bytes
GC: 2, GC time: 0.032 sec.

memo reverse
Real time: 0.17201 sec.
Run time: 0.172 sec.
Space: 2302568 Bytes
GC: 2, GC time: 0.032 sec.
810デフォルトの名無しさん:2012/11/23(金) 19:38:46.99
>>806修正。
sub collatz {
    my ($n) = @_;
    lock(%memo);
    return $memo{$n} //= 1 + collatz($n % 2 ? $n * 3 + 1 : $n / 2);
}

# 何か間違えてる気もする。
811デフォルトの名無しさん:2012/11/23(金) 19:39:51.00
メモ化は相当速くなってるな
812デフォルトの名無しさん:2012/11/23(金) 20:10:38.72
>>775
並列化せずにメモ化だけした。C言語。
http://ideone.com/q8YIz2


100000じゃ速すぎて測定不能なので100000000までやった結果(Core i5 1.6GHz)。

> time ./collatz
949
./collatz  5.37s user 0.21s system 99% cpu 5.609 total
813デフォルトの名無しさん:2012/11/23(金) 20:13:45.09
Scala Core2Duo 2.2GHz
速すぎるので100回繰り返した

def time(max: Int, f: => Unit) = {
val start = System.currentTimeMillis
for (i <- 1 to max) f
(System.currentTimeMillis - start) / 1000.0
}

println("メモ化並列 " + time(100, (for (i <- (1 to 100000).par) yield collatz2(i)).max))
println("メモ化直列 " + time(100, (for (i <- 1 to 100000) yield collatz2(i)).max))
println("並列 " + time(100, (for (i <- (1 to 100000).par) yield collatz(i)).max))
println("直列 " + time(100, (for (i <- 1 to 100000) yield collatz(i)).max))

メモ化並列 0.901
メモ化直列 0.584
並列 4.035
直列 6.461
814デフォルトの名無しさん:2012/11/23(金) 20:18:24.29
よーわからんけど、100回繰り返しって
2回目移行はメモ化完了してね?
815デフォルトの名無しさん:2012/11/23(金) 20:27:06.09
まあ実際には誤差みたいなもんでないの
816デフォルトの名無しさん:2012/11/23(金) 20:36:28.77
>>812のコードで1〜100000を100回繰り返してみた。

メモ使い回し: 0.04s user 0.00s system 94% cpu 0.042 total
メモを毎回クリア: 0.31s user 0.00s system 99% cpu 0.319 total
メモをクリアする処理だけ: 0.01s user 0.00s system 81% cpu 0.013 total
817デフォルトの名無しさん:2012/11/23(金) 20:39:54.13
クリアで結構遅くなってるな
メモ化はCやScalaみたいな言語だと計算が速すぎて効果はない?
818デフォルトの名無しさん:2012/11/23(金) 20:44:19.54
>>816
すまんな。計測時間が10秒未満のデータは
信用しないことにしてるのだよ。
819デフォルトの名無しさん:2012/11/23(金) 20:48:08.84
>>817
2回目以降はより速くなるんだから効果はあるでしょ
820816:2012/11/23(金) 20:56:57.70
Scalaに合わせて100回にしたけど、流石に回数が少なすぎた。
というわけで、10000回繰り返しの結果。

メモ使い回し: 3.22s user 0.01s system 99% cpu 3.241 total
メモを毎回クリア: 28.46s user 0.04s system 99% cpu 28.570 total
メモをクリアする処理だけ: 0.68s user 0.00s system 99% cpu 0.692 total
821デフォルトの名無しさん:2012/11/23(金) 21:00:04.07
普通に時間が100倍になってるだけだな
やっぱり遅くなってる
毎回クリアしたメモ化でメモ化無しより速くなってるの?
822デフォルトの名無しさん:2012/11/23(金) 21:09:06.89
Scala C2D 2.2G メモクリア1000回
10秒未満だけどスマソ
こちらはメモクリアでほとんどスピード変わらない

def time(max: Int, f: => Unit) = {
val start = System.currentTimeMillis
for (i <- 1 to max) {
var mem = Array.fill(MAX)(-1L)
mem(1) = 0
f
}
(System.currentTimeMillis - start) / 1000.0
}
メモ化直列 5.787
メモ化並列 7.389
直列 70.827
並列 42.061
823デフォルトの名無しさん:2012/11/23(金) 21:14:39.23
メモ化はええええ
824デフォルトの名無しさん:2012/11/23(金) 21:28:04.31
>>821
10000回は中々終わらなかったので、100回繰り返し(>>816と同条件)

メモ化無し: 4.17s user 0.01s system 99% cpu 4.194 total
825デフォルトの名無しさん:2012/11/23(金) 21:30:50.31
メモ化という言葉を初めて知った高校二年生の冬
826デフォルトの名無しさん:2012/11/23(金) 21:39:51.20
>>824
遅くね?Core2DuoのScalaと一緒ぐらい?
Cori5のCの方が数段速いはずだが
827デフォルトの名無しさん:2012/11/23(金) 21:51:03.45
急にRubyとPythonが静かになりましたw
828デフォルトの名無しさん:2012/11/23(金) 21:59:05.00
単純すぎる計算だとクロック数が前面に出てくる
829デフォルトの名無しさん:2012/11/23(金) 22:23:39.54
見たいもの

RubyとPythonの並列化コード
Haskellのメモ化コード
CoffeeScript、Gruvy、TypeScript、Gooのコード
830デフォルトの名無しさん:2012/11/23(金) 22:26:46.10
uyには無理
831デフォルトの名無しさん:2012/11/23(金) 22:29:26.63
GoなのかBooなのかはたまたGooという言語があるのか
832デフォルトの名無しさん:2012/11/23(金) 22:32:59.10
CarといえばGooっていうぐらいだし
LISPの亜種だろ
833デフォルトの名無しさん:2012/11/23(金) 22:36:06.22
>>822
実行時間は比べるべくもなく遅いがRでも
メモ化直列<メモ化並列<並列<直列だな
834デフォルトの名無しさん:2012/11/23(金) 23:10:48.74
-- Haskell メモ化

import Control.Applicative
import qualified Data.Vector.Unboxed as V
import Data.IORef

num = 100000
memo :: IO (IORef (V.Vector Int))
memo = newIORef $ V.replicate num (-1)

collatz 1 = return 0
collatz n = do
  v <- readIORef =<< memo
  let s = if n < V.length v then v V.! n else -1
  if s /= -1 then return s
             else (+1) <$> collatz (if even n then n`div`2 else 3*n+1)

main = print . maximum =<< mapM collatz [1..num]
835デフォルトの名無しさん:2012/11/23(金) 23:27:43.70
高木boo
836デフォルトの名無しさん:2012/11/24(土) 00:23:15.11
さすがのHaskellもメモ化ソースは長くなったな
837デフォルトの名無しさん:2012/11/24(土) 00:45:30.14
Rubyは標準では並列実行の機能はない
Windows以外だとforkをつかった並列実行ライブラリがあるみたいだが
Windowsユーザーはどうすりゃいいんだろう
JRubyだとスレッドが並列に動くが

近い将来の間にスレッドを並列実行できるようになる可能性はないが
複数のVMを並列実行できるようにはするそうなので
実現すればWindowsを含めた汎用的な並列化ライブラリを作れそうだけど
いったいいつになることやら……
838デフォルトの名無しさん:2012/11/24(土) 01:08:24.46
windowsはそのうち無くなるから大丈夫
839デフォルトの名無しさん:2012/11/24(土) 01:11:43.92
>>775 Python

from multiprocessing import Pool

def collatz(n):
    if n == 1: return 0
    else: return 1 + collatz(n / 2 if n % 2 == 0 else 3 * n + 1)

print(max(Pool(4).map(collatz, range(1,100000))))
840デフォルトの名無しさん:2012/11/24(土) 01:19:05.90
>>838
近いうちに解散と言いつつ4年
841デフォルトの名無しさん:2012/11/24(土) 08:05:47.23
どっちみちRubyってRails以外じゃ使い道ないから、Windowsで動かなくても誰も困らないだろう。
Python製のWindowsアプリはだいぶ増えてきたな。
842デフォルトの名無しさん:2012/11/24(土) 12:26:46.45
>>839
さすがの横綱相撲だね
今回はpythonが優勝かな
843デフォルトの名無しさん:2012/11/24(土) 13:29:18.90
わざわざ「return」が必要なところ、スレッド数を指定しないといけないところなど
HaskellやScalaに劣る部分もある。
完勝とは言いがたい。
844デフォルトの名無しさん:2012/11/24(土) 13:41:23.81
C拡張のCilkとかで書けば色々うまく行きそうだ
845デフォルトの名無しさん:2012/11/24(土) 13:43:22.84
【お題】
2つの箱がある。片方の箱には黒玉1つ、白玉1つ。
もう片方の箱には黒玉が2つ入っている。
どちらかの箱から玉を1つ取り出す(箱の中身は見えない)。
取り出した玉が黒であるとき、その玉を取り出した箱に残っている玉が黒玉である確率を求めよ。
846デフォルトの名無しさん:2012/11/24(土) 13:52:09.83
>>843
プロセス数は省略できるよ
returnは書き忘れると実行時にNoneが返って来てアレってなるけど
847デフォルトの名無しさん:2012/11/24(土) 14:33:38.36
>>845
Haskell

白が0, 黒が1


import Data.List

boxes = [[0,1],[1,1]]
residue = concat [delete x b | b <- boxes, x <- b, x == 1]

main = print (sum residue, length residue)


答: 2/3
848デフォルトの名無しさん:2012/11/24(土) 15:09:04.26
>>847
@Mathematica

env={{"A",{"Black","White"}},{"B",{"Black","Black"}}};

p[box_, color_, env_] := Module[{pBallBox, pBox, pBall},

 pBallBox[colorx_, boxx_] := Select[env, #[[1]] == boxx &] // #[[1, 2]] & //
  Count[#, colorx]/Length[#] &;

 pBox[boxx_] := Select[env, #[[1]] == boxx &] // Length[#]/Length[env] &;

 pBall[colorx_] := Map[#[[2]] &, env] // Flatten //
  Length[Select[#, # == colorx &]]/Length[#] &;

 pBallBox[color, box]*pBox[box]/pBall[color]];

In := p["B","Black",env]

Out = 2/3
849デフォルトの名無しさん:2012/11/24(土) 15:34:50.69
>>843
from multiprocessing import Pool
cllatz = lambda n: 0 if n == 1 else 1 + collatz(n / 2 if n % 2 == 0 else 3 * n + 1)
print(max(Pool(4).map(collatz, range(1,100000))))
850デフォルトの名無しさん:2012/11/24(土) 16:06:12.51
>>849
Pythonのmultiprocessingはlambda受け取れないよってツッコミ待ち?
851デフォルトの名無しさん:2012/11/24(土) 16:41:16.32
>>845
Perl

use List::Util qw(sum reduce);
use constant { WHITE => 0, BLACK => 1 };

my @boxes = ([BLACK, WHITE], [BLACK, BLACK]);
my @r = map{ $_->[1] } grep{ $_->[0] } map{ [@{$_}], [reverse @{$_}] } @boxes;
my $p = sum(@r) / @r;

# Haskell凄味があるなあ
852デフォルトの名無しさん:2012/11/24(土) 19:12:38.32
>>851
内包表記が使えれば似たような事はできるし
srfi-42は機能が多い分記述も冗長だけど

(use srfi-42)
(let* ((x '((#f #t) (#t #t)))
    (p (list-ec (:list b x) (:range n 2) (if (list-ref b n))
          (list-ref b (- 1 n)))))
 (/ (count values p) (length p)))
853デフォルトの名無しさん:2012/11/24(土) 20:04:02.94
>>845
Python

r = []
for b in [[0,1],[1,1]]:
    for i,x in enumerate(b):
        if x == 1:
            r.extend(b[:i] + b[i+1:])
p = sum(r) / float(len(r))
854デフォルトの名無しさん:2012/11/24(土) 21:28:03.06
え 1/2じゃないのか
直感も当てにならんな
855デフォルトの名無しさん:2012/11/24(土) 22:05:06.73
>>845
Squeak Smalltalk

| restBalls |
restBalls := #((黒 白) (黒 黒)) gather: [:box |
&nbsp;&nbsp; box select: [:ball | ball = #黒] thenCollect: [:ball | box asBag remove: ball; anyOne]].
^(restBalls occurrencesOf: #黒) / restBalls size "=> (2/3) "
856デフォルトの名無しさん:2012/11/24(土) 22:08:45.70
>>853
ぱっと見分かりにくいポイント
b in [[0,1],[1,1]]:← 一瞬、bに0とか1が入るのかと思った
in enumerate(b) ← まあ、index付きで数えるんだろうなとは思うけど、
0から始まるのか1から始まるのか迷って、ああ0からだったかなみたいな感じになる
b[:i] + b[i+1:] ← コロン知らないと意味がわからん。iやらi+1やらをを含むのか含まないのか迷う。
境界ではどうなってたかな、とか「ああ要素が二つしかないからこれで上手く行くのね」とかいろいろ考えないと分からん

なんか、「簡潔な言語」っていつもこんな調子じゃね?
本当に分かりやすいとは俺には思えない
cとかJavaの方が分かりやすい
マジで
857デフォルトの名無しさん:2012/11/24(土) 22:38:38.05
・黒を取ったとき残りは黒2白1
だから残りが黒の確率は2/3である

・どっちかの箱を選ぶ確率は1/2ずつ同等
片方を選べば必ず残りは白で、もう片方なら必ず黒が出る
ゆえに残りが黒の確率は1/2である
858デフォルトの名無しさん:2012/11/24(土) 22:43:03.41
>>856
CとかJavaで書いても、分かりやすいと言ってくれる人はいないぞ
分かりやすい (=もっと難しくしてもOK) なんて言う奴はいない
859デフォルトの名無しさん:2012/11/24(土) 22:44:12.14
>>856
俺なんてじっくり見ても、
>>851のコードにreverseが入ってる理由とか、
>>852のコードが何やってるのかなんて全然分からんぜ

その言語知らない奴から見たら、そんなもんじゃね?
860デフォルトの名無しさん:2012/11/24(土) 22:49:34.64
発想ゲームとかパズルゲームやってる
感覚なんだろうなw

曲芸やるぐらいなら普通に書いたほうが良い。
861デフォルトの名無しさん:2012/11/24(土) 22:50:03.15
P(残った玉が黒 | 取り出した玉が黒)
= P(取り出した玉が黒で残った玉が黒) / P(取り出した玉が黒)
= P(黒が二つ入った箱を選ぶ) / ((1/2)*(1/2) + (1/2)*1)
= (1/2) / (3/4)
= (2/3)
862デフォルトの名無しさん:2012/11/24(土) 23:45:22.23
>>845
Java

enum Ball {WHITE, BLACK}
double probability() {
    Ball[][] boxes = {{Ball.WHITE, Ball.BLACK}, {Ball.BLACK, Ball.BLACK}};
    List<Ball> restBalls = new ArrayList<Ball>();
    for (Ball[] box : boxes) {
        for (Ball ball : box) {
            if (ball == Ball.BLACK) {
                List<Ball> r = new ArrayList<Ball>(Arrays.asList(box));
                r.remove(ball);
                restBalls.addAll(r);
            }
        }
    }
    double count = 0;
    for (Ball ball : restBalls) {
        if (ball == Ball.BLACK) {
            count++;
        }
    }
    return count / restBalls.size();
}
863デフォルトの名無しさん:2012/11/25(日) 02:23:25.12
Java

 enum Ball {
  WHITE, BLACK
 }

 static double probability() {
  Ball[][] boxes = { { Ball.WHITE, Ball.BLACK },
    { Ball.BLACK, Ball.BLACK } };
  int count = 0;
  int total = 0;
  for (Ball[] box : boxes) {
   for (int i = 0; i < box.length; i++) {
    if (box[i] == Ball.BLACK) {
     total++;
     if (box[1 - i] == Ball.BLACK) {
      count++;
     }
    }
   }
  }
  return count / (double) total;
 }
864デフォルトの名無しさん:2012/11/25(日) 03:11:29.48
>>845の問題の

「取り出した玉が黒であるとき、その玉を取り出した箱に
残っている玉が黒玉である確率を求めよ」

という文章を

「取り出した玉が黒であるとき、その玉を取り出した箱から
もう一度玉を取り出したとき黒玉である確率を求めよ。」

に変更すると、二つの箱に任意個の白黒玉を入れた場合を考える事ができる。
片方の箱に{白, 白, 黒}、もう一方に{黒, 黒, 黒, 白}が入ってる場合の確率を求めよ。
865デフォルトの名無しさん:2012/11/25(日) 03:57:41.19
>>864
Scheme(Gauche)

(use util.combinations)
(define (probability boxes)
 (define (black-ref? perm ref)
  (eq? (ref perm) 'black))
 (define (prob-calc prob ref)
  (let1 len (length prob)
   (fold (^(x y) (+ (/ (ref x) len) y)) 0 prob)))
 (let* ((plist (map permutations boxes))
     (prob (map (^x (cons (/ (count (cut black-ref? <> first)
                    x)
                 (length x))
               (/ (count (^y (and (black-ref? y first)
                         (black-ref? y second)))
                    x)
                 (length x))))
          plist)))
  (/ (prob-calc prob cdr) (prob-calc prob car))))
(probability '((white white black) (black black black white))); => 6/13

861をそのまま書いただけ
866デフォルトの名無しさん:2012/11/25(日) 07:15:07.26
>>864-865
問題の定義が曖昧
・まず、箱をどちらか片方選び(それぞれ1/2)、その上で選ぶ
・それぞれのボールを等確率で選ぶ
のか不明
おそらく、問題文のような行為から推測すると、
箱の中身が見えなくて、ボールの数も分からないと推測され
前者が正しいように思える
しかし、これはきっちり定義されていないから推測でしかない
そしてこの場合、865は誤り
867デフォルトの名無しさん:2012/11/25(日) 07:40:20.49
>>864
@Mathematica

>>848より
env = {{"A", {"White", "White", "Black"}}, {"B", {"Black", "Black", "Black", "White"}}};

In := pBoxBall["B", "Black", env]

Out = 21/32


(* 「取り出した玉が黒であるとき、その箱が B(後者)である確率を求めよ。」に読み替えてみた。 *)
868デフォルトの名無しさん:2012/11/25(日) 07:42:55.15
>>866
箱の中は見えないって書いてあるよ。
869デフォルトの名無しさん:2012/11/25(日) 07:47:44.95
>>864
Java
import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
 enum Ball { WHITE, BLACK }

 static double probability() {
  Ball[][] boxes = { { Ball.WHITE, Ball.WHITE, Ball.BLACK }, { Ball.BLACK, Ball.BLACK, Ball.BLACK, Ball.WHITE } };
  DescriptiveStatistics stats = new DescriptiveStatistics();
  for (Ball[] box : boxes) {
   DescriptiveStatistics probs = new DescriptiveStatistics();
   for (Ball ball: box) {
    if (ball == Ball.BLACK) {
     probs.addValue((Collections.frequency(Arrays.asList(box), Ball.BLACK) - 1) / (box.length - 1.0));
    }
   }
   stats.addValue(probs.getMean());
  }
  return stats.getMean();
 }
// 0.3333333333333333
870デフォルトの名無しさん:2012/11/25(日) 08:10:53.65
>>864 Java改
 enum Ball { WHITE, BLACK }

 static double probability() {
  Ball[][] boxes = { { Ball.WHITE, Ball.WHITE, Ball.BLACK }, { Ball.BLACK, Ball.BLACK, Ball.BLACK, Ball.WHITE } };
  DescriptiveStatistics stats = new DescriptiveStatistics();
  for (Ball[] box : boxes) {
   int blackCount = Collections.frequency(Arrays.asList(box), Ball.BLACK);
   if (blackCount > 0)
    stats.addValue((blackCount - 1.0) / (box.length - 1));
  }
  return stats.getMean();
 }
871デフォルトの名無しさん:2012/11/25(日) 08:50:53.22
>>864 >>870は間違ってた・・・連投すみません
 enum Ball { WHITE, BLACK }
 static double probability() {
  Ball[][] boxes = { { Ball.WHITE, Ball.WHITE, Ball.BLACK }, { Ball.BLACK, Ball.BLACK, Ball.BLACK, Ball.WHITE } };
  int total = 0;
  double weightProb = 0;
  for (Ball[] box : boxes) {
   int blackCount = Collections.frequency(Arrays.asList(box), Ball.BLACK);
   if (blackCount > 0) {
    total += blackCount;
    weightProb += blackCount * (blackCount - 1.0) / (box.length - 1);
   }
  }
  return weightProb/ total;
 }
// 0.5
872デフォルトの名無しさん:2012/11/25(日) 09:27:15.94
言語比較というよりも数学の問題になってないか?
873デフォルトの名無しさん:2012/11/25(日) 10:20:24.59
>>864
Haskell


import Data.List
import Data.Ratio ((%))

boxes = [[0,0,1],[1,1,1,0]]
p f = sum [(length $ filter f xs) % (length xs * length boxes) | b <- boxes, let xs = permutations b]

p1 = p $ \(x:xs) -> x == 1              -- 取り出した玉が黒
p2 = p $ \(x:y:xs) -> x == 1 && y == 1  -- 取り出した玉が二回連続で黒
main = print $ p2 / p1


答: 6/13
874デフォルトの名無しさん:2012/11/25(日) 10:34:19.41
数学の問題としてとくと、まず、Aの黒が選ばれる確率が1/2×1/3=1/6、その後、黒が選ばれる確率は0
次に、Bの黒が選ばれる確率が1/2×3/4=3/8、その後、黒が選ばれる確率は2/3
よって求める確率は
3/8×2/3÷(3/8+1/6)=1/4÷13/24=6/13
875デフォルトの名無しさん:2012/11/25(日) 10:46:51.27
>>874
解説ありがとう Java誤り修正バージョン
 enum Ball { WHITE, BLACK }

 static double probability() {
  Ball[][] boxes = { { Ball.WHITE, Ball.WHITE, Ball.BLACK }, { Ball.BLACK, Ball.BLACK, Ball.BLACK, Ball.WHITE } };
  double total = 0;
  double weightProb = 0;
  for (Ball[] box : boxes) {
   int blackCount = Collections.frequency(Arrays.asList(box), Ball.BLACK);
   if (blackCount > 0) {
    double weight = (double)blackCount / box.length;
    total += weight;
    weightProb += weight * (blackCount - 1.0) / (box.length - 1);
   }
  }
  return weightProb/ total;
 }
//0.46153846153846156
876デフォルトの名無しさん:2012/11/25(日) 12:07:34.13
>>873はpermutations全部列挙してない?
メモリ大量に使うことになりはしない?
877デフォルトの名無しさん:2012/11/25(日) 12:20:02.64
黒→黒 勝ち
黒→白 負け
白→黒 引き分け
白→白 引き分け

引き分けを除いた勝率を求めればいい
引き分けの確率が小さければ、条件がない確率との乖離も小さい
878デフォルトの名無しさん:2012/11/25(日) 12:41:42.05
モンティホール問題っぽい設問だなぁ
問題の読解力は自信なし、pythonでlistとsetを使ってみた ideone.com/odZ1ib

>>873,874
「黒が選ばれたとき」の確率じゃないの?
879デフォルトの名無しさん:2012/11/25(日) 12:57:38.87
そう。だから、最初に白が選ばれる場合は考慮する必要がない
>>866も誤解している
880デフォルトの名無しさん:2012/11/25(日) 13:16:04.62
>>864
Squeak Smalltalk

| 箱 全取り出し順 一個目が黒の確率 二個目も黒の確率 |
箱 := {#(白 白 黒) asBag. #(黒 黒 黒 白) asBag}.
"箱 := {#(白 黒) asBag. #(黒 黒) asBag}."
全取り出し順 := 箱 collect: [:各箱 |
  各箱 gather: [:一個目 | (各箱 copy remove: 一個目; yourself) collect: [:二個目 | {一個目. 二個目}]]].
一個目が黒の確率 := (箱 collect: [:各箱 | (各箱 occurrencesOf: #黒) / 各箱 size]) sum / 箱 size.
二個目も黒の確率 := (全取り出し順 collect: [:各箱毎 | (各箱毎 count: [:ペア | ペア = #(黒 黒)]) / 各箱毎 size]) sum / 箱 size.
^二個目も黒の確率 / 一個目が黒の確率 "=> (6/13) "
881デフォルトの名無しさん:2012/11/25(日) 13:19:14.71
>>878-879
873と874は正しいのだが
882デフォルトの名無しさん:2012/11/25(日) 13:22:34.35
>>876
確率の式を知らなくても答えが納得できるかなって思ったけど、
余計なお世話だったかも

式を直接解くと

x2 = sum [ (m*(m-1)) % (n*(n-1)) | b <- boxes, let (m, n) = (sum b, length b)]
x1 = sum [ sum b % length b | b <- boxes]
main = print $ x2 / x1
883デフォルトの名無しさん:2012/11/25(日) 13:44:05.68
>>882
まあ、「へーなるほどなあ」みたいな感じはあったので面白かった
でも、なんだろうなあ、Haskellは$とか%とかletとか
慣れてないと読みづらい変な感覚はやっぱりある
884デフォルトの名無しさん:2012/11/25(日) 18:21:08.86
読んでもわからないのが多いので念のため質問。
箱に黒一個しか入ってない場合の備えはどれもできているの?
885デフォルトの名無しさん:2012/11/25(日) 20:29:37.32
コードも出さない、読んでも分からないのが多い奴が
「どれもできているの?」とかどんだけ上からだよ
886デフォルトの名無しさん:2012/11/25(日) 21:33:14.72
なんで質問が上から目線に見えるんだよw オマエちょっとおかしいぞww
887デフォルトの名無しさん:2012/11/26(月) 00:01:04.23
というより、この場合、問題がそもそも対応できていないぞ。
だって、「もう一度取り出す」が出来ないわけだから。
オリジナルは二個固定だから大丈夫だが、改変版は可変にするとしか言って無い。
888864:2012/11/26(月) 00:26:29.07
取り出す玉が無いときの扱いは未定義なので、確率も未定義。
黒玉が一つも存在しない場合も確率は未定義。

確率が未定義の場合はエラーを返すのが望ましいが、
未定義なので勝手に計算した確率を返すのでも可とする。
889デフォルトの名無しさん:2012/11/26(月) 00:29:31.47
>>884
お題の {白, 白, 黒} のところを {黒} にして、ざっとしらべてみた。

>>865 Scheme => ERROR: bad object: (black)
>>873 Haskell => Non-exhaustive patterns in lambda
>>875 Java => NaN
>>880 Smalltalk => ZeroDivide
890デフォルトの名無しさん:2012/11/26(月) 00:35:21.10
つうわけで、何でも良いということだ
備えをしなくてはならないと思い込んでる884が間違い
891デフォルトの名無しさん:2012/11/26(月) 21:57:07.03
コード書けなくて他人のコードも殆ど読めない奴には
ここ最近の流れはつまらないだろうとは思う
892デフォルトの名無しさん:2012/11/26(月) 23:45:08.12
バカは有識者の真似をしたがるからな
数学、関数型言語、パズルとかホザけば
バカはそれを真似してやりはじめる
893デフォルトの名無しさん:2012/11/26(月) 23:47:21.20
オマエが楽しければいいじゃん、いいからどんどんやれよ
894デフォルトの名無しさん:2012/11/27(火) 07:54:36.72
おどるあほうに

みるあほう

おなじあほなら

おどらにゃそんそん
895デフォルトの名無しさん:2012/11/27(火) 08:09:41.29
マニュアルから目当ての関数を探す事が
プログラミングだと思っているドカタにとっては
ループとifと四則演算を使っただけでパズル扱い
896デフォルトの名無しさん:2012/11/27(火) 15:56:30.93
ウェブ開発とかだと、プログラミングにアルゴリズムとかほぼ不要だからね。
897デフォルトの名無しさん:2012/11/27(火) 19:19:41.12
大学生の頃にcでカリカリと毎日素振りのようにsortやhash書いてたよ!
本当に無駄な時間だった。結局、プログラミングってAPIを繋げることだったんだよ
898デジタルハリウッド@偏差値45:2012/11/27(火) 21:23:59.85
車輪の再発明
899デフォルトの名無しさん:2012/11/27(火) 22:15:56.87
単なる再実装を車輪の再発明とか言っちゃう奴けっこういるよね
900デフォルトの名無しさん:2012/11/27(火) 22:28:45.85
まあデジタルハリウッドの低学歴だし
901デフォルトの名無しさん:2012/11/27(火) 22:33:57.52
当初は学習目的でも当人が無駄だと分かった時点で車輪の再発明だろ?
902デフォルトの名無しさん:2012/11/28(水) 02:02:55.97
ウェブ開発とかだと、プログラミングにアルゴリズムとかほぼ必須だからね。
903デフォルトの名無しさん:2012/11/28(水) 02:06:35.88
マニュアル読んでAPIをつなげてりゃいい時もあれば、
高速化やら何やらのために頭をひねるときもあるのに
十把一絡げにしちゃう男の人って……
904デフォルトの名無しさん:2012/11/28(水) 09:59:21.95
>>900
デジハリが低学歴? 卒業生には筑駒出身者もいるんだぞ。
905デフォルトの名無しさん:2012/11/28(水) 12:32:34.91
図星の低学歴が暴れてますね
906デフォルトの名無しさん:2012/11/28(水) 15:17:41.08
>>903
新卒でないとダメって、実際、すごくアホな風潮だよね
金出して入らないと学べないようなことなんてあるの?
907デフォルトの名無しさん:2012/11/29(木) 09:07:05.77
もう何回も議論されたはずだが、ScalaってLLじゃないだろ
LLの定義にもなってしまうが
908デフォルトの名無しさん:2012/11/29(木) 21:02:31.09
0 ~ 64 の 65 個の数字を
以下のような個数毎に改行して表示する場合
各言語ではどのように書きますか?
便宜上それぞれの数字の型は int としてください

 0 1 2 3 4
 5 6 7 8
 9 10 11 12
13 14 15 16 17
18 19 20 21
22 23 24 25
26 27 28 29 30
31 32 33 34
35 36 37 38
39 40 41 42 43
44 45 46 47
48 49 50 51
52 53 54 55 56
57 58 59 60
61 62 63 64
909デフォルトの名無しさん:2012/11/29(木) 21:40:01.45
>>908
Haskell


f xs (n:ns) = case splitAt n xs of ([],_) -> []; (ys,zs) -> ys : f zs ns
main = mapM_ print $ f [0..64] $ cycle [5,4,4]
910デフォルトの名無しさん:2012/11/29(木) 22:27:00.44
DDTでもやってんのか
911デフォルトの名無しさん:2012/11/29(木) 22:28:45.47
DDTでもやってんのか
912デフォルトの名無しさん:2012/11/29(木) 22:34:46.81
>>908
Python

import math
def layout(elems, nelems, nrows):
L = [int(math.ceil(float(x) * nelems / nrows)) for x in range(0, nrows + 1)]
return [elems[span[0]:span[1]] for span in zip(L, L[1:])]

print layout(range(65), 65, 15)
913デフォルトの名無しさん:2012/11/29(木) 23:23:27.50
>>908
(format t "~{~5@{~2d ~}~%~2@{~4@{~2d ~}~%~}~}"
(loop for i upto 64 collect i))
914デフォルトの名無しさん:2012/11/30(金) 01:20:46.05
>>908
Squeak Smalltalk

| stream cycle |
stream := (0 to: 64) readStream.
cycle := [| i | i := 0. [#(4 4 5) atWrap: (i := i + 1)]] value.
Transcript open.
[stream atEnd] whileFalse: [
  Transcript cr.
  (stream next: cycle value) asStringOn: Transcript delimiter: ' '].
Transcript endEntry
915デフォルトの名無しさん:2012/11/30(金) 07:25:21.55
>>908
@Mathematica

layoutNumbers[lst_] := Module[{pickList},

 pickList[lstx_] := {Take[lstx, 5], Take[lstx, {6, 9}], Take[lstx, {10, 13}]};

 lst // Partition[#, 13, 13] & // Map[pickList, #] & // Flatten[#, 1] & // Grid];

In := layoutNumbers[Range[0, 64]]

Out = (省略)
916デフォルトの名無しさん:2012/11/30(金) 07:53:21.16
>>907
HaskellやSmalltalkもLLじゃないと思う
917デフォルトの名無しさん:2012/11/30(金) 11:28:00.79
>>908
python

for i in xrange(65):
  print i, (['']*4+['\n']+['']*3+['\n']+['']*3+['\n'])[i % 13],
918デフォルトの名無しさん:2012/11/30(金) 11:31:08.62
レイアウト変だね
for i in xrange(65):
  print '%2d%s' % (i, (['']*4+['\n']+['']*3+['\n']+['']*3+['\n'])[i % 13]),
919デフォルトの名無しさん:2012/11/30(金) 12:49:05.50
>>908
Perl

use feature qw(say);

my @cycle = (5, 4, 4);
my @list = (0..64);

my ($i, $m) = (0, 0);
while($m < @list){
    my $n = $m + $cycle[$i++ % @cycle];
    say "@list[$m..$n - 1]";
    $m = $n;
}
920デフォルトの名無しさん:2012/11/30(金) 20:18:55.50
リストのリストを作ってから出力するタイプと
いきなり出力するタイプがあるね
921デフォルトの名無しさん:2012/11/30(金) 22:48:19.09
>>908
Scheme

>>913にCLだけど格好良く解かれてるのであえて黒板らしく

(define (f n)
 (define newline?
  (let ((lis (circular-list #f #f #f #f #t #f #f #f #t #f #f #f #t)))
   (lambda () (let ((ret (car lis)))
          (set! lis (cdr lis))
          ret))))
 (let loop ((cnt 0) (rev-str-list '()))
  (if (>= n cnt)
   (loop (+ cnt 1) (cons (if (newline?)
               "\n"
               " ")
              (cons (format #f "~2d" cnt) rev-str-list)))
   (apply string-append (reverse rev-str-list)))))
(display (f 64))
922デフォルトの名無しさん:2012/12/01(土) 00:16:45.02
>>908
Perl

use 5.01;for(2..16){$_/=.23;say join' ',$_-8..$_-4.6}

明らかにダメな方向に進んでしまった
923デフォルトの名無しさん:2012/12/01(土) 01:12:52.33
>>908
PowerShellでものっそいべた書きかつ副作用万歳
$i=0; $a=0..64; do { "$($a[$i..($i+=4)])`n$($a[(++$i)..($i+=3)])`n$($a[(++$i)..($i+=3)])" } while( $i++ -lt $a[-1] )
924デフォルトの名無しさん:2012/12/01(土) 13:21:37.37
副作用全開で書いた方が簡単なような気がしていたが
別にそんなことはなかったぜ
925デフォルトの名無しさん:2012/12/01(土) 20:34:27.14
>>924
まあ書くのは簡単だったよ、べた書きだから

正規表現全開で書けばすっきりな気がしていたが
別にそんなことなかったぜ

[Regex]::Matches("$(0..64) ", "((\d+\s){5})((\d+\s){4})((\d+\s){4})") | % { $_.Groups[1,3,5].Value }
926デフォルトの名無しさん:2012/12/01(土) 21:48:54.21
>>908
gawk 拡張性の無い方向で

BEGIN {
    d = 0
    for(i = 0; i < 65; i++) {
        d = (d + 3) % 13
        ORS = d < 3 ? "\n" : " "
        print i
    }
}
927デフォルトの名無しさん:2012/12/01(土) 22:23:37.24
>>926
確かに拡張性はないけど、ようそんな法則性見つけるねぇ・・・
928デフォルトの名無しさん:2012/12/02(日) 00:06:30.97
node.jsに落ち着くだろう悲しい未来しか視えない
最近はGUI周りでのjavascriptパインドの対応状況も、かなり良いよね
gtkやwxWidgetsって生残るのかしら
929デフォルトの名無しさん:2012/12/02(日) 00:09:59.87
LLは釣りでした
930デフォルトの名無しさん:2012/12/02(日) 00:34:37.14
Ruby その1
numbers = (0..64).to_a
[5,4,4].cycle do |n|
puts numbers.shift(n).join(' ')
break if numbers.empty?
end

その2
numbers = (0..64).each
[5,4,4].cycle{|n| puts n.times.map{numbers.next}.join(' ')} rescue "StopIteration"
931デフォルトの名無しさん:2012/12/02(日) 10:18:57.23
>>908
Python

for x in range(65):print x,"\n"if 3*x%13>9 else"",
932デフォルトの名無しさん:2012/12/02(日) 10:50:06.67
import s
for x in xrange(32768):
  for y in xrange(32768):
    for z in xrange(32768):
      d = 'c:/test/%030d/%030d/%030d' % (z, y, x)
      os.makedirs(d)
      f = os.path.join(d, '%030d_%030d_%030d.txt' % (x, y, z))
      p = open(f, 'wb')
      p.write(f)
      p.close()
      print f
933デフォルトの名無しさん:2012/12/02(日) 11:24:21.41
>>932
急に発狂してどうした?
934デフォルトの名無しさん:2012/12/02(日) 11:44:01.01
脱ファイルシステムか
スマホのステマか
935デフォルトの名無しさん:2012/12/03(月) 13:43:42.44
動的なサイトを作りたいんだけど、javascript Python PHP のどれを最初に学んだほうがいい??
いずれは全部勉強するつもりなんだけど。
936デフォルトの名無しさん:2012/12/03(月) 13:50:10.28
oppai
937デフォルトの名無しさん:2012/12/03(月) 13:54:45.26
作りたいサイトに似たサンプルチュートリアルのあるものからはじめて改造していくのが早いと思う
ブログとか掲示板とかならPHPだし、UIとかajaxならJavaScript、検索エンジンとか自然言語処理ならPythonがサンプル豊富なイメージ

というのは、行き詰まるのが一番こわいから
あとデータベース設計は正規化とか関連性とかがわかる程度には理解しといた方がいいも思う

思ってるサイトができるといいな
938デフォルトの名無しさん:2012/12/03(月) 14:32:04.74
馬鹿には無理
939デフォルトの名無しさん:2012/12/03(月) 15:34:47.59
英語が読めないのにPython使うクズ多いね
Perl使えばいいのに
940デフォルトの名無しさん:2012/12/03(月) 15:36:40.20
オブジェクト指向の言語として、どれをえらぶかなら、Perlは、不利だろう
941デフォルトの名無しさん:2012/12/03(月) 15:43:51.74
perl:古い、可読性が…
ruby:マイナー
python:可読性OK、流行ってる、日本語情報もOK
942デフォルトの名無しさん:2012/12/03(月) 15:47:34.23
pythonって2と3があるらしいけど
どっちがいいの?
943デフォルトの名無しさん:2012/12/03(月) 15:56:46.62
新しい方に決まってるじゃん
pythonとして徐々に3にシフトしていく方針みたいだし
すぐに2から3に乗り換えられないから互換性のため2が残してあるのであって
944デフォルトの名無しさん:2012/12/03(月) 16:01:27.87
Pythonの布教うぜえ
945デフォルトの名無しさん:2012/12/03(月) 17:41:41.68
Ruby厨うぜえ
946デフォルトの名無しさん:2012/12/03(月) 18:06:12.54
Pythonはうざいけど、JavaとLispを削除してPythonを入れるならよいよ
947デフォルトの名無しさん:2012/12/03(月) 18:14:20.47
PHPとかPerl、Rubyとかって、どれも大差ないだろ。
948デフォルトの名無しさん:2012/12/03(月) 18:16:18.67
新しいものを追うことに美徳感じてるから
Perlはゴミ
Python最高
949デフォルトの名無しさん:2012/12/03(月) 18:19:29.78
そして行き着く先はLISP。
950デフォルトの名無しさん:2012/12/03(月) 19:45:59.42
Lisp族へ逝っちゃうのは老いも若きも産廃のみ。
だって奴ら実用プログラムなんて書かないんだろ?
951デフォルトの名無しさん:2012/12/03(月) 20:06:58.29
Haskell板とかLISP板みると虫唾が走る
意識の高いクズばっかりだなって
952デフォルトの名無しさん:2012/12/03(月) 20:25:23.30
やめてあげて! LISPerはあって当たり前と思えるようなライブラリも
整備されたドキュメントもない過酷な環境で生きてるかわいそうな人達なの!
「そんな苦労をものともせず最強の言語使う俺スゴイ」って正当化するしかないの!
953デフォルトの名無しさん:2012/12/03(月) 21:09:40.45
たぶんLISP使いが人前でほかの言語を使うときは

LISP使い「ふっ・・・俺たちはLISPという精神と時の部屋に入って学んできた・・・」
とか思ってんだろうな

そして見下してるんだよ
「関数型言語って知ってる?」みたいに(笑)

こっちは実用的なものに興味があるのに変な自分の知識自慢とコア気取りをしててウザいな

>>952のいうとおりだ
早く消えてほしい
プログラミング通気取るとか ”悟り!!”とかほざいてやってるやつらがうざい
954デフォルトの名無しさん:2012/12/03(月) 21:32:57.08
意識の高いやつは車輪の再発明ができない
人と同じことをすると怒られるような気がしてマイナーな分野にいっちゃう

逆に、意識の低すぎるやつは実用のためなら再発明も盗作もするんだろうな
955デフォルトの名無しさん:2012/12/03(月) 21:42:06.44
LISPerはむしろ再発明大好きで、「それくらい簡単にできるよ」とか言って
実際に再発明しちゃうから、コードを共有しないドキュメント書かない保守しない
という説もある。怠惰の美徳が皆無
956デフォルトの名無しさん:2012/12/03(月) 21:55:26.10
>>953にとっての実用的な質問>>748>>935

wwwwww
957デフォルトの名無しさん:2012/12/03(月) 21:56:54.35
じゃあPerlerは?
Perlerについて言ってみろ
958デフォルトの名無しさん:2012/12/03(月) 21:57:39.64
> LISPerはむしろ再発明大好きで、「それくらい簡単にできるよ」とか言って
でも、プロダクトレベルのものは見たことない。
959デフォルトの名無しさん:2012/12/03(月) 22:01:37.19
>LISPerはむしろ再発明大好きで、「それくらい簡単にできるよ」とか言って実際に再発明しちゃうから

それくらい簡単にできるってたとえばどんなこと?
960デフォルトの名無しさん:2012/12/03(月) 22:02:02.34
どうせ簡単なことなんだろうなw
961デフォルトの名無しさん:2012/12/03(月) 22:25:57.92
その点トッポってすげぇよな、最後までチョコたっぷりだもん。
962デフォルトの名無しさん:2012/12/03(月) 22:30:31.26
たとえばSQLとか外部DSLってそのまま使えばいいのに
新しい内部DSLを作りたくなるのはなぜなのか
963デフォルトの名無しさん:2012/12/03(月) 22:59:33.25
LISPは個人的には使う気にならないが
アルゴリズムなどを考察する上で非常に適した言語の一つだと思ってるんで
尊敬はしている
964デフォルトの名無しさん:2012/12/03(月) 23:04:31.87
>>935
PHP->javascript->python
今後はjavascriptだけで十分な要件を満たす
965デフォルトの名無しさん:2012/12/03(月) 23:05:03.36
どっちかと言えば学術的な、研究のための言語ってイメージがあるかな
LLにはLISP発祥の機能は沢山あるから凄いとは思うが
実用にしたいとはあんまり思わない
966デフォルトの名無しさん:2012/12/04(火) 00:21:29.20
AI周りの教科書なんかはcommon lispで書かれてるから写経できるでしょ
今でもcommon lispが使われるような用途ってあるのかな
というか、時代的にグレアムやESRに感化されてlispを学ぶ時代でもないんでねーの?
プログラミング入門や実用的な価値からすれば、lispよかprologの方に軍配上がるしね
967デフォルトの名無しさん:2012/12/04(火) 00:28:34.38
実用的なのにしか興味が無い
968デフォルトの名無しさん:2012/12/04(火) 00:30:10.55
大昔、cadやgimpはcommon lispで書かれていたのは有名な話。
オブジェクト指向の方法論やOSSの活動で山ほどの設計が見える昨今では、
下手に書くよりかも読んだ方がはやいと思う。
古きよき日々、男たちが真の男であった計算機の黎明期にでも生まれたかったな
969デフォルトの名無しさん:2012/12/04(火) 00:46:22.66
LISP → ラテン語
Python → 英語

的なイメージ。
970デフォルトの名無しさん:2012/12/04(火) 02:19:37.66
プログラム言語は、いつからwebサイトを作るものに成り下がったんだろう
971デフォルトの名無しさん:2012/12/04(火) 02:52:09.97
webサイト程度しか作れない低能には
実用プログラミング = webサイト構築
が成り立つというだけの話
972デフォルトの名無しさん:2012/12/04(火) 03:01:12.15
てかね、今日日にcでemacsやviの派生物なんて書いたところで需要ないんだよ
973デフォルトの名無しさん:2012/12/04(火) 03:14:02.07
クラウドに乗って人の子がやってきた以上、終わりの日が来たって悟るべき
974デフォルトの名無しさん:2012/12/04(火) 10:19:52.14
クズは小難しいことで快感を覚えるんだろうなあ
975デフォルトの名無しさん:2012/12/04(火) 10:35:00.02
Developer Efficiency - XCode, Eclipse, Visual Studio
http://youtu.be/OF5mGoKcm80
976デフォルトの名無しさん:2012/12/04(火) 11:20:09.88
>970
日本では1993〜1995年くらいから
977デフォルトの名無しさん:2012/12/04(火) 12:12:33.55
1回使ったら終わりみたいな必要性のないWEBサービス作って
その道の第一人者になりたいやつが多い
978デフォルトの名無しさん:2012/12/04(火) 14:25:38.53
一発あたれば左手団扇な世界なんだから、
それ以降は後から来た奴の為にも油田を掘り起こすなんてやめて欲しい
979デフォルトの名無しさん:2012/12/04(火) 19:49:15.82
関数型言語を使えない低能の嫉妬が心地よい
980デフォルトの名無しさん:2012/12/04(火) 19:52:53.05
関数型言語が使える俺は凄い
使えないやつは低脳
981デフォルトの名無しさん:2012/12/04(火) 21:18:07.20
このスレの御題の解答見るだけでも
関数型スタイルの素晴らしさを認めざるを得ない
982デフォルトの名無しさん:2012/12/05(水) 00:54:04.49
関数型はいいところがあるが、
関数型だけでは大規模なものを作るのは難しい。
983デフォルトの名無しさん:2012/12/05(水) 02:17:59.29
いや関数型はむしろ大規模なものを作るのに向いているのでは……

LISPの最大の難しさは関数型の概念でもマクロでもなくて、
情報を得ようとすると必ず立ちふさがる英語だと言ってみる(ゆとり)
984デフォルトの名無しさん:2012/12/05(水) 03:01:49.64
関数型は副作用がある場合の対応が面倒。

副作用が無いようにしたほうがいいのはわかるが、
ユーザーが求めているものは副作用。
例えば処理結果が画面に表示されるとか
985デフォルトの名無しさん:2012/12/05(水) 07:54:52.48
ロジック部分と出力部分を切り分けるのは常識で、
ちゃんと切り分けてたら全く面倒じゃない
986デフォルトの名無しさん:2012/12/05(水) 08:36:55.63
処理を分離すること自体
関数型の方が得意だし
987デフォルトの名無しさん:2012/12/05(水) 10:29:31.44
>>986
できるなら平行で動かしたい系で、計算完了順序が不定だが、
出力順は確定している場合は、出力部分でTCP/IPの
バッファリングのようなことをする必要があるのでしょうか。
988デフォルトの名無しさん:2012/12/05(水) 14:43:51.07
出力がseek可能で、個別の計算結果の出力枠を固定長にできるのなら、
到着した分から虫食い的に埋めてくとかも有りかもなー。
989デフォルトの名無しさん:2012/12/05(水) 19:59:47.21
>>987
こういうこと?

from multiprocessing import Pool
import time

def f(x):
    time.sleep(x % 3)
    print(x)
    return x + 1

print(Pool(6).map(f, range(6)))

# 出力
0
3
4
1
2
5
[1, 2, 3, 4, 5, 6]
990デフォルトの名無しさん:2012/12/05(水) 21:10:26.66
関数型スタイル(map)最高だな
手続き型forループとかウンコだわ
991デフォルトの名無しさん:2012/12/05(水) 22:39:06.23
【お題】
>>989と同じ内容のコードを書け
992デフォルトの名無しさん:2012/12/05(水) 22:53:11.61
993デフォルトの名無しさん:2012/12/06(木) 00:30:02.89
>>983
副作用のあるものはオブジェクト指向
ないものは関数型じゃだめなの?
994デフォルトの名無しさん:2012/12/06(木) 05:49:18.44
>>992
ありがとう!
995デフォルトの名無しさん:2012/12/06(木) 08:20:23.51
>>993
別にオブジェクト指向は副作用の扱いが
得意ってワケじゃないよね
996デフォルトの名無しさん:2012/12/06(木) 11:01:15.86
だから何だよ
997デフォルトの名無しさん:2012/12/06(木) 12:16:50.07
オブジェクト指向は副作用の扱いが得意と言っていいと思うが

副作用の取り扱いにくいさはその影響が何処にまで及ぶのかがはっきりしないことであって、
その影響範囲をオブジェクトの単位で整理するっていうのはわりとマシな対処方法だと思う
998デフォルトの名無しさん:2012/12/06(木) 12:57:22.52
もし影響範囲がわかるならlockなしでマルチスレッドに対処できることになる矛盾
999デフォルトの名無しさん:2012/12/06(木) 14:12:13.38
みんなポインタの扱いが苦手
1000デフォルトの名無しさん:2012/12/06(木) 14:42:53.23
あわわ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。