【Perl,Python,PHP】LL バトルロワイヤル 27【JS,Ruby】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2012/10/07(日) 02:47:23.61エントリーは、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/
0002デフォルトの名無しさん
2012/10/07(日) 03:03:30.67言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
0003デフォルトの名無しさん
2012/10/07(日) 09:39:16.57Lispマクロのような手軽な強力さも、Haskellのような静的型検査も無い
0004デフォルトの名無しさん
2012/10/07(日) 12:19:54.140005デフォルトの名無しさん
2012/10/07(日) 18:49:21.820006デフォルトの名無しさん
2012/10/07(日) 23:35:09.52ところでttp://play.island.ac/codepaste/ってなんぞ
0007デフォルトの名無しさん
2012/10/08(月) 01:56:01.420008デフォルトの名無しさん
2012/10/08(月) 05:54:42.81http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
0009デフォルトの名無しさん
2012/10/08(月) 09:22:55.25JSにコンパイルする方がマシだもん
0010デフォルトの名無しさん
2012/10/08(月) 09:39:52.64/ / バカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ 馬鹿には無理
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
0011デフォルトの名無しさん
2012/10/08(月) 11:48:42.49そっとしておけ
0012デフォルトの名無しさん
2012/10/08(月) 13:30:00.44それ見るとRubyも不発か・・・
0013デフォルトの名無しさん
2012/10/08(月) 15:36:11.19多分、tiobeは中堅どこのソフトウェアハウス
零細web屋はjsが増えていく。
零細web屋が中堅どこの仕事を奪っていく。
零細web屋が中心になって世界が動いていく。
0014デフォルトの名無しさん
2012/10/08(月) 15:55:26.36> 零細web屋が中心になって世界が動いていく。
零細web屋の妄想ワロスwww
0015デフォルトの名無しさん
2012/10/08(月) 16:01:04.540016デフォルトの名無しさん
2012/10/08(月) 16:02:04.22Tiobeは単に検索数の集計で、長い間特に操作を加えている様子はない。
Javascriptが下降しているのは「話題性」は乏しいという意味。
流行っているかとか使われているかというようなことはあまり読み取れない。
0017デフォルトの名無しさん
2012/10/08(月) 16:14:00.860018デフォルトの名無しさん
2012/10/08(月) 17:04:27.41すみません質問です。
この表の縦、横罫の中に現れる(by # of projets) (by # of Tags)は
それぞれどういう意味ですか。
0019デフォルトの名無しさん
2012/10/08(月) 17:54:00.70プロジェクト数(タグ数)を順序でならした結果でしょう。
0020デフォルトの名無しさん
2012/10/08(月) 18:38:09.310021デフォルトの名無しさん
2012/10/09(火) 01:23:52.21hirata-create.toypark.in
0022デフォルトの名無しさん
2012/10/09(火) 05:12:30.13Ruby OUTでいいじゃん
0023デフォルトの名無しさん
2012/10/09(火) 05:31:18.30はっきり言って、大量に亡びるべき。
0024デフォルトの名無しさん
2012/10/09(火) 06:13:58.52本物の障害者だったか
0025デフォルトの名無しさん
2012/10/09(火) 08:28:30.060026デフォルトの名無しさん
2012/10/09(火) 08:35:49.920027デフォルトの名無しさん
2012/10/09(火) 09:02:00.040028デフォルトの名無しさん
2012/10/09(火) 14:00:39.340029デフォルトの名無しさん
2012/10/09(火) 14:38:41.220030デフォルトの名無しさん
2012/10/09(火) 14:51:29.410031デフォルトの名無しさん
2012/10/09(火) 14:52:17.32それが Ruby
0032デフォルトの名無しさん
2012/10/09(火) 16:33:57.57最近のgithubでは、第8層でjp語を使った子プロセス作りまで行うらしいな
0033デフォルトの名無しさん
2012/10/09(火) 16:35:57.99javascript
これでソフトウェアの進化を食い止められる
0034デフォルトの名無しさん
2012/10/09(火) 16:47:39.920035デフォルトの名無しさん
2012/10/09(火) 17:49:56.68PHP…JSに毛が生えたような言語でサーバーサイドのWeb開発に特化。HTMLと親和性が高い。ちょっとしたWebアプリ作るならほぼこれ
Python…Google推しでWebだけでなく幅広く使われている。可読性に優れている。Linuxの周辺ツールもこれで書かれているものも多い。ライブラリー豊富。小さなプログラムを大きく育てるのにも向いている
perl…古くからWebのCGIやUNIXのシェルスクリプトで使われているきた。CGIとして未だ現役。オワコン化しているがライブラリーやドキュメントの充実さは魅力的
ruby…日本発、楽しく効率よくコーディングできるのを目標。開発者のオ○二ー的要素も大きいがRoRという便利なものがある。下火ではあるが生産性がウケてところどころで使われている
0036デフォルトの名無しさん
2012/10/09(火) 19:08:09.87それよか、jsをしっかり使える方が重要だよ。自称jsを使える人間なんて現場における凶器だから
0037デフォルトの名無しさん
2012/10/09(火) 19:45:43.530038デフォルトの名無しさん
2012/10/09(火) 22:40:17.22unicodeって本当に便利か?
0039デフォルトの名無しさん
2012/10/10(水) 06:31:17.24これはこれで一つのLLの有り様だと思う
JSは改良版が乱立してるように、とにかく改善の余地の塊でウンコ言語
0040デフォルトの名無しさん
2012/10/10(水) 08:16:12.200041デフォルトの名無しさん
2012/10/10(水) 08:17:58.40https://github.com/jashkenas/coffee-script/wiki/List-of-languages-that-compile-to-JS
0042デフォルトの名無しさん
2012/10/10(水) 18:36:25.0829 デフォルトの名無しさん [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つに統合された。
0043デフォルトの名無しさん
2012/10/10(水) 19:50:42.24C++が難解でもOOが難しいことにはならないし
Rubyが遅くてもOOが遅いとはいえない
OOは無敵すぎる
0044デフォルトの名無しさん
2012/10/10(水) 20:35:52.570045デフォルトの名無しさん
2012/10/10(水) 20:36:30.31Infoq記事の続き....
問題をいくつか指摘した後に Lan 氏は,最終的に "v8 がとんでもなく早い" ことを認めながらも,
"次世代の技術として node.js の使用が必須である,とは言い切れません。" と付け加えた。
"モバイルサーバで実行しなければならなかった処理に関して言えば,Ruby on Rails より
適切であったことは事実です。しかしパフォーマンスの万能薬ではないのです。
下位レベルのサーバとフルスタックの Web フレームワークの比較なのです。"
最後の結論に注目:
下位レベルのサーバ(Node.js)とフルスタックの Web フレームワーク(Rails)の比較なのです
すべてのWebサービスが Rails から Node.js へ移行するのではなく、軽量なサービスに限定すれば
(LinkedIn社の場合は「プロキシよりちょっと重い程度」) Node.js を検討する価値がある、
という程度の話ではないかと思われ
0046デフォルトの名無しさん
2012/10/10(水) 20:42:53.030047デフォルトの名無しさん
2012/10/10(水) 20:56:37.98重いのはクライアントサイドJS
0048デフォルトの名無しさん
2012/10/10(水) 21:31:23.340049デフォルトの名無しさん
2012/10/10(水) 22:04:59.73OSSという才能が集まるフリークラスでは淘汰された。
現存するのは、企業が提供するタダ乗り文化だ。
0050デフォルトの名無しさん
2012/10/10(水) 22:07:52.78誰かrubyとキリストによる贖いの比較ってタイトルで論文でも書け
バザール文化はcからnode.jsに移った。
0051デフォルトの名無しさん
2012/10/10(水) 22:18:28.870052デフォルトの名無しさん
2012/10/10(水) 22:28:21.360053デフォルトの名無しさん
2012/10/10(水) 22:28:40.01これからrubyやrailsで商売しようとしてたマヌケたちって、どうなっちゃうんだろうwwwww
日本は、計算機の市場でまた負けたのだよ。計算機、OSときて、そして言語まできたwwwwww
0054デフォルトの名無しさん
2012/10/10(水) 22:30:35.970055デフォルトの名無しさん
2012/10/10(水) 22:33:14.68言語そのものは何でも良いなら
node.jsなんてオモチャ使わずにErlang使うわ、という話
http://kuenishi.hatenadiary.jp/entry/20101013/1286973687
0056デフォルトの名無しさん
2012/10/10(水) 22:34:21.210057デフォルトの名無しさん
2012/10/10(水) 22:40:14.760058デフォルトの名無しさん
2012/10/10(水) 22:47:24.54日付がちょっと先なのが気になった
0059デフォルトの名無しさん
2012/10/10(水) 22:51:07.09どーせ、node.js vs eralng vs golang だよ
もうひとつが、dart vs typescript
この関係を持ち出すと、結局、node.jsしか選びようがないわけ
こうして、古きよき時代のLL文化はテクノロジーの進化と共に幕を閉じた
さようなら、Larry。さようなら、guide。さようなら、matz。
0060デフォルトの名無しさん
2012/10/10(水) 22:55:55.870061デフォルトの名無しさん
2012/10/10(水) 22:57:07.38cはプラグイン言語だろうね
0062デフォルトの名無しさん
2012/10/10(水) 22:57:30.35上の記事なかなかおもしろいよ
0063デフォルトの名無しさん
2012/10/10(水) 22:57:54.860064デフォルトの名無しさん
2012/10/10(水) 23:05:16.46釣られている現職のPGなんて居たら、向いてないから転職した方が良いwwwww
0065デフォルトの名無しさん
2012/10/10(水) 23:10:40.13冗談抜きでc++以外さわっちゃダメだよね。本当に時間の無駄だったwwwwwwwwww
今学生に戻れるならc++かjsのどっちかしか触んないwwwwwwww
今ならc++と競技コーディングの方が就職に有利なのかなwwwwwwww
記事書いた連中供死ねよwwwwwwwwwwwwwwwww
0066デフォルトの名無しさん
2012/10/10(水) 23:22:13.09Rubyの仕事がないw
0067デフォルトの名無しさん
2012/10/10(水) 23:28:05.50topcoderだかでは、jsだけなかった気がしたけどね
学部1年はアリ本とヤドカリ本、買おうね!
学部2年は現実を見つめて公務員試験を受けよう!
0068デフォルトの名無しさん
2012/10/10(水) 23:28:36.390069デフォルトの名無しさん
2012/10/10(水) 23:31:41.73rubyをtypescriptにしたような感じ
0070デフォルトの名無しさん
2012/10/10(水) 23:34:32.48汎用的なスクリプト言語でPython, Rubyにとってかわる勢いのある言語はないのか
0071デフォルトの名無しさん
2012/10/10(水) 23:36:31.23> perl、rubyとかpython弄ってたのに、卒業したと同時にブーム終わってんのwwwwww
perl, ruby, python なんて役割が被ってて
弄るにしても一つで十分なのは自明なのに
全部弄ってたなんて人として最低限の知性すら足りてない
馬鹿はどんな言語触っても無駄
0072デフォルトの名無しさん
2012/10/10(水) 23:38:53.52そのスーパーセットのtypescriptが一番に勢いが付くよwwwww
他は触るだけ時間の無駄だよ。無駄wwwwwwwwwwwwwwwwwwwwwww
0073デフォルトの名無しさん
2012/10/10(水) 23:39:59.900074デフォルトの名無しさん
2012/10/10(水) 23:40:55.31最初はまだ、rubyブームなんて着てなかったんだよwwwwwww
perlを弄りだしたところでrailsが流行りだしてんのwwwwwwwwww
python触りだした頃に、schemeブーム、haskellブーム...
記事書いた奴ら死ねよwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
0075デフォルトの名無しさん
2012/10/10(水) 23:45:43.990076デフォルトの名無しさん
2012/10/10(水) 23:46:40.210077デフォルトの名無しさん
2012/10/10(水) 23:54:01.27現存する馬鹿は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なんて弄ってみろよ?零細企業から逃げ出せないぜ?
0078デフォルトの名無しさん
2012/10/10(水) 23:58:27.210079デフォルトの名無しさん
2012/10/11(木) 00:00:05.91rubyからのトランスレータ使わせて下さいなんて会社に言うの?
馬鹿じゃね?って却下されるよwwwwwwwwwwwwwwwwwwwwwww
0080デフォルトの名無しさん
2012/10/11(木) 00:03:05.79あ、もしかして派遣ですか?wwwww
0081デフォルトの名無しさん
2012/10/11(木) 00:03:19.14rubyだけ、使う必要性が他言語と比較して狭すぎる。
0082デフォルトの名無しさん
2012/10/11(木) 00:04:39.79ニートですけどなにかwwwwwwwwwwwwwwwwwwwwww
普通、大きな会社だと自分の意見なんて通らないじゃないのか?wwwwwwwww
この言語でーーーーーーーなんてぇーーーー、すぅっげぇーーーー零細ないめぇーーーーーーじwwwwwwwwwwwwwwwww
0083デフォルトの名無しさん
2012/10/11(木) 00:06:32.260084デフォルトの名無しさん
2012/10/11(木) 00:07:40.82コテとかuyのアホだけがやってりゃいいだろwwwwwwwwwwwwwwwwwwwwww
node.js推してるレスなんて、ほとんど俺だよwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
0085デフォルトの名無しさん
2012/10/11(木) 00:18:10.06あれって、次のofficeとかsocket.io、jsライブラリ、
html5で似たようなことする製品作れそうじゃんwwwww
c++で書くなんて石から削りだしてるように見えるのよねwwwwwww
methor frameworkなんて流行りだした日には、大量のjava屋さんたちにハローワークで会うかしら?wwwwwwww
ざぁwwwwwまぁwwwwwwwwwwwwwwwwwwwwwwwwwww
0086デフォルトの名無しさん
2012/10/11(木) 00:26:39.08そういった機能要求よこされる中堅どころぉなんてぇーーーー、
しぃんそぉつぅでさいよぉーされた奴らだけが必死こいて、
やってりゃいいぉねぇえええええwwwwwwww
そーいった現場って、クビきられた後で、次の職場でノウハゥ生かせられるのかしらん?wwwwwwwwwwwww
0087デフォルトの名無しさん
2012/10/11(木) 00:28:01.050088デフォルトの名無しさん
2012/10/11(木) 00:34:37.58wつけるぅとぉおおおおおおんwwww、すぅっげぇい楽しいねぇええええええええええええwwwwwww
wwwwhyみたいにぃいいい、node.jsのにゅうぅーもんマンガでもかいたらぁぁああああ、
しぃごぉとぉおおおお大尾、みいいぃいいつうかぁっるうかなあああああああああwwwwwww
0089デフォルトの名無しさん
2012/10/11(木) 00:41:46.880090デフォルトの名無しさん
2012/10/11(木) 00:46:01.10すぅげぇええええええぇリスク高いよねぇえええええええええええええええwww
作れってぇえええええ、いわれぇっるうううもののおののがあぁぁっぁ、
レベェルたかかああああああああいいいいいイッメーーーーーーージ
がぞぅしょりだの、せいぎょだの、シィんそちゅのがぁしたヴぁかにぃー、
てとりナにとりぃーーー教えてもらえるぅのかなぁあああんん?
ロマンスグレイなぁじょーーしにさーーーーーー。ふふぅん、こんばんはかえさないよぉーーーなんてぇwwwww
祖ぉーーレナらぁーーーまぁだーーーいーけーどさーーーーー、
ひっこしたあとで、ほうちされて、おい込まれたりしたらぁあああああ、
すぅううごおおぃいいリィスゥーーーーーーーーーーーーーーーークwwwwwwww
0091デフォルトの名無しさん
2012/10/11(木) 01:09:15.82じゃヴぁってぇーーーーーーーーー、なぁあああああんんかあああぁあああぁあああ
しちょおおおおっせえええええええええええええぇえええが嗚呼ああああみいいえてえるよねえええええええwwwwwwww
M V C ! M V C !ってぇえええええいううぅぅぅけえれっどおおぉぉおおおおおおおwwwwwwwww
かぃたこおおぉおぉおどのおおおわりぃいいいにいいいいいいいいいいい、
やれることおおおおすくうないいじゃんんんんんwwwwwwwwwwww
しょーじきーネットワーーーークまわりぃいいのおおおぉおおライブラリぐらいしか、
つかわれなくなりそうだよねぇええええええええええええええええええ。
すぅぷぅりんぐ?なにそれ、おいしいいいぃいいのおおおおおおおおお?wwwwwww
ウェブフレームゥワークってぇええええええ、らんりちゅしぃーすぅーぎぃーwwwwwwwww
ぷぅろぉじぇくとぅ毎にぃ、えらぶぅだけえええええええええええのおぉおぉおぉおぉおおお、
メリットなんてぇええええ、あんのかよぉぉぉぉっぉぉぉぉおぉお
C#はぁ、entityイッタクだけぉどぉぉぉおおお、M$のお庭でぇあそぶぅのう、
なんんかああああああ、せいしゅうぉぉおおおおお、ぜんひてーーいするきぃぶぅんw
でさ、でさ、でさ、出た答えがぁwwwwwww、ザッカーバーグゥか、ジョブズのまぁねごとしたいヴァカを期待してぇえ、
node.jsとぉぉおおお、メェテェオゥッ!html5でぇええ、てくぅのろじーが
入れ替わるのぉおおおおおきぃたぃするしかないぃんだよねぇええええへへへへへwwww
0092デフォルトの名無しさん
2012/10/11(木) 01:24:39.30じゅよおおううよおおぉおお斧おおほとおおんどおななんてええぇえええ、
GUIと文字列とデータベース、統計でぇえええええええええええ、
すんじゃうよねねねねねねねねえんええんねええええええええええええwwww
desa,desa,desa、GUIと文字列とデータベース弄るゥぅぅのにぃいいいさあぁあああ、
じゃヴぁあああぐらいぃいいい、メンドウなぁあああげんんごおおってえええ、
ほぉかにないよねええええええええええwwwwwwwwwwwwwwwww
しょおきぃぼぉなぁああああんけんはぁああああああああああ、
じゃヴぁすくぅりぃぷとぅがあぁああああおいしくぅううういただきぃましたぁああああwww
0093デフォルトの名無しさん
2012/10/11(木) 01:33:28.24> jsだけリアルタイムシステム書けないけど、
リアルタイムシステムに必要なものって何のこと?
それがjsだけ欠けているというのが本当か調べたいんだけど、
まあ後半の文章見る限り、レスは期待できないなw
ま、レスがなければ根拠なしということで忘れよう。
0094デフォルトの名無しさん
2012/10/11(木) 01:42:21.13ほんとぅにぃーーーーー、くぅーーるぅううーなあああぁあああぁあぁ、
げんごぉおぉおおおだったぁけれえええええどおおおぉおおさああっぁああああん、
どぅみぃてぇもぉおおお、はっかぁーれんちゅーがぁあああああああーーーーー、
このぉむぅううぅぅうぅぅ、てぇつぅがぁくスタァイルじゃないんだよねぇえええ
うにぃくすぅのぉおおでんとぅてぇきぃな記号はぁあああ、うけついでるけどさぁ、
やぁあああぱああぁああっりいいぃいい、てぇえええつうぅうがぁくぅスタァイルとはぁ、
違ってええええええええぇええみえええっるうんだょねえええええええええええええええ。
スゥクゥリプトゥのレベルでぇ、ほんとぅにぃ、クラスなぁんてーーひつようだったのかしらん?
ハッシュでぇえええええええええじゅうううぶうぅうんんだったよねえええええええええええマヂで
>>93
RTOSみたいなああああああああ、GCのぉおタァアアイミングゥまでぇええええ、
要求されぇるようなぁああああああああああぁあああ、じゃヴぁあああすくりぷとぅのおおお、
処理系何てぇええええええええええあるぅうのぉおおお?
とうしょーのしすてむとかーぁあああああ、javaらしいいじゃあああああああんんんん。
ニートゥに聞くなよヴぁーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーか
おれぇがききてぇえええええぐらいだよおおおおお、たこ、くず、はげ、ごみぃぃいぃいい
0095デフォルトの名無しさん
2012/10/11(木) 01:45:41.19おまえぇ、にいぃいいとぉおおだよねぇええええええ?
げんえきぃのえすいーとかだったらぁああああああああ、
しんだほうぅがあああいいいよおおおおおおお。
てか、しね。しね。市ね。視ね。視ね。しね。しね。しね。しね。しね
0096デフォルトの名無しさん
2012/10/11(木) 01:48:56.59バーーーかあああああああ、くうっぅぅうずううううううう、あほふぉおおぉおおお
じじじじいいいしんんにいいいいいいまああああきこまれてぃえええええええ、しね
0097デフォルトの名無しさん
2012/10/11(木) 01:57:52.78いや、だからそれ、JavaScript以外ならあるの?
少なくともスクリプト言語は全滅だし、
その他だって言語の機能じゃないでしょw
0098デフォルトの名無しさん
2012/10/11(木) 02:03:16.06ア嗚呼あったあああありいぃいいまえええええだろおぉおおヴぁあああーあーかああ
でもなきゃぁあああーーーーー、Real-Time-yo!にぃいいいいいい、
わざわぁあああああああああ、じゃヴぁああああのぉおおおおかそぉおおましいいんつぅくるぅYO!
ふーつーはーーーーーーー、real time ! なんてぇえええええええ、c/c++の分野だろぉおおおおおがぁああああああん
ゆううういいいいつぅうううううう、食ううぅううみいいっこおおみいいいよおおとおおではぁあああああああ、
mrubyがぁああああああああ、にたYOなことおおおおぉおおおやろおおおとしてえええよおお
ひょっとおおするううとおおおおぉおおお、pythonのおおおおおじっそおおおううううにはぁああああ、
RTな要求をぉ大尾見達すうものおおおお大尾がああるうかもしれええあんないいけっどおおおおおおお、
風雨通宇うーは嗚呼嗚呼嗚呼あ、エンプラ用途ではぁあああつかわねーーーだろおおおおぉおおおおおおお。
0099デフォルトの名無しさん
2012/10/11(木) 02:10:48.16組み込みを意識したmrubyを作ってみた
まつもとゆきひろ
ハードリアルタイムはムリ
0100デフォルトの名無しさん
2012/10/11(木) 02:13:10.70>少なくともスクリプト言語は全滅だし、
da-yo!カス、クズ、ゴミ虫ィィ良い良い良い良い良い良いイ!
ふつううううにいぃいいかんんがええええれりゃああああああああああああああ、
すうううくううう売り良いぃいいっぷううつうぅうううのぉおおおお、
やるうううよおうううなぁああああああああああ、機能要求じゃねーーーーYO!
>>99
まぢいでええええ?まぁあああそおおおだよおねえええええええええええ
cへのぉおおおおトランスレーターーーにいぃいいスレヴァいいいのにいいぃいいいいNE!
0101デフォルトの名無しさん
2012/10/11(木) 02:16:01.55そのほか、「Firefox 15」での採用が見送られた“インクリメンタル
ガーベジコレクション(Incremental GC)”がJavaScriptエンジンに搭載された。
従来のガベージコレクション(不要になったメモリを開放する処理)に比べて
プログラムの停止時間が短縮されるため、ゲームなどリアルタイムな処理が
求められるコンテンツがより快適に楽しめるようになるだろう。
0102デフォルトの名無しさん
2012/10/11(木) 02:17:59.32Today we are announcing the release of Chrome’s new incremental
garbage collector (GC) which dramatically improves interactive
performance of web apps and HTML5 games.
0103デフォルトの名無しさん
2012/10/11(木) 02:23:15.10金融なんかでのおぉおおおお、奇異の大おうううよううううきゅううううをおおおおおおお
おおおぉおおおぉおおおなんなんじいいいいいいい、じいげええんんでええええええええええええ
考える宇宇宇ナッツーーーーーーーーーーーーーーにおおおおおおおおおお
レントゲンをおおぉおおおお、いっめーーーーーーーじ、しろぉおおおおおお
ちょおおおどおおおおお、GCはしったりいいしたらああああああいやすぎるだろおおおおおがああああああああああああああ
0104デフォルトの名無しさん
2012/10/11(木) 02:32:49.33インクリメンタルGCだろ?
リアルタイムって何を言ってるんだか。
0105デフォルトの名無しさん
2012/10/11(木) 02:33:45.52JavaScriptもそうだけど。
0106デフォルトの名無しさん
2012/10/11(木) 02:39:07.00ナああああああああああにいいいいがああつかああわれえてええぇんんのおお?
0107デフォルトの名無しさん
2012/10/11(木) 02:54:14.06つううううううかいいいたいいいいかあああああああああああああああああああああああっぁあ?
じゃヴぁすくりぷとでかかれたあああしんしつさいどぅそぉおちとぉかぁ、雄プレイなんてぇ、
JOE式でえええかんがえってえええええ、イイヤァーーだろぉおおおおぉお
0108デフォルトの名無しさん
2012/10/11(木) 19:07:05.030109デフォルトの名無しさん
2012/10/12(金) 08:24:50.09鬼のようにレス番飛んでんな
キティでもわいてるのか?
0110デフォルトの名無しさん
2012/10/12(金) 11:32:59.78#=> true
0111デフォルトの名無しさん
2012/10/13(土) 04:12:14.20運営資金足りないとかで、数年以内に結果出せって言われてた気がする。
もはやビジネスで負けた連中の呪いだよね!だから、大好き。
0112デフォルトの名無しさん
2012/10/13(土) 13:38:05.510113デフォルトの名無しさん
2012/10/13(土) 15:38:16.20100%外れる占い師みたいなやつだな
0114デフォルトの名無しさん
2012/10/13(土) 23:52:58.430115デフォルトの名無しさん
2012/10/13(土) 23:54:11.770116デフォルトの名無しさん
2012/10/13(土) 23:56:09.950117デフォルトの名無しさん
2012/10/14(日) 00:18:10.98実名で行動した方が有意義である文化において2chはオワコン化してしまった。
いいや、最初からこんな場所を読んではいけなかったのだ。
0118デフォルトの名無しさん
2012/10/14(日) 00:21:16.380119デフォルトの名無しさん
2012/10/14(日) 00:35:36.36これまでシステムがあったらってな零細企業にも低価格で気楽に導入されるんだよ
頭使わない精神論者や教養のない連中が、どんどん淘汰されていくんだ。見物だね
0120uy
2012/10/14(日) 03:57:12.19今まで、こんなに技術から離れてたことがあっただろうか
なんか本当にもう、どうでもいいなこのジャンル
冷静に第三者視点でみると
IT技術なんて全然世界の中心ではなく
ひとつの「マイナー」ジャンルでしかない
「マイナー」だよ「マイナー」
狭すぎだろ・・・そしてマイナーな割に難易度が高い事は事実でもある
可愛そうだ
いつの時代も、社会や国の負荷がモロにかかる職種ってあるよな
こんな時代にPGやってる奴って・・・。
0121デフォルトの名無しさん
2012/10/14(日) 04:04:02.38PerlとかのUNIX系のソフトウェアのメーリングリストは2chなんかが存在する以前から十分に普及してたぞ
0122デフォルトの名無しさん
2012/10/14(日) 05:50:31.63class と 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
0123デフォルトの名無しさん
2012/10/14(日) 08:16:33.450124デフォルトの名無しさん
2012/10/14(日) 10:26:50.06で教科書が完成したら解散
無事に終わってよかっただろ
0125デフォルトの名無しさん
2012/10/14(日) 14:28:24.03ある程度の設計できるようになったら、断片的な知識から全体を構成できるからな
0126デフォルトの名無しさん
2012/10/14(日) 14:34:45.60web系・業務系はまったく才能がなくても、上手くやれば簡単に金巻き上げれそう
おまいら、どっちがオヌヌメなの?
0127デフォルトの名無しさん
2012/10/14(日) 14:39:53.15何れホワイトカラーの事務職なんてのは、jsと統計周りの知識が必須になるよ
多分、ウェブバブル崩壊後には散り散りになったweb系技術者たちが
地方のあちこちのダメな中小企業で社内システムやらM$Officeのマクロを弄り出すよ
或いは、web系の企業の方が地方のダメな中小企業の業務を持っていってしまうか
どちらにせよ、地獄絵図だよ!
0128デフォルトの名無しさん
2012/10/14(日) 14:48:32.29TypeScriptが話題になってたからこのスレが良いかなと思って
結局次期JavaScriptに静的型付けが入るのかどうか気になったんだよ
0129デフォルトの名無しさん
2012/10/14(日) 14:55:51.470130デフォルトの名無しさん
2012/10/14(日) 15:21:48.10http://toro.2ch.net/test/read.cgi/tech/1349187527/
JavaScriptコードはすでにTypeScripttコードです
http://toro.2ch.net/test/read.cgi/tech/1349488930/
0131デフォルトの名無しさん
2012/10/14(日) 15:33:26.66統計が必須になる層はJSなんて弄りません
0132デフォルトの名無しさん
2012/10/14(日) 15:47:04.32ゲーム関連のお給料がいいなんて話は聞いたことがないけど…
モシモシのことならあれはwebサービスだからね
>>131
統計が必須になるような層の人は実際コンピュータには無知な人が多いような…
0133デフォルトの名無しさん
2012/10/14(日) 18:39:53.560134デフォルトの名無しさん
2012/10/14(日) 20:00:04.41おいおい、このスレでJavaScriptのことを話題にしてもいいだろ
0135デフォルトの名無しさん
2012/10/14(日) 20:32:58.400136デフォルトの名無しさん
2012/10/15(月) 01:06:10.150137デフォルトの名無しさん
2012/10/15(月) 02:04:07.32動的だから変更のたびに チェックと確認が必要
ローカル開発→開発サーバー→ステージング→本番 順番に確認作業が必要
仕様変更のたびにこれを毎回やる
実行しないとバグがわからないから クラス・関数がどこかで参照されているか明らかにする必要がある
ドキュメントが大量に必要 しかも仕様変更のたびにドキュメントの変更も必要
この場合ドキュメントにもバグが混入する 大規模開発だと必ずこんがらがる
FWはバージョンアップのたびに別物に生まれ変わり 互換性がなく 今までのソースは動かない
動作しているものから不具合を探さないといけない また学習しないといけない
新しいFWがしょっちゅう出てきて それがデフォルトスタンダードのようにはてぶなどで宣伝工作される
実行しないとバグがわからない動的言語は過去のライブラリを使うのをためらう
結局過去の資産を生かせない 関数の名前の変更のたびに
ソース検索が必要で手間がかかる これが静的言語だったらエラー吐くから
確認作業はローカル開発内で収まることが多い 動的は作れば作るほどシステムが負債化していく
作った後はまた新しいものを作った方が早いという結論になることが多い
どうしようもない動的言語を流行らそうとするはてぶをはじめ技法やCodeZine、アシアルは本当に罪深い
0138デフォルトの名無しさん
2012/10/15(月) 02:09:24.82彼らは自分たちの記憶能力を生かしたいがために
ガラクタ言語をチョイスしてそれをスタンダードのような流れにしたいと思っている
このガラクタ言語を使うことで短記録のある自分たちが有利であることを知っていて
他を蹴落としたいと潜在的に思っている。はてぶとかで工作してくる
静的言語を使えば(主にC#)こんな苦労なんて全然ないのに
それでは自分たちが存在意義が問われるからあえて使わないようにしている
いい加減こんなガラクタ言語やっていても無限に苦労することなる
動的言語はやめとけ無限に苦労することになる 書けば書くほど大変になる
記録力のあるやつだけやつしか現場に残らない 記録に止めないといけないことが
多すぎる VisualStudioやC#だったらバグ、リファレンスエラーが教えてくれる
リファクターで容易に関数名を変更ができる
動的言語に比べてはるかに短い時間で安全確実にプログラムを完成させることができる
見えない地雷で身動きのとりづらい言語だからMVCで思考を統一するしかなかった
だから現場は北朝鮮みたいな思考統制が進み ロボット人間だけが残る
組織は硬直し ルールーこそ人の上に立つ存在だと考える頭のおかしいロボット人間がでてくる
そこは自由な思想・行動も否定され 愚かなルールを誰が破るか密告することを楽しみとする 潰しあいの世界が出来上がる
0139デフォルトの名無しさん
2012/10/15(月) 02:22:32.320140デフォルトの名無しさん
2012/10/15(月) 07:34:24.62"3 19 + -2 /" という文字列入力に対し-11を返すような
逆ポーランド電卓関数を書け
・四則演算をサポートすること(さらに、演算セットは入れ替え可能なこと)
・不正な入力に対しては例外・nullなどを返すこと
0141デフォルトの名無しさん
2012/10/15(月) 08:13:13.17のときはどう動けばいい?
0142デフォルトの名無しさん
2012/10/15(月) 08:15:34.430143デフォルトの名無しさん
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
0144デフォルトの名無しさん
2012/10/15(月) 08:18:05.92stack = []
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 /")
0145デフォルトの名無しさん
2012/10/15(月) 08:19:31.82def 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)
0146デフォルトの名無しさん
2012/10/15(月) 08:22:29.83自分で作った物が一番記憶しやすいし
仕様を変える時期もコントロールできるし責任の擦り合いもない
全部自分で作ることが悪いみたいに宣伝されるのが不可解だ
0147デフォルトの名無しさん
2012/10/15(月) 08:25:11.30勝手に仕様変えるのも
自分に都合の良い解釈するのも
全部自由
まるで森口
0148デフォルトの名無しさん
2012/10/15(月) 08:37:22.80別に動的型もevalも使う必要無いし
ただし>>137-138のような低能には無理。静的動的関係なく
0149デフォルトの名無しさん
2012/10/15(月) 11:21:15.910150デフォルトの名無しさん
2012/10/15(月) 17:42:35.600151デフォルトの名無しさん
2012/10/15(月) 18:15:22.67ちょっと目を逸らしたらWeb用CGI言語がメインでけっこう大きな勢力になっていたので驚いた
0152デフォルトの名無しさん
2012/10/15(月) 18:19:41.59PHP, Ruby, Pythonは、Googleで検索したら余計なものも一致する
0153デフォルトの名無しさん
2012/10/15(月) 19:18:36.610154デフォルトの名無しさん
2012/10/15(月) 19:20:00.57http://news.tv-asahi.co.jp/ann/news/web/html/221013022.html
0155デフォルトの名無しさん
2012/10/15(月) 20:24:51.220156デフォルトの名無しさん
2012/10/15(月) 20:25:52.34まずおまえがきえろ
0157デフォルトの名無しさん
2012/10/15(月) 21:36:07.96Rubyによるもう一つの実装
http://play.island.ac/codepaste/code?id=24
0158デフォルトの名無しさん
2012/10/15(月) 23:25:07.22何から何まで横着してみた@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 /"
入力によっては例外出し続ける
0159デフォルトの名無しさん
2012/10/16(火) 00:11:16.67なんとか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 /"
0160デフォルトの名無しさん
2012/10/16(火) 00:36:02.75golfみたいに短さ優先で書いたり、小さな言語処理系みたいに書いたり
0161デフォルトの名無しさん
2012/10/16(火) 07:58:20.66そういうのは多様性が無くなってツマラン
0162デフォルトの名無しさん
2012/10/16(火) 08:11:14.100163uy
2012/10/16(火) 10:35:53.46ひとつ言ってやるけど、
世界規模の自然災害や、戦争でも起こらない限り、
今までやってた常識がある日突然に覆る事は無い
常識が覆るペースは非常に遅い
なのでその「常識」を覆している最中に、
もっと良い物が出てくる可能性がITにおいては多々ある
どこに始まってもいないJSに未来を見れるのだろうか
0164デフォルトの名無しさん
2012/10/16(火) 19:39:00.04どんな入力値をいれたら鼻から悪魔が出たの?
0165デフォルトの名無しさん
2012/10/16(火) 19:43:59.47クラウドにスマホ、html5といったイノベーションが起こったよ
これで、これまでの常識が変わったと思わないなんて、よっぽど狭い世界で生きてんだろうな
0166デフォルトの名無しさん
2012/10/16(火) 19:45:49.15わざわざドキュメント書くアホなんて、大手で大卒雇ってるアホ連中だろwwww
0167デフォルトの名無しさん
2012/10/16(火) 19:53:07.58railsホスティングサービスやruby2.0なんて出だしでこけた感しかない
0168デフォルトの名無しさん
2012/10/16(火) 19:53:50.68一人で仕事してるようなヤツじゃなければ普通書く
キッチリ書くかザックリ書くかは規模による
0169デフォルトの名無しさん
2012/10/16(火) 19:56:50.38わざわざexcelにドキュメント残すって、コードとドキュメントに整合性とれないだろw
0170デフォルトの名無しさん
2012/10/16(火) 20:09:13.38「こうあるべきだよな」
っていうのを書くのであって
コーディングの内容書くわけじゃないんだぞ
整合性取れないって…
0171デフォルトの名無しさん
2012/10/16(火) 20:34:21.040172デフォルトの名無しさん
2012/10/16(火) 22:54:22.14それよか、railsのホスティングサービスw
0173デフォルトの名無しさん
2012/10/16(火) 22:57:31.070174デフォルトの名無しさん
2012/10/17(水) 07:25:57.97azureでのmapreduceはF#しか使えない上にamazonより面倒くせぇ
0175デフォルトの名無しさん
2012/10/17(水) 10:31:51.98ttp://www.debian.org/News/2012/20120425
0176デフォルトの名無しさん
2012/10/17(水) 15:02:31.49"1 2 3"的なバグッた式でも正常終了して値を返す
腐ったプログラム書いてる奴ばっかだな。
こういうのも静的チェックで捕まえられると良いんだが。
0177デフォルトの名無しさん
2012/10/17(水) 16:01:40.12もし100万行書いた後でそうなら腐ったと言ってもいいよね
しかし数十行ではどうだろう
怠惰かもしれないが腐敗ではないと思う
0178デフォルトの名無しさん
2012/10/17(水) 17:46:59.83明らかに不正とも言い切れない
0179デフォルトの名無しさん
2012/10/17(水) 18:27:53.34がんばって書いた量に比例してチェックが厳しくなる
0180デフォルトの名無しさん
2012/10/17(水) 18:29:35.200181デフォルトの名無しさん
2012/10/17(水) 19:34:06.22Squeak 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 "
0182デフォルトの名無しさん
2012/10/17(水) 21:10:48.96そこにスタックに積んだ数字を全て足す"sum"や
exp(x)を返す"exp"を後から追加できると
ポイント高いよ
0183デフォルトの名無しさん
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 "
0184デフォルトの名無しさん
2012/10/18(木) 00:44:04.45((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 "
0185デフォルトの名無しさん
2012/10/18(木) 03:28:12.03extension (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
0186デフォルトの名無しさん
2012/10/18(木) 19:08:38.870187デフォルトの名無しさん
2012/10/18(木) 20:45:37.78最初から拡張性あるように組む必要があって、
動的型付け言語は状況に応じてバンバンコード書き変えて、
行き当たりばったり上等!って感じ
上のSmalltalkとHaskellのコードに良く現れてる
0188デフォルトの名無しさん
2012/10/18(木) 21:14:41.770189デフォルトの名無しさん
2012/10/18(木) 23:33:31.43いいぞ、もっとやれ。昔に見た流れだ。
それで沢山の大学生たちを地獄に落としてやれ
0190デフォルトの名無しさん
2012/10/19(金) 00:27:21.760191デフォルトの名無しさん
2012/10/19(金) 00:35:14.26function 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
0192デフォルトの名無しさん
2012/10/19(金) 00:41:33.91その内の一部を選択して、コマンド打つだけで
正確に関数に抜き出してくれるツールはありませんか?
LL言語用のものならなんでもいいです。
正確ってことが重要なので、それにより動作が
変わってはだめです。
0193デフォルトの名無しさん
2012/10/19(金) 01:00:59.77自分で作るが良い
0194デフォルトの名無しさん
2012/10/19(金) 01:14:23.400195デフォルトの名無しさん
2012/10/19(金) 05:23:27.28>>140には「演算セットは入れ替え可能なこと」ってあるから
'/'の振舞いをdivからquoに変更して、
数は整数以外はエラーになるよう変えてみたら?
その修正にどの程度書き換えが必要かで
言語の特徴も見えてくるんじゃない?
0196デフォルトの名無しさん
2012/10/19(金) 20:35:28.65http://play.island.ac/codepaste/code?id=25
0197デフォルトの名無しさん
2012/10/19(金) 21:32:25.330198デフォルトの名無しさん
2012/10/19(金) 22:00:43.23> 数は整数以外はエラーになるよう変えてみたら?
LLは(動的型言語は)こういう制限かける方向は苦手。
間違った入力する奴が悪いってスタンスだから。
0199デフォルトの名無しさん
2012/10/19(金) 22:17:13.70| 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 "
0200デフォルトの名無しさん
2012/10/19(金) 22:27:04.14ガンダムエンジンをこさえているテム・レイ的な哀愁が背中に漂ってるよね。
父さん、こんな古いものを…
0201デフォルトの名無しさん
2012/10/19(金) 23:04:50.670202デフォルトの名無しさん
2012/10/19(金) 23:18:51.16つかそれ以前に、これだけ使われに使われまくってるjavascriptを
逆説的でもなく本気で「始まってない」と評してるあたり、
この人間の意見は聞く価値もがない
0203デフォルトの名無しさん
2012/10/19(金) 23:26:24.88老人ホームから連れてきてサイボーグ化された
0204デフォルトの名無しさん
2012/10/19(金) 23:28:27.80マラソンで折り返し地点にいるのにスタートするとは言わない。
始まるというのは、使われてない状態からスタートしたばかり時のこと。
故に、普及しているものは、始まっていない。
0205デフォルトの名無しさん
2012/10/19(金) 23:44:28.770206デフォルトの名無しさん
2012/10/19(金) 23:47:08.790207デフォルトの名無しさん
2012/10/20(土) 00:12:34.70DSLという。
0208デフォルトの名無しさん
2012/10/20(土) 00:13:57.940209デフォルトの名無しさん
2012/10/20(土) 00:14:54.58js厨乙
0210デフォルトの名無しさん
2012/10/20(土) 00:19:00.74違う問題でも短く書けるとは限らないんだよな。
0211デフォルトの名無しさん
2012/10/20(土) 02:07:53.46class 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 "
0212デフォルトの名無しさん
2012/10/20(土) 02:16:07.46直訳だからそうなるのか
0213デフォルトの名無しさん
2012/10/20(土) 08:20:28.45ndiv = infixMaybe div "/"
> calcRPN [add, sub, mul, ndiv] "1 2.0 +"
Nothing
> calcRPN [add, sub, mul, ndiv] "12 5 /"
Just 2
ghcでコンパイルするときは-XNoMonomorphismRestrictionがいるかも
0214デフォルトの名無しさん
2012/10/20(土) 12:27:02.990215デフォルトの名無しさん
2012/10/20(土) 13:58:55.740216デフォルトの名無しさん
2012/10/20(土) 15:09:43.32今必死で超級ラピッド開発してるから
正座して待ってろ
0217デフォルトの名無しさん
2012/10/20(土) 15:36:23.16∧_∧ +
(0゚・∀・) ワクワクテカテカ
(0゚∪ ∪ +
と__)__) +
0218デフォルトの名無しさん
2012/10/20(土) 15:39:07.25こんだけ型の違う値を足しても実行時エラーすら出ないJSで
ラピッド開発とかマゾなの?
0219デフォルトの名無しさん
2012/10/20(土) 15:56:45.94import 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
0220デフォルトの名無しさん
2012/10/20(土) 16:06:12.580221デフォルトの名無しさん
2012/10/20(土) 17:53:50.02一度例外を捕まえてから
同じ例外をraiseするのは
何か意味があるの?
0222デフォルトの名無しさん
2012/10/20(土) 18:41:46.15どんな厳しいチェックをしてもここで assert y!=0 を保証するのは不可能という意味なのか
0223デフォルトの名無しさん
2012/10/20(土) 19:16:49.81さすが関数記述用DLSやで
0224デフォルトの名無しさん
2012/10/20(土) 19:24:45.680225デフォルトの名無しさん
2012/10/20(土) 20:16:24.40デビルライトソードじゃね?
0226デフォルトの名無しさん
2012/10/20(土) 20:26:11.490227デフォルトの名無しさん
2012/10/20(土) 20:36:33.380228デフォルトの名無しさん
2012/10/20(土) 21:34:01.340229デフォルトの名無しさん
2012/10/20(土) 21:53:34.06http://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 を追加
0230デフォルトの名無しさん
2012/10/20(土) 21:58:48.80>>229以外はそんなに真面目でも無いと思う
0231デフォルトの名無しさん
2012/10/20(土) 22:08:11.21js版は音声認識に対応して
今は駅前でテスターを募集している
0232デフォルトの名無しさん
2012/10/20(土) 22:09:25.750233デフォルトの名無しさん
2012/10/20(土) 22:34:05.95俺のjsは尻文字の入出力を実装した
ケツ同士でのやりとりが出来る
0234デフォルトの名無しさん
2012/10/20(土) 22:50:15.68俺のjsはハイブリットにした。
3と19の間に「次」と言う事で
319と区別できる
0235デフォルトの名無しさん
2012/10/21(日) 00:20:13.68一体何時間かかるの?>>199の8割で書けるんでしょ?
0236デフォルトの名無しさん
2012/10/21(日) 02:26:14.38ラピッド開発は早けりゃ良いってもんじゃない
0237デフォルトの名無しさん
2012/10/21(日) 07:56:02.780238デフォルトの名無しさん
2012/10/21(日) 08:18:00.89家柄的な意味で
0239デフォルトの名無しさん
2012/10/21(日) 08:40:52.190240デフォルトの名無しさん
2012/10/21(日) 10:13:14.280241デフォルトの名無しさん
2012/10/21(日) 10:35:38.850242デフォルトの名無しさん
2012/10/21(日) 10:58:33.52よく似た粒度のお題200個くらい解かせて平均したら短さダントツだった
http://cast-a-spell.at.webry.info/201001/article_7.html
0243デフォルトの名無しさん
2012/10/21(日) 11:00:26.57意義があってもなくても使わなければゼロオーバーヘッドだから許される
と言い出したやつが今の世界をつくったと思う
0244デフォルトの名無しさん
2012/10/21(日) 11:05:54.350245デフォルトの名無しさん
2012/10/21(日) 11:11:56.24単純に行数少ないからコード量少ないとは言えない感じ
0246デフォルトの名無しさん
2012/10/21(日) 11:24:49.95(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 /")
0247デフォルトの名無しさん
2012/10/21(日) 12:23:54.89整数実数両対応でもないコードを
いまさら上げる心意気に感動した
0248デフォルトの名無しさん
2012/10/21(日) 12:47:33.650249デフォルトの名無しさん
2012/10/21(日) 12:49:24.07いいじゃん。いろいろ出てきたほうが楽しいから
もっとも、こんなんで Common Lisp は短く書けるドヤ!とか主張しだしたら叩くけど
0250デフォルトの名無しさん
2012/10/21(日) 16:13:30.79| 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 "
0251デフォルトの名無しさん
2012/10/21(日) 19:32:21.22共通ルーチンの作成を許して解かせるようなソースコードで
発揮されると聞いたことがある。
ただし、確認してみたことはない
0252デフォルトの名無しさん
2012/10/21(日) 19:53:08.49class 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
0253uy
2012/10/22(月) 05:56:21.86インデントすらつけないで2chにソース投稿してる奴は死ねよ
何年2chやってんだ?
ソースに&んbsp;付与するスクリプトくらいさっさと作れカス
0254デフォルトの名無しさん
2012/10/22(月) 07:18:55.79いわゆるC言語のunsigned intに対応
import Foreign.C.Types
> calcRPN [add, sub, mul, ndiv] "1 2 -" :: Maybe CUInt
Just 4294967295
http://ideone.com/zcxWmv
0255デフォルトの名無しさん
2012/10/22(月) 13:47:24.80http://ideone.com/kwrjvK
0256デフォルトの名無しさん
2012/10/23(火) 00:00:36.05(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))))
0257デフォルトの名無しさん
2012/10/23(火) 06:28:01.16253 :uy:2012/10/22(月) 05:56:21.86
>>211 >>252
インデントすらつけないで2chにソース投稿してる奴は死ねよ
何年2chやってんだ?
ソースに&んbsp;付与するスクリプトくらいさっさと作れカス
0258デフォルトの名無しさん
2012/10/23(火) 07:10:24.86結論: そこまでのメリットがSmalltalkに無い
0259デフォルトの名無しさん
2012/10/23(火) 08:00:44.93環境は捨てるものではなく滅ぼされるもの
0260デフォルトの名無しさん
2012/10/23(火) 08:44:03.570261デフォルトの名無しさん
2012/10/23(火) 09:39:10.54ちょっとそこで過ごしてみさえすれば
精神と時の部屋みたいなもんで
たとえごく短時間でもちゃんと鍛錬しさえすれば
出てくるときには戦闘力が上がっている
0262デフォルトの名無しさん
2012/10/23(火) 11:29:08.52なんでSETFなの?
0263デフォルトの名無しさん
2012/10/23(火) 12:12:12.33データをセットするには setf または setq という関数を使います。
Common Lisp では setf を使うことが推奨されていますが、
M.Hiroi は古い人間なので setq を好んで使っています。
皆さんは setf を使ってくださいね。
0264デフォルトの名無しさん
2012/10/24(水) 22:14:54.28そういう「使ったらレベルアップする」系の話は
関数型言語では良く聞くけど、Smalltalkでも成り立つの?
0265デフォルトの名無しさん
2012/10/25(木) 00:45:54.540266デフォルトの名無しさん
2012/10/25(木) 01:02:52.280267デフォルトの名無しさん
2012/10/25(木) 01:41:58.38レベルアップとかそうしゃっちょこばらずにほんの5分でも触ってみたらいいと思うんだよね
http://amber-lang.net/learn.html
そりゃXEROX直系由来の環境とかライブラリとかやっかいなのも色々あるかもしれんけど、
とりあえずは一番大事な「メッセージング」っていう唯一のドグマに納得できてからでも遅くないというか
0268デフォルトの名無しさん
2012/10/25(木) 11:38:56.93むしろ邪魔
0269uy
2012/10/25(木) 12:29:40.300270デフォルトの名無しさん
2012/10/25(木) 12:31:09.270271デフォルトの名無しさん
2012/10/25(木) 22:01:42.051. 一つしかなければ幼稚にならないから一つにする
2. 気がすむまで新しい言葉を作る
0272デフォルトの名無しさん
2012/10/25(木) 22:05:21.600273デフォルトの名無しさん
2012/10/25(木) 22:09:40.640274デフォルトの名無しさん
2012/10/25(木) 22:34:15.940275デフォルトの名無しさん
2012/10/25(木) 22:35:11.035分も触ったらメッセージングなんて
わざわざ構文でサポートする程のモンじゃないって
分かってしまうよね
それを言語のコアに据えるSmalltalkが時代遅れの骨董品ってこともね
0276デフォルトの名無しさん
2012/10/25(木) 22:47:46.15なぜlambdaを[]にしないのか理解できない
0277デフォルトの名無しさん
2012/10/25(木) 23:17:27.170278デフォルトの名無しさん
2012/10/26(金) 00:26:31.37あれってメッセージングなの?たんなる動的呼び出しだろ
0279デフォルトの名無しさん
2012/10/26(金) 02:05:11.460280デフォルトの名無しさん
2012/10/26(金) 06:48:00.87セレクタも括弧も両方書く言語はLispと同じかそれ以上に酷い
Haskellの方がまし
0281デフォルトの名無しさん
2012/10/26(金) 07:11:03.36あんなもんただの慣れだぞ
慣れるとむしろ優先度とか余計なこと考えなくていいから読みやすい
0282デフォルトの名無しさん
2012/10/26(金) 08:19:07.780283デフォルトの名無しさん
2012/10/26(金) 08:53:18.74メッセージングは方便だよ。
本質はできるだけ多くの事(呼び出しも含め)を動的(遅延結合)にすること。
それを貫くことで、ソフトウエアを停止させずに、長く、必要なら部分を変化・置き換えつつ
運用し続けることが可能だって示すところがSmalltalkで示したかったこと…ってアラン・ケイも総括している。
http://squab.no-ip.com/collab/uploads/61/IsSoftwareEngineeringAnOxymoron.pdf
0284デフォルトの名無しさん
2012/10/26(金) 11:22:33.520285デフォルトの名無しさん
2012/10/26(金) 11:35:23.000286デフォルトの名無しさん
2012/10/26(金) 20:53:54.360287デフォルトの名無しさん
2012/10/26(金) 23:00:25.08動き続けることは難しく無いわな
0288デフォルトの名無しさん
2012/10/26(金) 23:10:45.11我々はか弱い。 だからあまりいじめるな
0289デフォルトの名無しさん
2012/10/27(土) 04:31:12.42やぁだぁーーーーーーー
0290デフォルトの名無しさん
2012/10/27(土) 07:28:41.43自転車でいうとママチャリだぞ
0291デフォルトの名無しさん
2012/10/27(土) 07:49:01.17http://web.archive.org/web/20090208073444/http://itpro.nikkeibp.co.jp/a/it/alacarte/interview0703/alan_9.shtml
私の少年期を過ごした農場には、T型フォードが数台あった。1920年代のしろものだ。
それも本物の自動車にも関わらず、たった数百個の部品でできていた。
だから12歳の子供でも、週末に友達と一緒に、自動車全体を分解し、
それを元通りに組み立て直すことも可能だった。ところが現代において、
そんなことはありえない。自動車には数百万個もの半導体が組み込まれている。
トランスミッションのシステムも極めて複雑化している。
ちょっと改造してみようと思っても、自動車の原理全体を学ぶことは容易ではない。
これは世の中の進歩にとって重大な問題だと考えている。子供たちが、
大人の世界から隔離されかねない。こうしたテクノロジーへの関心が急速に
冷めているのも理解できる。
0292デフォルトの名無しさん
2012/10/27(土) 07:59:55.37http://www.viewpointsresearch.org/html/work/ifnct.htm
STEPS プロジェクトご紹介その2
http://d.hatena.ne.jp/propella/20111022/p1
0293デフォルトの名無しさん
2012/10/27(土) 09:13:49.67ということで隔離してるんだけど
壁を作って隔離してみたら、壁自体に興味を持ってトンネルを掘る子供が増えたりして
0294デフォルトの名無しさん
2012/10/27(土) 11:08:00.57コード出してくれよ。コードを
0295デフォルトの名無しさん
2012/10/27(土) 13:25:08.18"3 19 [ + -2 / ] $" という文字列に対し
配列 ['3', '19', ['+', '-2', '/'], '$'] を返すような関数を書け
入れ子の深さは制限しないこと
0296デフォルトの名無しさん
2012/10/27(土) 13:43:20.630297デフォルトの名無しさん
2012/10/27(土) 14:18:46.37s.split.inject([[]]){|m, t|
case t
when "["; m << []
when "]"; m[-2] << m.pop
else m.last << t
end
m
}.first #=> ["3", "19", ["+", "-2", "/"], "$"]
0298デフォルトの名無しさん
2012/10/27(土) 16:07:46.47$str = "3 19 [ + -2 / ] $" -replace "\s", "','" -replace "'\[',", "(" -replace ",'\]'", ")"
iex "'$str'"
0299デフォルトの名無しさん
2012/10/27(土) 19:42:30.70import 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 / ] $"
0300デフォルトの名無しさん
2012/10/27(土) 19:48:55.76http://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/
0301デフォルトの名無しさん
2012/10/27(土) 23:00:25.06string := '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' '/') '$') "
0302デフォルトの名無しさん
2012/10/27(土) 23:11:24.03しれっと終了するプログラムには苦笑を禁じ得ない
0303デフォルトの名無しさん
2012/10/28(日) 00:53:09.85gawk
http://ideone.com/XxvD6l
0304デフォルトの名無しさん
2012/10/28(日) 00:55:42.290305デフォルトの名無しさん
2012/10/28(日) 01:48:33.70皆頑張るねぇ
0306デフォルトの名無しさん
2012/10/28(日) 09:18:31.40例えば "3 19 [ + -2 / ] $ (4)" が
['3', '19', ['+', '-2', '/'], '$', [ '4' ]]
を返したりするのはアウト
0307デフォルトの名無しさん
2012/10/28(日) 09:22:13.74構文解析はコンパイル時だから、実行時よりも気が楽だな
旅の恥はかき捨て
0308デフォルトの名無しさん
2012/10/28(日) 09:22:30.090309デフォルトの名無しさん
2012/10/28(日) 10:31:43.77空白だけ弄るようにすればなんも問題ないよ
引用符で空白を囲んでる場合は別対応、とかなら他の解含めて書き直しだけどね
0310デフォルトの名無しさん
2012/10/28(日) 10:54:06.65eval方式なら不要
0311デフォルトの名無しさん
2012/10/28(日) 11:12:39.69{}も改行が多いし
0312デフォルトの名無しさん
2012/10/28(日) 12:30:31.15| 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' '/') '$') "
0313デフォルトの名無しさん
2012/10/28(日) 15:02:42.27from 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で書いたのも見てみたいとリクエストしてみる
0314デフォルトの名無しさん
2012/10/28(日) 16:23:30.41def 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 / ] $'))
0315デフォルトの名無しさん
2012/10/28(日) 18:03:43.94use 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 / ] $');
0316デフォルトの名無しさん
2012/10/28(日) 18:07:52.23use 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 / ] $');
0317デフォルトの名無しさん
2012/10/28(日) 19:15:02.44この御題じゃ差が付かないな
0318デフォルトの名無しさん
2012/10/28(日) 20:10:04.91>>299,313は内部DSLだけど>>316はflex風の外部DSLだし
0319デフォルトの名無しさん
2012/10/29(月) 11:24:26.990320デフォルトの名無しさん
2012/10/29(月) 20:59:19.340321デフォルトの名無しさん
2012/10/29(月) 22:06:20.35LLである必要がないね
0322デフォルトの名無しさん
2012/10/29(月) 22:51:52.34能力というと持ち主がいるみたいだけど
その力がその人の内部にあるか外部にあるか考えてもあまり良いことはない
もし必要がない能力だったら持ってる人は損した気分になるかもしれない
重要なのは内か外かではなく使いたい時にいつでも使えるかどうか
0323デフォルトの名無しさん
2012/10/31(水) 18:11:48.98posix準拠なsh,awk,sedかjs、或いはcぐらいしか選択肢がない
0324デフォルトの名無しさん
2012/11/01(木) 07:39:30.80大抵の言語は動くと思うが
0325デフォルトの名無しさん
2012/11/01(木) 10:09:30.770326デフォルトの名無しさん
2012/11/01(木) 12:46:14.180327デフォルトの名無しさん
2012/11/01(木) 19:36:13.95無償こわいよ無償
0328デフォルトの名無しさん
2012/11/01(木) 21:08:01.72想定する環境だと、この辺がネック
linuxやunixでの古典ツールの動作の微妙な違い
客先常駐時にrubyやpythonの処理系を用意できるか
新しい組込み機器の処理系がcコンパイラしか用意されない
0329デフォルトの名無しさん
2012/11/01(木) 21:14:52.620330デフォルトの名無しさん
2012/11/01(木) 21:18:58.210331デフォルトの名無しさん
2012/11/01(木) 21:24:06.280332デフォルトの名無しさん
2012/11/01(木) 21:33:05.70最近のUnix系だとPerlは入っているだろう。
CPANがないと楽できないけれど。
0333デフォルトの名無しさん
2012/11/01(木) 21:33:23.91色々選べる環境で仕事してる奴らも世の中に沢山いるわけよ
0334デフォルトの名無しさん
2012/11/01(木) 21:34:33.19Node.jsは入ってないけど
0335デフォルトの名無しさん
2012/11/01(木) 22:06:36.94この手のものって、どの言語で作られてんの?
0336デフォルトの名無しさん
2012/11/01(木) 22:10:52.450337デフォルトの名無しさん
2012/11/01(木) 23:14:07.65だからといって、いい歳こいた誰かの思惑通りに動いているわけでもない
人間以外の要因で色々決まってしまうことが多い
0338デフォルトの名無しさん
2012/11/01(木) 23:46:18.88とは言えsh+sed+awkくらいの用途なら標準ライブラリだけで割と何とかならね?
0339デフォルトの名無しさん
2012/11/02(金) 03:21:56.10政治的な層と経済的な層ですね。わかります。
0340デフォルトの名無しさん
2012/11/02(金) 08:42:08.96人に騙されたくないなら人文系の層から離れてください
0341デフォルトの名無しさん
2012/11/03(土) 11:41:30.74死ねゴミ共がw
死ねゴミ共がw
死ねゴミ共がw
0342デフォルトの名無しさん
2012/11/03(土) 16:41:54.17陸那比転職記事でソシャゲ屋へのって随分と適当なこと書いてねぇ?
求職中のニートでも、内容に何処か違和感覚えるレベルの記事。
俺、技術的な詳細について全く分からないけれど、
あの記事の内容は技術的な詳細なんて全く分かってない転職者に向けて、
技術的な詳細の分かってない記者が転職市場の活性化の為だけに書いたものだと思うの
0343デフォルトの名無しさん
2012/11/03(土) 23:37:33.080344デフォルトの名無しさん
2012/11/04(日) 01:06:11.54修造 「ちょっとbワって、今・・=E何て言った?=@おいPython2!今何ていった!?『メジャーアップデートしたい!?』」
修造 「メジャーアップデートとか言ってる間はずっとダメなんだよ!」
修造 「使えよ!もっと2.7使えよ!」
Python2「もうマイナーアップデートない・・・」
修造 「無い事無い、無いなんて事は無い!どこかにあるはず、探そうよ!」
Python2「・・・2.8・・・2.9・・・」
修造 「ほらあるじゃない! ほらみろ!あるじゃないか!」
Python2「上げるぞ・・・」
修造 「そうだ上げろ!」
Python2「上げるぞ!!!!」
修造 「もっと!」
Python2「マイナーバージョン上げるぞ!!!!!!!!!」
Guiod 「はい終了した!!もうPython2のメンテナンス終了したよ!!!!」
0345デフォルトの名無しさん
2012/11/04(日) 01:18:31.380346デフォルトの名無しさん
2012/11/04(日) 01:21:32.920347デフォルトの名無しさん
2012/11/04(日) 04:38:21.420348デフォルトの名無しさん
2012/11/04(日) 04:51:19.300349デフォルトの名無しさん
2012/11/04(日) 21:36:46.43マイナーアップデートはないけど、メンテナンスは継続してる
2.7は2015まで保守される予定
0350デフォルトの名無しさん
2012/11/04(日) 21:56:22.15もとからgdgdとかそういうつっこみは受け付けない
0351デフォルトの名無しさん
2012/11/05(月) 02:07:45.34http://twitter.com/makotokuwata
なんで無駄に好戦的なんだろう
いい歳こいてトゲのある言葉まき散らして、コミュニティの空気悪くして、ほんと迷惑
0352デフォルトの名無しさん
2012/11/05(月) 02:37:58.220353デフォルトの名無しさん
2012/11/05(月) 06:31:41.33「Perlしかできない」って言われて怒っちゃったyappoさん2chで反撃なんて最高にダサイですね
0354デフォルトの名無しさん
2012/11/05(月) 07:50:47.05PHPとPerl(CGI)の使い方について教えて下さい
↑のURLは知恵袋で質問したものです
知恵コイン500枚でお得だよ¥^−^¥
__
/ _, ,_ヽ ┏┓
/ (●) ..(● ┏┛
| (p_q)i ・
| ,-|=‐| i.
> | |く
_/ ,/|⌒)|、,ヽ_
ヽ、_/|~ヽ、|__) \
_ノ___ノ
( _
ヽ__ /◎/
) /ロ/
(___ノ ̄
0355デフォルトの名無しさん
2012/11/05(月) 13:28:55.18死ねゴミ共がw
0356デフォルトの名無しさん
2012/11/05(月) 18:17:35.09窓の杜 - 【NEWS】Microsoft、「Python Tools for Visual Studio」v1.5を正式公開
http://www.forest.impress.co.jp/docs/news/20121105_570958.html
http://www.forest.impress.co.jp/img/wf/docs/570/958/image3.jpg
http://www.forest.impress.co.jp/img/wf/docs/570/958/image2.jpg
0357デフォルトの名無しさん
2012/11/07(水) 05:01:28.83思春期特有の精神性でないとプログラマなんて続けられないだろうし、
声が大きい人のおかげで発言しやすくなるだろから放っておけば?
しかし、2chの名無しならともかくtwitterアカウントで発言なんて頭沸いてる
0358デフォルトの名無しさん
2012/11/08(木) 21:07:33.720359デフォルトの名無しさん
2012/11/08(木) 22:43:40.15昇順、重複無し、整数要素の配列が与えられたとき、
連番部分を括り出す処理をどう書く? 括り出し部分の表現は自由。
例: [1, 3, 4, 5, 7, 9, 10, 11, 13] #=> [1, 3..5, 7, 9..11, 13]
0360デフォルトの名無しさん
2012/11/08(木) 23:06:57.730361デフォルトの名無しさん
2012/11/09(金) 00:17:07.94Python
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]]
0362デフォルトの名無しさん
2012/11/09(金) 02:02:43.30パターンマッチのある言語だともっと整理できるかも
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]
0363デフォルトの名無しさん
2012/11/09(金) 02:56:18.35a = [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]]
0364デフォルトの名無しさん
2012/11/09(金) 08:44:27.24val 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)))
0365デフォルトの名無しさん
2012/11/09(金) 08:59:26.57https://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]}
0366デフォルトの名無しさん
2012/11/09(金) 10:43:06.82Object compile: 'key'. "前準備"
| result |
result := #(-1 1 2 3 5 6 7 9 11 13 14 15 17) inject: OrderedCollection new into: [:coln :each |
(coln notEmpty and: [coln last value + 1 = each])
ifTrue: [each := coln removeLast key -> each]. coln, {each}].
result asArray "=> {-1 . 1->3 . 5->7 . 9 . 11 . 13->15 . 17} "
0367デフォルトの名無しさん
2012/11/09(金) 12:13:52.25use 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) }
);
0368デフォルトの名無しさん
2012/11/09(金) 13:10:59.45class 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]
0369デフォルトの名無しさん
2012/11/09(金) 13:24:52.120370デフォルトの名無しさん
2012/11/09(金) 13:38:02.14[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]]
0371デフォルトの名無しさん
2012/11/09(金) 13:40:03.68ユーザー居なくなること見えてるのに、この先どうなるんだろ
0372デフォルトの名無しさん
2012/11/09(金) 14:31:47.60C以降の高級言語は何度もリセットしてやり直している
この先もそれをくりかえすだけ
0373デフォルトの名無しさん
2012/11/09(金) 14:35:01.07f 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]
0374373
2012/11/09(金) 14:40:35.32f 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]
0375デフォルトの名無しさん
2012/11/09(金) 14:45:03.13my @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);
0376デフォルトの名無しさん
2012/11/09(金) 16:34:31.93from 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))]
0377デフォルトの名無しさん
2012/11/09(金) 17:38:19.15lst = {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}}
0378デフォルトの名無しさん
2012/11/09(金) 18:27:08.97×[[1], [3, 4, 5], [7], [9, 10, 11], [13]]
○[1, (3, 5), 7, (9, 11), 13]
0379377
2012/11/09(金) 18:48:05.63ノシ
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}
0380デフォルトの名無しさん
2012/11/09(金) 19:59:45.62誰が、いつ地雷を踏むか分からないだろ
まずまず安心して使えそうなのってPHPとjavascriptまでじゃね?
0381デフォルトの名無しさん
2012/11/09(金) 20:33:20.14サーバの中ではlibuvってのを使えばいいんだろ?
0382デフォルトの名無しさん
2012/11/09(金) 20:51:37.91ここ笑うところ?
0383デフォルトの名無しさん
2012/11/09(金) 21:42:32.63g 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]
0384デフォルトの名無しさん
2012/11/09(金) 21:46:03.75>>370を改造してみた
コードが少し長くなったので、以下を参照
http://play.island.ac/codepaste/code?id=28
0385デフォルトの名無しさん
2012/11/09(金) 22:14:05.82その発想は無かったわ
スマートだしPythonらしくていいな
0386デフォルトの名無しさん
2012/11/09(金) 23:02:30.05重複無しなので 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
0387デフォルトの名無しさん
2012/11/10(土) 00:01:04.88use 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;
0388デフォルトの名無しさん
2012/11/10(土) 00:27:04.32シンプルで美しいコードだと思うけど、以下の点が気になったので改変(改悪?)してみる
(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]]
0390デフォルトの名無しさん
2012/11/10(土) 06:04:13.80レシーバを使いまわすには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
0391デフォルトの名無しさん
2012/11/10(土) 10:49:30.55c の next は無用かと。これが>>376のruby的な最終到達点?
[1,3,4,5,7,9,10,11,13].group_by.with_index{ |n,c| n-c }.values
0392デフォルトの名無しさん
2012/11/10(土) 11:17:03.45f 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)]
0393デフォルトの名無しさん
2012/11/10(土) 11:38:06.30http://www.ruby-lang.org/ja/news/2012/11/09/ruby19-hashdos-cve-2012-5371
0394デフォルトの名無しさん
2012/11/10(土) 12:00:46.03ブロック変数を本来から一つ増やせばインデックスとれるって仕様にすれば
[1,3,4,5,7,9,10,11,13].group_by{|n,i|n-i}.values
で済むのにeach_indexとかむやみに増設しちゃうmatzってセンス無いよね
0395デフォルトの名無しさん
2012/11/10(土) 12:12:10.47R
(function(x=c(1,3,4,5,7,9,10,11,13))split(x,cumsum(c(0,diff(x) > 1))))()
0396デフォルトの名無しさん
2012/11/10(土) 13:05:10.49同じ機能のメソッドが二個も三個もあるのが常で
似た機能ならもっと沢山あるのが普通の Ruby では
似た機能だから、これで代用できるから、でそれらを纏めちゃうのは違うんでない
0397デフォルトの名無しさん
2012/11/10(土) 13:28:05.78PowerShellだとglobalが邪魔っ気だった
1,3,4,5,7,9,10,11,13 | group { $_-$global:i++ }
0398デフォルトの名無しさん
2012/11/10(土) 13:31:40.09ダックタイピングの弱点じゃないかなね?
Arrayとはまったく関係無いクラスがgroup_byを実装してる可能性があるから、
むやみにメソッドの仕様を拡張できない
0399デフォルトの名無しさん
2012/11/10(土) 14:59:24.81group_by は Enumerable のメソッドなんだが…(´・ω・`)
0400デフォルトの名無しさん
2012/11/10(土) 15:09:08.45Enumerableが提供するメソッドをEnumerableをインクルードしないで実装してもよいよね?
ダックタイピングなんだから
0401デフォルトの名無しさん
2012/11/10(土) 15:18:11.760402デフォルトの名無しさん
2012/11/10(土) 16:02:46.30実装するのは勝手だが、ダックに使っても問題ないように実装するよね?
ダックタイピングなんだから
0403デフォルトの名無しさん
2012/11/10(土) 16:15:01.57預言者じゃないんだから、オリジナルのメソッドの仕様変更に対応できるわけはないだろw
0404デフォルトの名無しさん
2012/11/10(土) 17:00:53.24お前みたいに、新しい名前を増設したらセンス無いと思ってるやつが
名前が同じで仕様だけが変わる紛らわしいものを作ってるのかな
0405デフォルトの名無しさん
2012/11/10(土) 19:43:55.21仕様変更で動かなくなるコードがまったく思いつかないんだが…(´・ω・`)
0406デフォルトの名無しさん
2012/11/10(土) 21:20:09.83こんなのもあるからダメじゃね?
[[1],[2,3],[5,6,nil]].map{|x,y,z|[x,y,z]}
=> [[1, nil, nil], [2, 3, nil], [5, 6, nil]]
0407デフォルトの名無しさん
2012/11/10(土) 21:36:20.06(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が長いから短く
ってならわかるんだけど
0408デフォルトの名無しさん
2012/11/10(土) 22:15:00.63Common 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))
0409デフォルトの名無しさん
2012/11/10(土) 22:28:00.55それは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]]
0410デフォルトの名無しさん
2012/11/10(土) 23:06:56.97お前がやろうとしてるのは、Enumerableの仕様変更じゃなくて、
rubyのメソッド呼び出しの基本的仕様の変更
影響範囲がでかすぎる
0411デフォルトの名無しさん
2012/11/11(日) 02:19:01.45メソッドはアリティ守ってブロックは自由とかこのレベルでもう破綻してる
0412デフォルトの名無しさん
2012/11/11(日) 05:05:38.430413デフォルトの名無しさん
2012/11/11(日) 09:02:01.950414デフォルトの名無しさん
2012/11/11(日) 12:55:45.41group_by は Hash を返すようだけど、公式以外の実装でも問題なし?
公式マニュアルでキー生成順と確認したけど、他の実装が気になる点。一応 jruby は正常動作確認した。
細かい点だけど with_index なので、引数も合わせた方が良いかもしれない。 |n,i|
その前に {|n,c| n-c } で &:- …は使えなかったけど、
何か (map - '(1 2 3) '(4 5 6)) #=> (-3 -3 -3) 的な代替手段はないかな?
0415デフォルトの名無しさん
2012/11/11(日) 17:23:40.84何やってるのか分からない
パズルが得意なやつじゃないと
そもそもGroupbyの動作を知ってるやつが少ない
俺にはとても奇麗だとは思えん
0416デフォルトの名無しさん
2012/11/11(日) 18:22:34.38それはキミが手続き脳だからだろ。
それとも「連番」を「インデクスとの差が一定」と
捉えられないバカなのか。
0417デフォルトの名無しさん
2012/11/11(日) 18:27:40.580418デフォルトの名無しさん
2012/11/11(日) 18:28:27.450419デフォルトの名無しさん
2012/11/11(日) 18:47:33.680420デフォルトの名無しさん
2012/11/11(日) 19:09:40.73#!/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でもかまさなきゃだめかな
……それ以前の問題かもしれないけど
0421デフォルトの名無しさん
2012/11/11(日) 19:24:49.07> その前に {|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]]
0422デフォルトの名無しさん
2012/11/11(日) 19:38:54.44なかなかかわいい
0423デフォルトの名無しさん
2012/11/11(日) 19:40:40.900424デフォルトの名無しさん
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つ減らせばいい。
0425デフォルトの名無しさん
2012/11/11(日) 20:37:38.80while(defined(my $i = shift @a)) {
こうしてくれ。
0426デフォルトの名無しさん
2012/11/11(日) 20:38:47.320427デフォルトの名無しさん
2012/11/11(日) 20:39:51.00>>376のコード読めばああなるほどと分かるんだけど
真っ先に数列の性質に着目してコード化して見せた>>376はやっぱりすごいよ
>>376と、コードを見て初めて気づく人と、コードを見ても分からない人の間には
それぞれ超えられない壁がある
0428デフォルトの名無しさん
2012/11/11(日) 20:41:55.13あの関数が使えるって思いついただけだと思う。
0429デフォルトの名無しさん
2012/11/11(日) 20:50:53.94あまつさえデフォで遅くて読みにくいことで定評あるPerlで
『リーダブルコード』で駄目な例に出てきそうなコメントバリバリのコードひっさげて
「リーダブルコード的にはダメなコードばかり」「速度もこっちが早い」とかどんなギャグかと
>>428
くやしいのう くやしいのう
0430デフォルトの名無しさん
2012/11/11(日) 20:59:03.35読めよw
リーダブルコードより
8章 巨大な式を分割する
短く書こうとして逆に分かりにくくなっていたことについての1文。
どうして1行で書こうとしたのだろう? そのときは「オレは頭がいい」と思っていたのだ。
ロジックを簡潔なコードに落とし込むことに一種の喜びを感じていた。
この気持ちはみんなにも理解してもらえると思う。まるでパズルを解いているような感じだ。
仕事は楽しくやりたいからね。問題は、これがコードのスピードバンプになっていたことだ。
(P.102)
※スピードバンプ:ここではコードを読む速度を遅くさせるものという意味
0431デフォルトの名無しさん
2012/11/11(日) 20:59:32.04>>376は>>376の着想にPythonの表現力がついてこれてないもどかしさがあるな
0432デフォルトの名無しさん
2012/11/11(日) 21:02:48.13うんうん。頭がいいと思っていたって話だねw
0433デフォルトの名無しさん
2012/11/11(日) 21:03:59.60頭が良ければわかる? わからない奴はついてこなくていい?
なんだろそれは、読むのが困難だって言ってるようなもんだ。
0434デフォルトの名無しさん
2012/11/11(日) 21:11:52.19でも、>>378のような仕様変更があると
全書き換えになる所が弱点
洗練されすぎてて仕様変更に弱い
0435デフォルトの名無しさん
2012/11/11(日) 21:18:10.82プログラム業界からお引き取りしてもらったほうが
「お互い」幸せに思えるが
0436デフォルトの名無しさん
2012/11/11(日) 21:20:40.691から10までの数を二組の集合x,yに分けたとき
・sum(x) > sum(y)
・product(x) < product(y)
を満たすx,yを全て出力せよ(出力の表現は自由)
0437デフォルトの名無しさん
2012/11/11(日) 21:23:49.31そりゃgroupbyを使えばだろ?
例えば数列中から連続している区間を取り出すhogehogeって関数があったとしたら
(hogehoge ・・・ 数値が連続していればその区間の開始と終わりを、そうでなければ単一の値をクロージャに渡す)
print join(', ', hogehoge { @_ > 1 ? "$_[0]..$_[1]" : $_[0] } @a)
これぐらい可読性よく書けるよ。
0438デフォルトの名無しさん
2012/11/11(日) 21:24:26.33使えたーありがとう
>>378 対応は、こんな感じかな
.map{|_,e| e.length > 1 ? "#{e.first}..#{e.last}" : e.first.to_s }.join(", ")
0439デフォルトの名無しさん
2012/11/11(日) 21:24:40.49えと、みんながその発想を褒めてる時点で
それが答えなんですが・・・。
0440デフォルトの名無しさん
2012/11/11(日) 21:31:19.56普通に「読める」コードだけど自分では思いつかなかったから褒めてるんだろ
読めるコードでも自分で普通に思いついて書かないようなコードはダメだってか?
どんなファッショだよ
0441デフォルトの名無しさん
2012/11/11(日) 21:35:59.89ためしにgroupbyのコードを
書いてみてよ。
0442デフォルトの名無しさん
2012/11/11(日) 21:45:43.76Mathematica
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}}}
0443デフォルトの名無しさん
2012/11/11(日) 21:50:35.02fold等よりよほど用途が限定されていて、関数の名前だけでグループ分けすると
いうことがすぐにわかるgroupbyがダメとか、意味が分からなすぎる
可読性でゴネてるやつは、
(x + 1) & ~1
のようなCのコードの意味が分からないからといって
if (x % 2 == 1) ++x
のように書き直して簡潔さを犠牲にして分岐命令を増やすようなタイプだろうか?
本当に業界を去って頂いた方がお互いのためかもな
0444デフォルトの名無しさん
2012/11/11(日) 21:50:38.23Haskellだけど
groupby _ [] = []
groupby f (x:xs) = (x:ys) : groupby f zs
where (ys,zs) = span ((==f x).f) xs
0445デフォルトの名無しさん
2012/11/11(日) 21:54:02.72ライブラリがどれだけ充実しているかにあるというのは
知ってはならない真実なんだろうなぁ。
0446デフォルトの名無しさん
2012/11/11(日) 21:55:09.66どんな言語でもgroupby相当の物を
持ってくるなりして使えば
同じように書けそうな気がするね。
0447デフォルトの名無しさん
2012/11/11(日) 21:56:53.99Haskell
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]
0448デフォルトの名無しさん
2012/11/11(日) 21:58:38.71え? こういう問題ってライブラリは使わないで
基礎的な命令だけで解くことが目的の
アルゴリズムの問題なんじゃないの?
言語の標準(?)ライブラリ自慢になってちゃ
面白く無いと思うけど。
0449デフォルトの名無しさん
2012/11/11(日) 21:59:44.260450デフォルトの名無しさん
2012/11/11(日) 22:01:53.880451デフォルトの名無しさん
2012/11/11(日) 22:03:50.53上の式は実行効率の良さはともかく簡潔だとは思わんな・・・
下の文より分かりづらい
0452デフォルトの名無しさん
2012/11/11(日) 22:05:08.72俺だけ出しても仕方あるまいよ。君頭いいね
0453デフォルトの名無しさん
2012/11/11(日) 22:05:18.25「基礎的な命令」を正確に定義して
0454デフォルトの名無しさん
2012/11/11(日) 22:06:53.71関数、メソッドではないもの。
0455デフォルトの名無しさん
2012/11/11(日) 22:08:03.71全てがメッセージパッシングなオブジェクト指向言語はどうしたら
0456デフォルトの名無しさん
2012/11/11(日) 22:09:26.71何でもありだから言語固有のコードが出て来て面白いんだろが
0457デフォルトの名無しさん
2012/11/11(日) 22:10:50.24ifもループも配列も
全部、関数やメソッドなのかい?
なら参加権なしってことだ。
0458デフォルトの名無しさん
2012/11/11(日) 22:11:59.120459デフォルトの名無しさん
2012/11/11(日) 22:13:01.51いや、今回の場合ただの関数があるかないか自慢になってるから。
よし、こうしよう。他の言語にも
同等の関数はあるという前提で
いろんな言語で実装してみるというのはどうだ?
0460デフォルトの名無しさん
2012/11/11(日) 22:14:09.26ライブラリ自慢になってるとか馬鹿らしいよ
0461デフォルトの名無しさん
2012/11/11(日) 22:20:42.02spanを実装しなよw
0462デフォルトの名無しさん
2012/11/11(日) 22:23:58.080463デフォルトの名無しさん
2012/11/11(日) 22:26:58.07span f xs = (takeWhile f xs, dropWhile f xs)
0464デフォルトの名無しさん
2012/11/11(日) 22:30:33.93from webbrowser import *
open_new_tab("http://www.youtube.com/watch?v=anwy2MPT5RE&t=1m00s")
0465デフォルトの名無しさん
2012/11/11(日) 22:32:46.11a = [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)])
0466デフォルトの名無しさん
2012/11/11(日) 22:33:25.23それは言語次第だと思うけど、どっちにしろ全書き換えってこたないと思う
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
0467デフォルトの名無しさん
2012/11/11(日) 22:39:19.91書いた376が賞賛されてることに気付いた方がいい
だからライブラリ自慢なんて的外れ
0468デフォルトの名無しさん
2012/11/11(日) 22:39:33.79その後形式を変換すればいいだけ
一般論として形式AからBに変換するコードを足すと、最初からBを出力するつもりの
コードよりは長くなるかもしれないが、どういう形式を選んでもそういうことは有り得る
>>434はどういう根拠で>>376が仕様変更に弱いと思ったんだろう
0470デフォルトの名無しさん
2012/11/11(日) 22:54:03.90# >>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]
0471デフォルトの名無しさん
2012/11/11(日) 22:54:31.08Squeak 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
0472434
2012/11/11(日) 22:57:10.43こうじゃないの?
converted = [group[0] if len(group) == 1 else (group[0],group[-1]) for group in groups]
0473デフォルトの名無しさん
2012/11/11(日) 23:05:43.80ああ、全部出力しちゃいけないのか…
題意をよく読んでなかった、ごめん
0474デフォルトの名無しさん
2012/11/11(日) 23:14:19.700475デフォルトの名無しさん
2012/11/11(日) 23:16:23.610476デフォルトの名無しさん
2012/11/11(日) 23:23:23.69xが10個とも持ってる場合とかも含めた総当りをかっこよく書いてちょってことでいいんかね
0477デフォルトの名無しさん
2012/11/11(日) 23:26:23.25[[1, 5], [3, 4, 5, 7], [9, 10, 11], [13]]
ではなく、
[[1], [3, 4, 5], [5], [7], [9, 10, 11], [13]]
が返ってくるところ。
0478デフォルトの名無しさん
2012/11/11(日) 23:26:50.35正解。
そう、当たり。
0479デフォルトの名無しさん
2012/11/11(日) 23:28:58.08お題で重複はないって条件にあるんでー
0480デフォルトの名無しさん
2012/11/11(日) 23:30:00.63重複があったらダメなコードのが少なくね?
0481デフォルトの名無しさん
2012/11/11(日) 23:55:40.24それって、どっちかっていうとPythonのgroupbyの仕様バグくさいけどな。
0482デフォルトの名無しさん
2012/11/12(月) 00:07:09.83無限列かもしれないんだから
0483デフォルトの名無しさん
2012/11/12(月) 00:16:09.94そもそも仕様に「SQLのと違う」って断わり書き入れるくらいなら、名前変えろよと
Python作り手の考えることはいっけん理屈が通っているようでけっきょく抜けとる
0484デフォルトの名無しさん
2012/11/12(月) 00:18:12.550485デフォルトの名無しさん
2012/11/12(月) 04:08:21.27そういう、「思いついた俺すげえ。」「分かる俺すげえ」みたいなのは
自己満足にはいいけど、現実世界ではある程度は万人に分かることが重要じゃないかな
0486デフォルトの名無しさん
2012/11/12(月) 04:20:03.90雲行きが怪しくなってきたなあ
結局、groupby自体、どういう仕様なのかはっきりしないものであって
人によって解釈が異なるってことか
ますます可読性に難があることがあらわになってきたね
groupbyのような単純な関数で文句を言うな、可読性に問題はない
とか言ってた連中大恥じゃないかw
0487デフォルトの名無しさん
2012/11/12(月) 04:49:55.53さすがに>>376程度も理解できんのは業界から去って欲しくね?
0488デフォルトの名無しさん
2012/11/12(月) 05:07:44.98その機能を考えて全員一致するなら
わかりやすい関数だって見とめてやるよ
0489デフォルトの名無しさん
2012/11/12(月) 07:32:41.52ちなみに未だになんでnextが必要なのかわからない
俺は去ることになりそうだ
pythonを知ってるから内包表記は理解できたが、
まずその段階でさる人が多そうだ
99%は去ることになると思う
0490デフォルトの名無しさん
2012/11/12(月) 07:42:15.51「分かる俺すげええええ」して、異を唱える他の人を「どうせ分からないんだろう」とバカにして
悦に入っていたやつも、ほとんどは>>477まで想定して言ってたわけじゃないんだろうなw
0491デフォルトの名無しさん
2012/11/12(月) 07:54:33.62count()の戻り値はジェネレータだから
>>488
全部の言語で仕様が一致する必要があるの?
mapですら違うよ?
0492デフォルトの名無しさん
2012/11/12(月) 08:04:06.37SQLの方のgroupbyを想像する人の方が多数派であると予想されること
0493デフォルトの名無しさん
2012/11/12(月) 08:07:38.87一番恥ずかしいのは「groupby書いてみろよ(書けないだろ?ww)」的な事書いて
速攻でレスされた441だと思います
0494デフォルトの名無しさん
2012/11/12(月) 08:09:07.560495デフォルトの名無しさん
2012/11/12(月) 08:10:57.780496デフォルトの名無しさん
2012/11/12(月) 08:18:16.55複数のfor式、フィルター式はやめましょう。」的なのがあったけど、
groupby以前にまずこれに違反してるな
内包表記とgroupbyとlambda組み合わせちゃってるから
0497デフォルトの名無しさん
2012/11/12(月) 08:19:48.30思いつきで言ってるでしょ
戻り値も無限列の可能性がある(だから戻り値もジェネレータ)なのに、
どうやってまとめるの?
0498デフォルトの名無しさん
2012/11/12(月) 08:23:11.95とはっきり言ってるんだよね。
もちろん376みたいなのはNGでしょ。
やっぱり、虚勢を張りたい気持ちは分かるが、謙虚にならねばならない。
Googlerのように。
0499デフォルトの名無しさん
2012/11/12(月) 08:25:18.98普通に出来そうだけど
何で出来ないのか理解できない
そもそも、理解できたとしてもそういう内部の事情を考慮しないと分からない時点で
分かりにくい
0500デフォルトの名無しさん
2012/11/12(月) 08:39:35.870501デフォルトの名無しさん
2012/11/12(月) 08:41:27.09まあ趣味レベルの仕事であなた一人で仕事を完結させるならいいですが。
0502デフォルトの名無しさん
2012/11/12(月) 08:42:09.190503デフォルトの名無しさん
2012/11/12(月) 09:26:19.180504デフォルトの名無しさん
2012/11/12(月) 10:42:15.84>>491が言ってるようにcount()を含めたitertoolsの関数はジェネレータを返す
next()はジェネレータの次の値を取り出す、ただそれだけの関数
JavaのIteratorインタフェースのnext()メソッドとやってることは等価だし
C++のSTLを知ってればiteratorやstd::advance()のようなものを
知っているはず
99%は言い過ぎ、バカが自分だけじゃないと主張して安心したいだけにしか見えない
0505デフォルトの名無しさん
2012/11/12(月) 11:07:46.81このスレで最も複雑なのはgroupbyでも内包表記でもない
日本語とかコミュ能は規約で色々禁止した方が生産性上がるんじゃねぇの
0506デフォルトの名無しさん
2012/11/12(月) 11:34:44.57本来のSQL的なgroupby程度すら直感的に理解できないリテラシー不足が大勢いることを
一緒くたにして議論してはいけない
0507デフォルトの名無しさん
2012/11/12(月) 11:40:42.43前後するけど、戻り値もそのキー値の値もジェネレーターなのは
どんなユースケースを想定しているのだろうか?
単純な例で、count()を偶奇でgroupbyする場合だとまったく意味をなさないように思うのだが。
0508デフォルトの名無しさん
2012/11/12(月) 13:22:31.44そういう場合は入力をソートする
>groupby() の操作は Unix の uniq フィルターと似ています。 key 関数の値が変わるたびに
>休止または新しいグループを生成します (このために通常同じ key 関数でソートしておく必要があるのです)。
>この動作は SQL の入力順に関係なく共通の要素を集約する GROUP BY とは違ます。
0509デフォルトの名無しさん
2012/11/12(月) 14:10:27.78count()はソート済みでは?
そもそも聞きたいのは「どうしたらできるか?」ではなく
返値やキーの値がジェネレーターだと「どんなシチュで何が便利なのか?」であって
たとえばキーの種類が増えていくとき、返値がジェネレーターだと便利だよね これは分かる。
でも、既に存在するキーにグループ分けされるはずの要素が新たに現われたとき、
既存のキーの値(ジェネレーター)に追加されるわけではないんだよね。
今の仕様だと、既存のとは別に同じキーのキーと値のペアが作られるだけ
これではほとんど旨味がないと思うんだけど
0510デフォルトの名無しさん
2012/11/12(月) 15:14:42.19groupbyに渡す key関数で ソート
0511デフォルトの名無しさん
2012/11/12(月) 18:18:57.78要素の順序が重要なとき
ランレングス圧縮から
名前,日時,発言 の会話ログ・データが時系列にあって
名前が連続してる時は名前表示をひとつに纏めたいとか、雑多な作業にまで色々と使える
0512デフォルトの名無しさん
2012/11/12(月) 20:30:07.33SQLのgroup byからPythonのgroupby相当は作れない
0513デフォルトの名無しさん
2012/11/12(月) 21:32:01.93>>424の方が良いコードだと感じるの?マジで?
括り出しのロジックと端末への出力の分離すらできてない
最低のコードだと思うんだけど
0514デフォルトの名無しさん
2012/11/12(月) 21:33:28.460515デフォルトの名無しさん
2012/11/12(月) 21:38:55.29@a が未定義
要素に0が含まれてるとその時点でループ終了
0516デフォルトの名無しさん
2012/11/12(月) 21:39:50.74便利メソッドがないという前提で
お前書いてみて。
0517デフォルトの名無しさん
2012/11/12(月) 21:40:34.99> 要素に0が含まれてるとその時点でループ終了
次2つのレスぐらい読めないの?
0518デフォルトの名無しさん
2012/11/12(月) 21:56:45.63>>424はPerlの文法知らないからチンプンカンプンだわw
個人的に駄目プログラマでも分かりやすいと思ったのはこの辺だな
>>363-364 >>374
0519デフォルトの名無しさん
2012/11/12(月) 22:14:25.21端末?を見下すやつってなんなの?アップル信者なの?
0520デフォルトの名無しさん
2012/11/12(月) 22:38:08.780521デフォルトの名無しさん
2012/11/12(月) 22:38:33.77やっぱり変数に型がないと駄目だね
0522デフォルトの名無しさん
2012/11/12(月) 22:44:56.02ターミナル軽視はWindows一辺倒の人に多いかと
0523デフォルトの名無しさん
2012/11/12(月) 22:58:09.93これは>>513に分があるような
0524デフォルトの名無しさん
2012/11/12(月) 23:23:06.730525デフォルトの名無しさん
2012/11/12(月) 23:36:10.73補間してちゃっちゃと改良してやったよ。
間違ってるけどこんな感じで出来るだろ。本質的じゃないことに文句言い過ぎなんだよ
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;
}
}
0526デフォルトの名無しさん
2012/11/12(月) 23:50:58.070527デフォルトの名無しさん
2012/11/12(月) 23:58:05.00分かりやすいな
過度に関数型チックで簡潔にしようとしているのは、処理の流れが複雑なリッチな関数
に頼ることで処理がブラックボックス化し、結果に対する変化が見えない
ことで分かりにくくなっている気がする
0528デフォルトの名無しさん
2012/11/13(火) 00:04:32.31そもそもcount()がジェネレータを返すというのを知らなければ
いくらjavaやSTLに詳しかろうが分からんだろ
0529デフォルトの名無しさん
2012/11/13(火) 00:15:20.16#連続している間は省略する
というソースコードよりも
#連続している間は省略する
#値が2回以上省略されれば
というソースコードの方が分かりやすいのでは?
0530デフォルトの名無しさん
2012/11/13(火) 00:25:07.41my @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;
}
0531デフォルトの名無しさん
2012/11/13(火) 00:27:08.19と五十音表を作りたいのですが
utf8で一気に作る方法ありませんか?
教えてください
0532デフォルトの名無しさん
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]);}
0533デフォルトの名無しさん
2012/11/13(火) 00:33:03.99それは分かりやすさのベクトルが違うと思うよ
「玄関で右曲がって交差点で左曲がって500m直進した右手の建物に入る」って言った方が分かりやすいのか
「自宅から国会議事堂に行く」って言ったほうが分かりやすいのか、そういう違いだと思う
0534デフォルトの名無しさん
2012/11/13(火) 00:35:11.75"あ", "い", "う", "え", "お",
"か", "き", "く", "け", "こ",
"さ", "し", "す", "せ", "そ",
"た", "ち", "つ", "て", "と",
"な", "に", "ぬ", "ね", "の",
"は", "ひ", "ふ", "へ", "ほ",
"ま", "み", "む", "め", "も",
"ら", "り", "る", "れ", "ろ",
"わ", "ゐ", "ゑ", "を", "ん",
"や", "ゆ", "よ");
これ以外で教えてください
0535デフォルトの名無しさん
2012/11/13(火) 00:43:43.80・qw(あ い う え お ...)
・$aiueo[0]="あ"; ....
#動作確認はしてない
0536デフォルトの名無しさん
2012/11/13(火) 00:55:28.05それはどんな言語のどんな関数についても言えることだろう……
0537デフォルトの名無しさん
2012/11/13(火) 00:59:48.96>>513は別に端末を見下しているんじゃなくて、データを返すコードではなく
端末に値を出力するだけのコードは汎用性が皆無であることを問題視してるんだろ
0538デフォルトの名無しさん
2012/11/13(火) 01:06:35.45それってシェルで言うと、
grep $PATTERN file
ですむことを
while read line; do
if expr line : $PATTERN; then
print line
fi
done < file
と書いた方が分かりやすいと言ってるようなもんだよな
0539デフォルトの名無しさん
2012/11/13(火) 01:08:33.31while read line; do
if expr line : $PATTERN; then
print line
fi
done
0540デフォルトの名無しさん
2012/11/13(火) 01:22:42.66毎回next(c)で0が返りそうにしか見えないんだけど
どういうカラクリなんだよ?
あんまりPython知らないからあれだけど
これで業界去らなくちゃいけないのは厳しいわw
0541デフォルトの名無しさん
2012/11/13(火) 01:32:52.70Pythonのデフォルト引数は一度だけ(関数の定義時)にしか評価されない
0542デフォルトの名無しさん
2012/11/13(火) 01:38:09.05何回コールしても、その同じオブジェクトが入ってる
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]
0543デフォルトの名無しさん
2012/11/13(火) 01:56:31.50しかし分かりづらい仕様だな
これ関数型的に考えるなら先にzipして
[(0,1),(1,3),(2,4),...]
てリストを作ってgroupByに渡すべきなんじゃないだろうか?
Pythonだとそれも面倒なのかな?
中途半端に手続きが入ってる感じが余計分かりづらくしている気がする
0544デフォルトの名無しさん
2012/11/13(火) 03:21:41.11真の間の要素を同じグループに纏める関数を手続きで書いた。
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)))
0545デフォルトの名無しさん
2012/11/13(火) 03:36:31.89実態は、よくある処理の汎用的な部分を抽出し、再利用しやすくしたものなので、
紐解いてみればそんなに難しくないよ。ハッシュを使った実装だとこんな感じ
(テストはしてない。注意インデント全角です)
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 }
0546デフォルトの名無しさん
2012/11/13(火) 03:39:30.11式単位での部品の再利用性。同様の処理を書くのに差分のみのコーディングで済むので、
バグが入り込む余地が比較的少なく、生産性・保守性も優れてる所にあります。=>プログラマの負担軽減に繋がる
0547デフォルトの名無しさん
2012/11/13(火) 04:54:10.500548デフォルトの名無しさん
2012/11/13(火) 05:24:10.76ただ、最適化されたコードではないから
遅くなるんだよね。
二回もループして一旦別配列を作ったりするから。
0549デフォルトの名無しさん
2012/11/13(火) 05:38:57.44バグの軽減につながるというのは眉唾
何をやっているのか理解に苦しむ人が続出し、pythonジェネレータや
groupbyの分かりにくさや曖昧さを露呈した
pythonやrubyでのgroupbyに慣れた人が
sql型のgroupbyを持つ言語でバグを作り込みそうだ
0550デフォルトの名無しさん
2012/11/13(火) 06:09:13.600551デフォルトの名無しさん
2012/11/13(火) 06:24:01.71C++で手続き型丸出しの書き方の人が多いという現実がある
関数的な書き方が生産性が高いというのは幻想だと思う
0552デフォルトの名無しさん
2012/11/13(火) 06:57:41.07そこまで出来ればあとはアレンジだけだと思うがなあ
入力を即値→標準入力から読ませるに変えるのもLLは1〜2行で済んだりするし
0553デフォルトの名無しさん
2012/11/13(火) 07:21:13.61見本を見せてやると言わんばかりに貼られたコードだからねぇ
ああいうコードにダメさを感じないPGって
MVCとかも本当には理解してなさそう
0554デフォルトの名無しさん
2012/11/13(火) 07:27:02.64>>363-364 >>374 あたりは読み易いという意見もあるけど?
0555デフォルトの名無しさん
2012/11/13(火) 07:34:13.78zipは関数型では良いけどオブジェクト指向では微妙だよな
二つのコレクションのどっちがレシーバになるべきか迷う
0556デフォルトの名無しさん
2012/11/13(火) 07:54:47.04でも結局>>525や>>530と同じようなコードなんだし
本質から離れた揚げ足取りで横やりを入れてる感じは否めない
0557デフォルトの名無しさん
2012/11/13(火) 08:06:02.67Ruby使いだけど
その点ではPythonみたいな関数タイプもいいなと思う
zip(列挙型1,列挙型2),...
Rubyだと
列挙型1.zip(列挙型2,...)
結果の要素数がレシーバーに合わされるっていうのがわかりやすいともいえるけど
Pythonのような
全部のなかで要素数が最小のや、最大のにあわせたzipも欲しいところ
0558デフォルトの名無しさん
2012/11/13(火) 08:21:15.36ロジックがIOと分離されてないとこにケチ付けられてるのに
ロジックが同じだから大差無い?馬鹿すぎて目眩がする
0559デフォルトの名無しさん
2012/11/13(火) 08:25:40.270560デフォルトの名無しさん
2012/11/13(火) 08:41:16.14a = [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]]
0561デフォルトの名無しさん
2012/11/13(火) 09:50:24.82トイプログラムでなければ進捗表示とかロギングとか色々要求が出てくるし
0562デフォルトの名無しさん
2012/11/13(火) 11:13:46.130563デフォルトの名無しさん
2012/11/13(火) 12:48:06.700564デフォルトの名無しさん
2012/11/13(火) 20:27:14.67ジェネレータや遅延リストが役立つよ
0565デフォルトの名無しさん
2012/11/13(火) 22:07:57.71後者はもっと違う気がする
喩えるなら、「A君が自宅から国会議事堂に行くときのように、B君の自宅からホワイトハウスに行くんだよ。わかった?」
って言ってる感じ
0566デフォルトの名無しさん
2012/11/13(火) 22:28:00.31どうも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]
こんな言語いかにもありそうなんだがな
ここまで簡潔なのはなぜか無い
0567デフォルトの名無しさん
2012/11/13(火) 22:44:37.04そんな気持ち悪い言語あってたまるか
0568デフォルトの名無しさん
2012/11/13(火) 22:52:52.270569デフォルトの名無しさん
2012/11/13(火) 22:58:07.49想像力のない奴らめ
aはこのスレで流行のジェネレータで、単にaと書くのはa.valueの
省略形じゃ
わかったか愚民どもめ
0570デフォルトの名無しさん
2012/11/13(火) 23:02:30.900571デフォルトの名無しさん
2012/11/13(火) 23:10:42.96PostgreSQLでいう、シーケンスみたいなもんだろ。
呼び出すごとに値を返す。
0572デフォルトの名無しさん
2012/11/13(火) 23:12:35.46> aはこのスレで流行のジェネレータで、単にaと書くのはa.valueの
> 省略形じゃ
馬鹿すぎるwwwwwwwwwww
0573デフォルトの名無しさん
2012/11/13(火) 23:12:54.45相手は死ぬ
そういう年頃があってもいいじゃない
0574デフォルトの名無しさん
2012/11/13(火) 23:14:00.82お前、Pythonごときと俺の最強言語が一緒だと思うなよ?
0575デフォルトの名無しさん
2012/11/14(水) 00:00:17.621. 円周率を小数点以下1000桁まで求めるコードを組み
2. その結果を用いて、小数点以下に列ぶ数字の出現数順に並べて出力せよ
1は書き下ろしはもちろん、ライブラリを使っても1000桁のコピペでも構わないがコードとして示すこと。
参考:http://mail2.nara-edu.ac.jp/~asait/c_program/sample0/pi.htm
2の出力結果も示すこと。出現数が多い順に並んでいて出現数が分かれば形式は自由
できれば、1レス以内に収まる簡潔なコードが望ましいが、適宜コード貼り付けサイトも活用されたし
0576デフォルトの名無しさん
2012/11/14(水) 00:04:14.26できた
0577デフォルトの名無しさん
2012/11/14(水) 01:11:29.55require '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]]
全部で一行のメソッドチェーンにするのもアレなんで分割した
0578デフォルトの名無しさん
2012/11/14(水) 01:48:56.79意外と簡単な処理で数万桁くらいまでなら求められるんですね。びっくり。
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}
0580デフォルトの名無しさん
2012/11/14(水) 12:40:42.12”小数点以下に列ぶ数字の...”って云っているので、含めない方が正解か?
0581デフォルトの名無しさん
2012/11/14(水) 13:00:16.389 の出現数が違うのはなぜだろう
0582デフォルトの名無しさん
2012/11/14(水) 13:01:33.400583デフォルトの名無しさん
2012/11/14(水) 13:04:29.080584デフォルトの名無しさん
2012/11/14(水) 13:06:13.600585デフォルトの名無しさん
2012/11/14(水) 14:17:52.77Out[1]= {93, 116, 103, 103, 93, 97, 94, 95, 101, 106}
Mathematicaで3.を含んで小数点以下1000桁
0586デフォルトの名無しさん
2012/11/14(水) 14:35:12.11http://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]
0587デフォルトの名無しさん
2012/11/14(水) 21:01:39.75import 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)]
0588デフォルトの名無しさん
2012/11/14(水) 21:08:06.40require '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]}
0589デフォルトの名無しさん
2012/11/14(水) 21:33:19.81XMPP::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>
0590デフォルトの名無しさん
2012/11/14(水) 23:41:47.68Common 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))))
0591デフォルトの名無しさん
2012/11/15(木) 20:18:23.30http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1497248299
0592デフォルトの名無しさん
2012/11/15(木) 23:25:33.52JavaとC#で一番簡潔なコードは
1000桁コピペだった件
やっぱりLLの足下にも及ばなかったよ……
0593デフォルトの名無しさん
2012/11/16(金) 01:25:24.22威張られても・・・
0594デフォルトの名無しさん
2012/11/16(金) 07:52:55.12LLの方が言語だけじゃなくプログラマの質も高い
0595デフォルトの名無しさん
2012/11/16(金) 08:06:02.88言語に下駄履かせてもらってるんだけど
0596デフォルトの名無しさん
2012/11/16(金) 08:16:15.290597デフォルトの名無しさん
2012/11/16(金) 08:29:35.26低い下駄だろw
0598デフォルトの名無しさん
2012/11/16(金) 11:13:18.400599デフォルトの名無しさん
2012/11/16(金) 20:21:03.40そして、政治的理由とトレンドを考えてsharpkitで遊ぼうとしたけどもインストーラーが動かない
>>594
冗談抜きでLLとか言ってる人たちがcのプリミティブな配列で多倍長整数やhashを実装するところが想像できない
だいたい、javaより重要なものがない
0600デフォルトの名無しさん
2012/11/16(金) 20:32:10.22c/c++プログラマと〜使い()では、手段と目的が違うからな
0601デフォルトの名無しさん
2012/11/16(金) 20:55:56.93多倍長とか言って10のマイナス1000乗の精度が求められる世界だからね
冗談抜きでは想像できないね
0602デフォルトの名無しさん
2012/11/16(金) 22:29:39.67LLだの低レベルな罵り合いは微笑ましい
0603デフォルトの名無しさん
2012/11/16(金) 22:43:59.66凄いレベルの馬鹿発見
0604デフォルトの名無しさん
2012/11/17(土) 10:45:15.09ブロックがないなら継承してオーバーライドしてコンストラクタ呼べばいいじゃないって
歴史に残る馬鹿だな
0605デフォルトの名無しさん
2012/11/17(土) 12:08:17.48@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}}
0606605
2012/11/17(土) 12:14:26.68x (゚�听)イラネ
@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}}
0607デフォルトの名無しさん
2012/11/17(土) 16:34:17.65× ブロックを渡せないなら指向ではない。
○ ブロックを渡すことでできる「何か」がブロック以外で出来ればオブジェクト指向。
0608デフォルトの名無しさん
2012/11/17(土) 17:04:50.81ブロックで出来る程度の事を継承でやるのは冗長で、
コード間に無駄な密結合を発生させ、可読性と保守性を落とす
馬鹿馬鹿しい行為だと>>604は指摘してるだけで、
オブジェクト指向じゃないとは書いてないよ
0609デフォルトの名無しさん
2012/11/17(土) 18:18:51.09そんなに困るのか?
0610デフォルトの名無しさん
2012/11/17(土) 18:19:46.51具体的に言うことができたら>>608のいうことを
少しは信じてやってみいいぞw
0611デフォルトの名無しさん
2012/11/17(土) 18:22:46.86例えばイテレータとかも「こんだけ冗長ならもうforループに直書きでよくね?」になるんだよなあ
0612デフォルトの名無しさん
2012/11/17(土) 18:25:13.39共通部分は除いてどこが冗長化書いてみてよ。
タイプ数、数えてあげるからさ。
0613デフォルトの名無しさん
2012/11/17(土) 20:14:36.91for(Iterator<Integer>i=a.iterator();i.hasNext();)total+=i.next();
Java辺りには結構いると思うぞ
「イテレータの何が便利なのか分からない、冗長かつ読みにくくなっただけじゃん」
って思ってる人間。
LLのイテレータは大概、どう考えても書きやすく読みやすくなるから
自然と使うようになると思う。「良いものを自然と使いたくなる」ってのは案外重要だと思うんだ。
0614デフォルトの名無しさん
2012/11/17(土) 20:34:50.75これらの直交する処理を分離しておくと再利用性が高くなるね
0615デフォルトの名無しさん
2012/11/17(土) 21:45:08.52for(Integer i:a) total+=i;
って書けるんだが・・・
0616デフォルトの名無しさん
2012/11/17(土) 22:29:35.18流石にイテレータでループくらいは短く書けるよ、結構昔(Java5)から
0617デフォルトの名無しさん
2012/11/17(土) 22:34:28.000618デフォルトの名無しさん
2012/11/17(土) 22:39:46.50予想通り、批判が的はずれでワロタw
0619デフォルトの名無しさん
2012/11/17(土) 22:51:27.98a.get(i)はaとiが分離しているから変数が2個いる
Iteratorクラスを作れば変数を1個減らせる (クラスは1個増える)
あくまで減らすのが目的だから
良いクラスを増やせば良いことがあるみたいな言い方はおかしい
0620デフォルトの名無しさん
2012/11/17(土) 23:02:13.36まとまったソースコードも無いんじゃ水掛け論だよ
せめて、スレに出て来た御題のどれか一つでも解いてくれたら……
0621デフォルトの名無しさん
2012/11/17(土) 23:13:43.20今でもScalaとかあるけど
0622デフォルトの名無しさん
2012/11/17(土) 23:21:12.600623デフォルトの名無しさん
2012/11/17(土) 23:24:29.58ソート後に出力するという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}));
}
}
0624デフォルトの名無しさん
2012/11/17(土) 23:26:01.91えと、共通部分は省略してください。
ライブラリの実装までわざわざ書きますか?
importも不要です。そんなのエディタが勝手に処理するじゃないですか。
0625デフォルトの名無しさん
2012/11/17(土) 23:29:42.96http://www.zecun.org/?m=201203
Ordering<Foo> ordering = Ordering.natural().nullsFirst().onResultOf(new Function<Foo, String>() {
public String apply(Foo foo) {
return foo.sortedBy;
}
});
0626デフォルトの名無しさん
2012/11/17(土) 23:31:15.47そりゃドカタと言われますわ
0627デフォルトの名無しさん
2012/11/17(土) 23:31:58.38List<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;
}
});
0628デフォルトの名無しさん
2012/11/17(土) 23:32:38.83あ、車輪の再発明だから
ライブラリがあるものを書くなって意味か
お前が馬鹿だったw
0629デフォルトの名無しさん
2012/11/17(土) 23:33:57.28これが冗長だとキツい
0630デフォルトの名無しさん
2012/11/17(土) 23:34:35.27一件ジェネリックスが面倒だけど、エディタが補間してくれるので
そうでもない
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]);
}
0631デフォルトの名無しさん
2012/11/17(土) 23:37:36.35結局型安全という付加価値をつけた分
コードが長くなってるだけで、冗長ではないんだよ
型安全のメリットを失ってまで短くするのは
本末転倒ってもんだ。
0632デフォルトの名無しさん
2012/11/17(土) 23:40:59.97> ストラテジパターンはよく使う
よく使うってのは、ストラテジパターンを使ったライブラリの
利用者側か?それともライブラリ側か?
もしライブラリ側ならそれは設計がまずいとしか思えない。
ジェネリクス使わないで型ごとに作ってたりな。
ライブラリの利用者側なら、大してコード多くないだろ。
コードの大半はエディタが未実装のメソッドのテンプレートを生成してくれるし。
0633デフォルトの名無しさん
2012/11/17(土) 23:42:34.33この冗長なコードをリンク付きでLLスレに貼るとか
鬼畜かお前は
0634デフォルトの名無しさん
2012/11/17(土) 23:43:27.340635デフォルトの名無しさん
2012/11/17(土) 23:44:25.06冗長なレスだなw
馬鹿には、「で?」だけでいいだろw
0636デフォルトの名無しさん
2012/11/17(土) 23:46:47.490637デフォルトの名無しさん
2012/11/17(土) 23:51:01.43キーワードハイライトもあると、>>623ですら結構スラスラ読める
型のところは色が付くから、型を読む必要が無いときは読み飛ばせる
0638デフォルトの名無しさん
2012/11/17(土) 23:51:49.610639デフォルトの名無しさん
2012/11/17(土) 23:53:05.21ライブラリがあるのだからそれを利用しろと。
そしてmainとかimportは何度も書くものじゃないんだから
実際に書く必要があるコードだけを書いてくれということ。
0640デフォルトの名無しさん
2012/11/17(土) 23:53:35.560641デフォルトの名無しさん
2012/11/17(土) 23:55:29.75LL好きにとっては、cがいい言語で、ゴルフコードが素晴らしい書き方なの?
0642デフォルトの名無しさん
2012/11/17(土) 23:56:56.38っCOBOL
0643デフォルトの名無しさん
2012/11/17(土) 23:57:24.52そんなものは重要じゃないと言ってるのにいくら言っても分からない
0644デフォルトの名無しさん
2012/11/18(日) 00:00:16.64こんなもんでしょ。
運用系みたいに1000行も行かないような
小さなスクリプト書くなら、型安全なくてもいいけど
それを大きく超える。一人で全部把握できないようなものは
型安全ないとやっていけないよ。
型安全がないとコード修正の影響範囲がつかめない。
0645デフォルトの名無しさん
2012/11/18(日) 00:03:20.40いや、それでも少し冗長ではあるよ
Scalaなら>>630が>>364になるんだし
ただ、それが問題になるほどのことなのかは
議論の余地あり
0646デフォルトの名無しさん
2012/11/18(日) 00:05:21.17そんなトリックに騙されると思って?
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))
)
0647デフォルトの名無しさん
2012/11/18(日) 00:06:33.69だから、それでもこっちの方が簡潔なんだが
0648デフォルトの名無しさん
2012/11/18(日) 00:08:06.48元のコードを留めた程度に書くなら
even_list = list.select{| input | n % 2 == 0 }
negative_list = list.map{| input | -n }
かなあ、実際は偶数判定をするメソッドが既にあるのでもっと簡潔だが
0649デフォルトの名無しさん
2012/11/18(日) 00:09:43.120650デフォルトの名無しさん
2012/11/18(日) 00:13:40.35簡潔じゃないとは言ってないよ
空白改行除いて、Javaでは181文字だったのが143文字まで減っている。
38文字タイピング文字数を減らせている。
0651デフォルトの名無しさん
2012/11/18(日) 00:14:30.81List<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);
}
って書くけど、これじゃ駄目なの?
無理矢理なんちゃらパターンやら小難しいこと考える必要あるんか?
0652デフォルトの名無しさん
2012/11/18(日) 00:15:13.46そうだね。だから少し冗長だね。と言ってるんだけど
何を反論したいの?
同じ意見じゃん
0653デフォルトの名無しさん
2012/11/18(日) 00:17:21.63> 実際は偶数判定をするメソッドが既にあるので
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);
0654デフォルトの名無しさん
2012/11/18(日) 00:18:54.66>>653みたいによくあるアルゴリズムを
関数化することでコードを短く出来る。
0655デフォルトの名無しさん
2012/11/18(日) 00:20:36.38わかりにくいだけじゃん
651でも十分簡潔で分かりやすいコードなんだが
無理矢理短くしてもメリットあまりないと思うけど
0656デフォルトの名無しさん
2012/11/18(日) 00:20:49.32結局のところ return input % 2 == 0; の
比較行しか見なくて済むから、
このコードは実質たったのこれだけとかんがえられる。
0657デフォルトの名無しさん
2012/11/18(日) 00:23:17.08この例は元のコードが簡潔だから良い例じゃない
しかし、ちょっと前にも、ジェネレータやらgroupbyでバグの可能性が増えてたから
LLで関数型スタイルが良いんだというのは結局思い込みじゃないの
0658デフォルトの名無しさん
2012/11/18(日) 00:23:21.91そりゃ今回は条件の内容がわかりやすいからだろw
もし複雑な条件でも、その条件だけを入れ替え可能になっている。
使うときはすごく簡単になるぞ。
0659デフォルトの名無しさん
2012/11/18(日) 00:25:02.61仮に複雑な条件でも、どちらの書き方でもif文が複雑になるでしょ
外側のforで回す構造は簡潔かつ分かりやすいままじゃん
そんなメリットだとは到底思えないけど
0660デフォルトの名無しさん
2012/11/18(日) 00:28:56.88if文を分離できるって所が重要なんだよ。
コードの内容は同じでも、それを使う部分が凄くシンプルになる。
そしてif文の中身が交換可能になってる。
同じインターフェースを持っているものに入れ替え可能という追加機能がある。
※filterの中身は外部から与えられる。
List<Integer> evenList = (List<Integer>)Collections2.filter(list, filter);
どちらもコードは同じようにシンプルなら
追加機能がある法が良い。
0661デフォルトの名無しさん
2012/11/18(日) 00:30:41.84何が重要なのかさっぱり分からない
簡潔なfor文書けば良いだけなのに
そんなにfor文繰り返すのが嫌なのか?
0662デフォルトの名無しさん
2012/11/18(日) 00:57:40.36お題が単純だからロジックを分離するほどでもないって意味なのかどっちなんだろう。
0663デフォルトの名無しさん
2012/11/18(日) 01:25:51.26ソートのようなもっと複雑な制御ロジックなら、ロジックを分離する意味が
大きいかもしれないが、そう頻繁にあることではないし、その場合にはInterfaceを使えるわけだし
java8ではそれも簡単になるだろう
0664デフォルトの名無しさん
2012/11/18(日) 01:30:52.15現実はC++が最も実績を残しているし、Javaもそれに次いで多い
0665デフォルトの名無しさん
2012/11/18(日) 01:48:05.55というか、ああいう競技だと問題が大きくて
制限時間に収まらないとかがあるから
0666デフォルトの名無しさん
2012/11/18(日) 04:08:00.28大会ってそもそも「何分で実装出来るか」じゃなく
「制限時間内でどれだけ効率の良いプログラムに出来るか」
を競うのが主流じゃないのん?LLにとっては不利な条件でしょ
0667デフォルトの名無しさん
2012/11/18(日) 04:34:59.870668デフォルトの名無しさん
2012/11/18(日) 04:42:04.160669デフォルトの名無しさん
2012/11/18(日) 05:57:52.410670デフォルトの名無しさん
2012/11/18(日) 07:37:51.59残念ながらそういう条件じゃない
GCJの場合はLLでも完全に間に合うように作ってある
過去にはPythonで一位になった人もいた
スピードが大事で、まさに「何分で実装できるか」のような
大会
そういう大会で上位陣にはC++やJavaが多い
0671デフォルトの名無しさん
2012/11/18(日) 07:53:38.98Haskellだと>>630が>>374になるよ
Scalaよりさらに短い
0672デフォルトの名無しさん
2012/11/18(日) 08:23:14.11http://www.go-hero.net/jam/12/languages/6
実際のところ、LL使いは殆ど参加してない
0673デフォルトの名無しさん
2012/11/18(日) 08:29:30.180674デフォルトの名無しさん
2012/11/18(日) 08:31:43.01それはLLがこの大会で有利な言語じゃないからみんな使わないだけ
>>673
Largeでも十分LLで間に合うよ
0675デフォルトの名無しさん
2012/11/18(日) 08:35:50.50速度的に不利だからね
0676デフォルトの名無しさん
2012/11/18(日) 08:36:08.78LL使いは決勝までに全員敗退したんでしょw
0677デフォルトの名無しさん
2012/11/18(日) 08:37:18.950678デフォルトの名無しさん
2012/11/18(日) 08:37:20.80だから速度は全く関係ない。正しいアルゴリズムならLLで間に合うように作ってある。
しかも、間に合うか間に合わないかの二択で点数決まるから、全く不利にならない。
0679デフォルトの名無しさん
2012/11/18(日) 08:38:15.020680デフォルトの名無しさん
2012/11/18(日) 08:40:10.22LLでも間に合うように作ってあるからそういうことも可能
LLの速度は全然不利ではない
0681デフォルトの名無しさん
2012/11/18(日) 08:41:16.78そんなことになるのは予選やRound1くらい
決勝近くなってくると、問題はちゃんと洗練されるから
そんなことにはならない
0682デフォルトの名無しさん
2012/11/18(日) 08:43:48.080683デフォルトの名無しさん
2012/11/18(日) 09:06:02.11C++も最近出来るようになったね
0684デフォルトの名無しさん
2012/11/18(日) 09:09:18.10例えばどの問題?
LLでも力技で間に合うように作ってあるんだが。
pypyに代表されるように、JITコンパイラで最近のLLは結構速いしな
0685デフォルトの名無しさん
2012/11/18(日) 09:42:57.92そんなのが通用しない、自分で問題を解くような世界では
生きられないんだよw
0686デフォルトの名無しさん
2012/11/18(日) 10:09:39.27間違いを事前に防止できなくても後で直せばいい
現に、Java7がだめでもJava8で改善すればいいって開き直る奴が最強だからな
0687デフォルトの名無しさん
2012/11/18(日) 10:16:25.37パターンマッチしか使えんの?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]
0688デフォルトの名無しさん
2012/11/18(日) 12:18:43.59a + (b + (c + d))
(a + b) + c) + d
0689デフォルトの名無しさん
2012/11/18(日) 12:21:52.060690デフォルトの名無しさん
2012/11/18(日) 12:24:59.11リストでは無理
遅延評価のおかげで無限列でも動くし、foldrに慣れてください、としか
0691デフォルトの名無しさん
2012/11/18(日) 12:27:59.37先頭から順番に処理してますよ > foldr
0692デフォルトの名無しさん
2012/11/18(日) 12:58:01.88意味が分からん
>>687でも無限列で動くでしょ
>>691
どういう意味?
ysは後ろの数字からリストに入ってきて大きくなっていくでしょ
0693デフォルトの名無しさん
2012/11/18(日) 13:03:07.20遅延評価してるって言いたいだけか
でも、それは687に対するメリットではないし、基本的に演算の左辺と右辺の優先順位が右辺になってる
ことに変わりはないよね
0694デフォルトの名無しさん
2012/11/18(日) 13:04:15.01無限列の末尾なんて取れないでしょ
lastを取ろうとした所で無限ループ
0695デフォルトの名無しさん
2012/11/18(日) 13:06:57.35パターンマッチング適用時点では、常に無限でないリストが入ってくるから
そうはならない
0696デフォルトの名無しさん
2012/11/18(日) 13:10:57.07> パターンマッチング適用時点では、常に無限でないリストが入ってくるから
リストが無限列かどうかを判定するのは無理だし、
可能だとしても無限列が入ってきたら
マッチするパターンが存在しなくて>>687は動かない
0697デフォルトの名無しさん
2012/11/18(日) 13:11:54.95少なくとも687に関して言うなら、fの引数として絶対に無限列は入ってこないよ
作成途中の非無限列しか入ってこない
0698デフォルトの名無しさん
2012/11/18(日) 13:15:08.28ああ、そうでした
完全にこちらの間違いでした
0699デフォルトの名無しさん
2012/11/18(日) 13:15:58.222chでそんなに素直に謝る人初めて会ったw
君は凄い人だねw
0700デフォルトの名無しさん
2012/11/18(日) 13:51:37.53最初の前提から間違っていたw
恥ずかしいww
言いたかった事は、下のような関数定義で
上は無限列でもOKだけど、下はダメだよ的な事が言いたかった...
map f = foldr (\x xs -> f x : xs) []
map f = foldl (\xs x -> xs ++ [f x]) []
0701デフォルトの名無しさん
2012/11/18(日) 14:38:33.68ちょっとわからないのは、
(1) >>374も>>687も動かないのはなぜか
(2) 両方動かないのならやっぱり、末尾のパターンマッチが駄目な理由にはふさわしくないのでは?
(3) mapで上はいいのに、下は駄目な理由は?(Haskellがそういう実装になってるのはどういう理由なのか。止むに止まれぬ理屈なのかどうか)
0702デフォルトの名無しさん
2012/11/18(日) 14:44:56.500703デフォルトの名無しさん
2012/11/18(日) 16:05:53.16そもそもweb系言語で計算量について考えるような問題領域なんてあるの?
0704デフォルトの名無しさん
2012/11/18(日) 16:08:29.61(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 まで行き着かない
0705デフォルトの名無しさん
2012/11/18(日) 16:12:28.44スクリプト言語でどーこーするような領域で計算量について深刻に考える方がどこかおかしい。
0706デフォルトの名無しさん
2012/11/18(日) 16:16:28.440707デフォルトの名無しさん
2012/11/18(日) 16:18:42.750708デフォルトの名無しさん
2012/11/18(日) 16:22:00.610709デフォルトの名無しさん
2012/11/18(日) 16:38:55.910710デフォルトの名無しさん
2012/11/18(日) 16:51:04.730711デフォルトの名無しさん
2012/11/18(日) 17:01:04.46てか、python標準のGUIライブラリってドレになるの?tk?gtk?wx?
rails製のmetasploitがCGIによるインターフェースってあたり、
クロスプラットフォームなGUIほど混沌とした世界もないんじゃないかな
0712デフォルトの名無しさん
2012/11/18(日) 17:02:55.31ttkもサポートされて見た目は改善されたが、もうtkってイメージだけでね...
0713デフォルトの名無しさん
2012/11/18(日) 17:28:14.710714デフォルトの名無しさん
2012/11/18(日) 17:41:49.070715デフォルトの名無しさん
2012/11/18(日) 18:06:54.49そのうち、wxhtml5とか出来てそう。
0716デフォルトの名無しさん
2012/11/18(日) 21:05:23.00ようやくクロージャ入るんだ、ありがたい。
ラムダは7から入ってるんだっけ?
0717デフォルトの名無しさん
2012/11/18(日) 21:20:23.243行ぐらい行数が減らせるんだっけ。
まあその3行はエディタが自動生成してくれる部分なんだが。
0718デフォルトの名無しさん
2012/11/18(日) 21:24:06.67概念とか言葉で説明するんじゃなくて
具体的な違いが知りたい。
0719デフォルトの名無しさん
2012/11/18(日) 21:32:50.12> `ヽ ヽ) ´∠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´
0720デフォルトの名無しさん
2012/11/18(日) 21:47:33.19ブロック云々程度ならラムダで十分ではあるが
0721デフォルトの名無しさん
2012/11/18(日) 21:57:35.58クロージャの中からその外のスコープの変数が丸見えになっちゃう。
もちろん書き込みの可能。
便利なこともあるのだけれど、クロージャーの中は
その中でスコープは閉じていて欲しい。
関数と同じで引数と戻り値があるのだから十分なはず。
そう考えるとラムダのほうが優れてるかな。
0722デフォルトの名無しさん
2012/11/19(月) 01:57:43.690723デフォルトの名無しさん
2012/11/19(月) 02:09:23.72(たぶんほとんどの言語で)その外側の関数内までなので
そこまで広いとは言えないと思うが
問題になるとしたらエクステントの方で、無限エクステントになってしまう
寿命が確定できないのはある意味めんどくさい
とはいえ、普通はGCに管理を任せるから問題にはならないけど
0724デフォルトの名無しさん
2012/11/19(月) 04:52:09.830725デフォルトの名無しさん
2012/11/19(月) 07:52:31.260726デフォルトの名無しさん
2012/11/19(月) 07:54:50.14関数() {
変数aを宣言;
関数内関数() {
// ここから変数aにはアクセスできなかったり、制限付きだったりする
}
}
関数() {
変数aを宣言;
クロージャ {
// ここから変数aに自在にアクセスできる
}
}
0727デフォルトの名無しさん
2012/11/19(月) 14:26:11.72ラムダ = 無名関数
なんじゃないの?
ラムダかクロージャーかっていう表現は少しおかしい気がする
0728デフォルトの名無しさん
2012/11/19(月) 15:05:45.20http://developer.cybozu.co.jp/akky/2012/11/britruby-cancelled/
0729デフォルトの名無しさん
2012/11/19(月) 15:17:55.16クロージャか非クロージャか…だね本来の区別は
元がラムダ(=無名関数)があってもクロージャがない環境の話だからじゃないかな
0730デフォルトの名無しさん
2012/11/19(月) 15:52:46.320731デフォルトの名無しさん
2012/11/19(月) 20:17:11.41整数が入っている入れ子のリストから、
入れ子構造は保ったまま奇数のみを取り出す関数を書け
入れ子の深さは制限せず、空リストは取り除く事
例: [1, [2, 3], 4, [[5, [6]], 7]] #=> [1, [3], [[5], 7]]
0732デフォルトの名無しさん
2012/11/19(月) 21:16:45.70Common 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))
0733デフォルトの名無しさん
2012/11/19(月) 21:47:34.30Squeak 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)) "
0734デフォルトの名無しさん
2012/11/19(月) 21:48:43.69@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}}
0735734
2012/11/19(月) 21:58:16.86dropEven 内の 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]]];
0736デフォルトの名無しさん
2012/11/19(月) 21:59:46.96rubyのコミュニティ自体に、宗教やジェンダー、学歴、雇用制度といった山ほどの社会問題が見つかるが
そこに更に人種問題が加わったわけだ。きっと神の思し召しだな。つまり、新しい時代へのイノベーションだ
0737デフォルトの名無しさん
2012/11/19(月) 22:04:48.89おまいらって、この手の問題、何分ぐらいで解いてるの?
0738デフォルトの名無しさん
2012/11/19(月) 23:26:50.56Squeak 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)) "
0739デフォルトの名無しさん
2012/11/19(月) 23:31:39.26Scheme
(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))
0740デフォルトの名無しさん
2012/11/20(火) 00:15:47.39Perl
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]]);
0741デフォルトの名無しさん
2012/11/20(火) 06:55:22.49Haskell
{-# 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]]
0742デフォルトの名無しさん
2012/11/20(火) 07:36:31.290743デフォルトの名無しさん
2012/11/20(火) 08:07:19.270744デフォルトの名無しさん
2012/11/20(火) 08:26:31.320746デフォルトの名無しさん
2012/11/20(火) 22:12:11.04def 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]]
0747デフォルトの名無しさん
2012/11/20(火) 22:30:49.92p eval( [1, [2, 3], 4, [[5, [6]], 7]].inspect.gsub(/\d*[02468][,\s]*/,'').gsub(/(?<!^)(\[(?:\g<0>+|[,\s]*)\][,\s]*)/,''))
# => [1, [3], [[5], 7]]
ネストした空の角カッコ対を削除する正規表現にいまいち自信が無い
0748質問です。
2012/11/21(水) 01:31:02.12この言語は、SUBMIT でデータを受け取るのに、
SUBMITで 入力データを受け取り操作に関する命令文を
< input type="text" >
のあとに書かなくてはならない。5行づつの一覧表入出力を作っているので
更新した後、その更新行のところに再表示させるために
リダイレクトしてページ再表示したいんだけど
java c# vb.netだとredirect 命令で簡単にできるけど
phpのheader命令は、 htmlの入出力のあとに
書くと動作しない。
かといって
< input type="text" >の前だとsubmit でデータが受取れてない。
なんかいい方法ないの?リダイレクトの方法。
0749デフォルトの名無しさん
2012/11/21(水) 01:36:03.040750デフォルトの名無しさん
2012/11/21(水) 08:04:33.500751デフォルトの名無しさん
2012/11/21(水) 08:21:19.100752デフォルトの名無しさん
2012/11/21(水) 08:24:17.56ページを更新してもフォームの値を保存するってこと?
普通Cookieとか外部ファイルでやらない?
0753デフォルトの名無しさん
2012/11/21(水) 20:35:19.580754デフォルトの名無しさん
2012/11/22(木) 08:49:18.34つかえない げんご
そんなの じょうしの きぶん
0755デフォルトの名無しさん
2012/11/22(木) 20:19:48.870756デフォルトの名無しさん
2012/11/23(金) 04:18:48.51なんとかできました。
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内容に影響されるって。
0757uy
2012/11/23(金) 05:01:02.17俺からみて何の話しているか分からないってことは
多分中身のないレスで新着50は埋め尽くされている
0758デフォルトの名無しさん
2012/11/23(金) 05:20:20.990759uy
2012/11/23(金) 05:32:58.77土台になりたがる奴がいないと社会は周らない
その檻の中で順位付けをし、争い続けるが良い
0760デフォルトの名無しさん
2012/11/23(金) 05:46:13.73'整数が入っている入れ子のリストから、入れ子構造は保ったまま奇数のみを取り出す'([]
,[]).
'整数が入っている入れ子のリストから、入れ子構造は保ったまま奇数のみを取り出す'(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).
0761760
2012/11/23(金) 05:49:39.790762760
2012/11/23(金) 06:05:35.96'整数が入っている入れ子のリストから、入れ子構造は保ったまま奇数のみを取り出す'(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).
0763760
2012/11/23(金) 06:06:40.500764デフォルトの名無しさん
2012/11/23(金) 08:25:52.41Prologの面白さや、やりたいことなんかが良く分かるね
0766デフォルトの名無しさん
2012/11/23(金) 10:03:09.06Javaで動的型付け
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
0767762
2012/11/23(金) 10:03:13.59% 文字数が多くなり制限に掛かるかも知れないから、後半の述語だけ。
% 前半の述語は述語名に但し書きを付加。空リストを排除するためリスト構造を示す表現を変えた。
'入れ子構造は保ったまま奇数のみを取り出す。ただし空リストは取り除く事。'([[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).
0768デフォルトの名無しさん
2012/11/23(金) 10:11:23.03結局Javaが一番分かりやすい件
0769デフォルトの名無しさん
2012/11/23(金) 10:24:15.161) 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勢もひねりを加えるなどして面白くして欲しい。
0770デフォルトの名無しさん
2012/11/23(金) 10:32:01.94次
0771デフォルトの名無しさん
2012/11/23(金) 10:38:35.24優劣付けようなんて馬鹿じゃないの?
0772デフォルトの名無しさん
2012/11/23(金) 10:42:49.63Excel
=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)
0773デフォルトの名無しさん
2012/11/23(金) 10:44:58.69ただの平均だよ平均
どんなバカでも頭の中で一瞬でJavaの全ソースコードが書けるお題なんだぜ?
何がアピールだよw
0774デフォルトの名無しさん
2012/11/23(金) 10:52:41.07R
data = sample(1:100, 10)
data; mean(data); sd(data)
0775デフォルトの名無しさん
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の計算は並列(スレッド、プロセス問わない)で行う事。
0776デフォルトの名無しさん
2012/11/23(金) 11:13:22.60そもそも自然数って0含まないだろ。
0777デフォルトの名無しさん
2012/11/23(金) 11:18:23.660778デフォルトの名無しさん
2012/11/23(金) 11:18:43.35文科省乙とでも言えばいいのだろうか
自然数に0を含める流儀は数論や計算機科学など中心に
結構あるからどっちかはっきりさせる意味でも一応断ったんだろ
とでもマジレスすればいいのだろうか
それともここはギャグで返すべきだったのだろうか
0779デフォルトの名無しさん
2012/11/23(金) 11:32:03.56http://toro.2ch.net/test/read.cgi/tech/1200989025/190-192
http://www.e-mise2.ne.jp/
0780デフォルトの名無しさん
2012/11/23(金) 11:33:35.66Scala
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)
0781デフォルトの名無しさん
2012/11/23(金) 11:35:28.480782デフォルトの名無しさん
2012/11/23(金) 11:40:32.07すみません
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
0783デフォルトの名無しさん
2012/11/23(金) 11:41:58.50Haskell
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]
0784デフォルトの名無しさん
2012/11/23(金) 11:51:02.29(for (i <- (1 to 100000).par) yield collatz(i)) max
0785デフォルトの名無しさん
2012/11/23(金) 11:57:56.02def 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
0786デフォルトの名無しさん
2012/11/23(金) 11:59:49.76rubyはどうなん?
0787デフォルトの名無しさん
2012/11/23(金) 12:04:17.84@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
0788デフォルトの名無しさん
2012/11/23(金) 12:11:18.16この言語は関数が結果を返せない上に、&やら//やらの意味不明の記号に
ModuleやらWhichやらのへんてこキーワードマスターしないと
使えないのか
0789デフォルトの名無しさん
2012/11/23(金) 12:26:39.370790デフォルトの名無しさん
2012/11/23(金) 12:28:48.24結果をキャッシュすると早く計算できるだろうな。
並列化とどう組み合わせるかが面白そうですね。
0791デフォルトの名無しさん
2012/11/23(金) 12:30:54.36純粋関数型だから評価順に意味がなかったんじゃなかったのか?
0792デフォルトの名無しさん
2012/11/23(金) 12:32:15.66別に面白くはないんじゃね
配列にキャッシュ化するだけでしょ
0793デフォルトの名無しさん
2012/11/23(金) 12:44:19.95Scalaメモ化バージョン
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
0794デフォルトの名無しさん
2012/11/23(金) 12:49:39.57その程度のことが簡単には出来ない言語もあるのよ
Haskellとかねw
0795デフォルトの名無しさん
2012/11/23(金) 12:50:09.85書き込みできず乗り遅れてしまったのだけど、折角なので
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]]
0796デフォルトの名無しさん
2012/11/23(金) 13:01:59.01小さい方から計算したほうが早そうなんだが、並列化で順番とか簡単にかける?
0797デフォルトの名無しさん
2012/11/23(金) 13:03:56.800798デフォルトの名無しさん
2012/11/23(金) 13:06:18.46それを指定したら並列化の意味がないだろ
それに今回の場合、大きな数字から初めても最後には小さい数字に行き着くのだから、
小さい方から計算した方が速いってのもあんまり正しくなさそう
0799デフォルトの名無しさん
2012/11/23(金) 13:10:31.16例外と三項演算子くらいC++とかでもあるだろ
x.odd? が嫌いなら x%2>0 にでもすればいい
0800デフォルトの名無しさん
2012/11/23(金) 13:11:16.64小さい数字に行き着くのだから、小さい方から計算したほうが、
キャッシュにヒットしやすくなるようなきがするのだが。
0801デフォルトの名無しさん
2012/11/23(金) 13:55:16.48>>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
0802デフォルトの名無しさん
2012/11/23(金) 14:33:22.35メモ化変数の同期コストと比べてどうなんだろう?
0803デフォルトの名無しさん
2012/11/23(金) 16:19:36.43どれくらい並列化の恩恵があったのか
0804デフォルトの名無しさん
2012/11/23(金) 17:43:38.08それは違うな
大きな数字でも小さな数字に行き着くのだから、結局一回目でキャッシュが作られるわけで
0805デフォルトの名無しさん
2012/11/23(金) 18:10:42.87全部キャッシュすればそうだね
0806デフォルトの名無しさん
2012/11/23(金) 18:14:23.92Perl
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;
# 色々�_。
0807デフォルトの名無しさん
2012/11/23(金) 18:27:52.260808デフォルトの名無しさん
2012/11/23(金) 18:29:33.43;;; 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)))))
0809デフォルトの名無しさん
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.
0810デフォルトの名無しさん
2012/11/23(金) 19:38:46.99sub collatz {
my ($n) = @_;
lock(%memo);
return $memo{$n} //= 1 + collatz($n % 2 ? $n * 3 + 1 : $n / 2);
}
# 何か間違えてる気もする。
0811デフォルトの名無しさん
2012/11/23(金) 19:39:51.000812デフォルトの名無しさん
2012/11/23(金) 20:10:38.72並列化せずにメモ化だけした。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
0813デフォルトの名無しさん
2012/11/23(金) 20:13:45.09速すぎるので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
0814デフォルトの名無しさん
2012/11/23(金) 20:18:24.292回目移行はメモ化完了してね?
0815デフォルトの名無しさん
2012/11/23(金) 20:27:06.090816デフォルトの名無しさん
2012/11/23(金) 20:36:28.77メモ使い回し: 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
0817デフォルトの名無しさん
2012/11/23(金) 20:39:54.13メモ化はCやScalaみたいな言語だと計算が速すぎて効果はない?
0818デフォルトの名無しさん
2012/11/23(金) 20:44:19.54すまんな。計測時間が10秒未満のデータは
信用しないことにしてるのだよ。
0819デフォルトの名無しさん
2012/11/23(金) 20:48:08.842回目以降はより速くなるんだから効果はあるでしょ
0820816
2012/11/23(金) 20:56:57.70というわけで、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
0821デフォルトの名無しさん
2012/11/23(金) 21:00:04.07やっぱり遅くなってる
毎回クリアしたメモ化でメモ化無しより速くなってるの?
0822デフォルトの名無しさん
2012/11/23(金) 21:09:06.8910秒未満だけどスマソ
こちらはメモクリアでほとんどスピード変わらない
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
0823デフォルトの名無しさん
2012/11/23(金) 21:14:39.230824デフォルトの名無しさん
2012/11/23(金) 21:28:04.3110000回は中々終わらなかったので、100回繰り返し(>>816と同条件)
メモ化無し: 4.17s user 0.01s system 99% cpu 4.194 total
0825デフォルトの名無しさん
2012/11/23(金) 21:30:50.310826デフォルトの名無しさん
2012/11/23(金) 21:39:51.20遅くね?Core2DuoのScalaと一緒ぐらい?
Cori5のCの方が数段速いはずだが
0827デフォルトの名無しさん
2012/11/23(金) 21:51:03.450828デフォルトの名無しさん
2012/11/23(金) 21:59:05.000829デフォルトの名無しさん
2012/11/23(金) 22:23:39.54RubyとPythonの並列化コード
Haskellのメモ化コード
CoffeeScript、Gruvy、TypeScript、Gooのコード
0830デフォルトの名無しさん
2012/11/23(金) 22:26:46.100831デフォルトの名無しさん
2012/11/23(金) 22:29:26.630832デフォルトの名無しさん
2012/11/23(金) 22:32:59.10LISPの亜種だろ
0833デフォルトの名無しさん
2012/11/23(金) 22:36:06.22実行時間は比べるべくもなく遅いがRでも
メモ化直列<メモ化並列<並列<直列だな
0834デフォルトの名無しさん
2012/11/23(金) 23:10:48.74import 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]
0835デフォルトの名無しさん
2012/11/23(金) 23:27:43.700836デフォルトの名無しさん
2012/11/24(土) 00:23:15.110837デフォルトの名無しさん
2012/11/24(土) 00:45:30.14Windows以外だとforkをつかった並列実行ライブラリがあるみたいだが
Windowsユーザーはどうすりゃいいんだろう
JRubyだとスレッドが並列に動くが
近い将来の間にスレッドを並列実行できるようになる可能性はないが
複数のVMを並列実行できるようにはするそうなので
実現すればWindowsを含めた汎用的な並列化ライブラリを作れそうだけど
いったいいつになることやら……
0838デフォルトの名無しさん
2012/11/24(土) 01:08:24.460839デフォルトの名無しさん
2012/11/24(土) 01:11:43.92from 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))))
0840デフォルトの名無しさん
2012/11/24(土) 01:19:05.90近いうちに解散と言いつつ4年
0841デフォルトの名無しさん
2012/11/24(土) 08:05:47.23Python製のWindowsアプリはだいぶ増えてきたな。
0842デフォルトの名無しさん
2012/11/24(土) 12:26:46.45さすがの横綱相撲だね
今回はpythonが優勝かな
0843デフォルトの名無しさん
2012/11/24(土) 13:29:18.90HaskellやScalaに劣る部分もある。
完勝とは言いがたい。
0844デフォルトの名無しさん
2012/11/24(土) 13:41:23.810845デフォルトの名無しさん
2012/11/24(土) 13:43:22.842つの箱がある。片方の箱には黒玉1つ、白玉1つ。
もう片方の箱には黒玉が2つ入っている。
どちらかの箱から玉を1つ取り出す(箱の中身は見えない)。
取り出した玉が黒であるとき、その玉を取り出した箱に残っている玉が黒玉である確率を求めよ。
0846デフォルトの名無しさん
2012/11/24(土) 13:52:09.83プロセス数は省略できるよ
returnは書き忘れると実行時にNoneが返って来てアレってなるけど
0847デフォルトの名無しさん
2012/11/24(土) 14:33:38.36Haskell
白が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
0848デフォルトの名無しさん
2012/11/24(土) 15:09:04.26@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
0849デフォルトの名無しさん
2012/11/24(土) 15:34:50.69from 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))))
0850デフォルトの名無しさん
2012/11/24(土) 16:06:12.51Pythonのmultiprocessingはlambda受け取れないよってツッコミ待ち?
0851デフォルトの名無しさん
2012/11/24(土) 16:41:16.32Perl
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凄味があるなあ
0852デフォルトの名無しさん
2012/11/24(土) 19:12:38.32内包表記が使えれば似たような事はできるし
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)))
0853デフォルトの名無しさん
2012/11/24(土) 20:04:02.94Python
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))
0854デフォルトの名無しさん
2012/11/24(土) 21:28:03.06直感も当てにならんな
0855デフォルトの名無しさん
2012/11/24(土) 22:05:06.73Squeak Smalltalk
| restBalls |
restBalls := #((黒 白) (黒 黒)) gather: [:box |
box select: [:ball | ball = #黒] thenCollect: [:ball | box asBag remove: ball; anyOne]].
^(restBalls occurrencesOf: #黒) / restBalls size "=> (2/3) "
0856デフォルトの名無しさん
2012/11/24(土) 22:08:45.70ぱっと見分かりにくいポイント
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の方が分かりやすい
マジで
0857デフォルトの名無しさん
2012/11/24(土) 22:38:38.05だから残りが黒の確率は2/3である
・どっちかの箱を選ぶ確率は1/2ずつ同等
片方を選べば必ず残りは白で、もう片方なら必ず黒が出る
ゆえに残りが黒の確率は1/2である
0858デフォルトの名無しさん
2012/11/24(土) 22:43:03.41CとかJavaで書いても、分かりやすいと言ってくれる人はいないぞ
分かりやすい (=もっと難しくしてもOK) なんて言う奴はいない
0859デフォルトの名無しさん
2012/11/24(土) 22:44:12.14俺なんてじっくり見ても、
>>851のコードにreverseが入ってる理由とか、
>>852のコードが何やってるのかなんて全然分からんぜ
その言語知らない奴から見たら、そんなもんじゃね?
0860デフォルトの名無しさん
2012/11/24(土) 22:49:34.64感覚なんだろうなw
曲芸やるぐらいなら普通に書いたほうが良い。
0861デフォルトの名無しさん
2012/11/24(土) 22:50:03.15= P(取り出した玉が黒で残った玉が黒) / P(取り出した玉が黒)
= P(黒が二つ入った箱を選ぶ) / ((1/2)*(1/2) + (1/2)*1)
= (1/2) / (3/4)
= (2/3)
0862デフォルトの名無しさん
2012/11/24(土) 23:45:22.23Java
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();
}
0863デフォルトの名無しさん
2012/11/25(日) 02:23:25.12enum 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;
}
0864デフォルトの名無しさん
2012/11/25(日) 03:11:29.48「取り出した玉が黒であるとき、その玉を取り出した箱に
残っている玉が黒玉である確率を求めよ」
という文章を
「取り出した玉が黒であるとき、その玉を取り出した箱から
もう一度玉を取り出したとき黒玉である確率を求めよ。」
に変更すると、二つの箱に任意個の白黒玉を入れた場合を考える事ができる。
片方の箱に{白, 白, 黒}、もう一方に{黒, 黒, 黒, 白}が入ってる場合の確率を求めよ。
0865デフォルトの名無しさん
2012/11/25(日) 03:57:41.19Scheme(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をそのまま書いただけ
0866デフォルトの名無しさん
2012/11/25(日) 07:15:07.26問題の定義が曖昧
・まず、箱をどちらか片方選び(それぞれ1/2)、その上で選ぶ
・それぞれのボールを等確率で選ぶ
のか不明
おそらく、問題文のような行為から推測すると、
箱の中身が見えなくて、ボールの数も分からないと推測され
前者が正しいように思える
しかし、これはきっちり定義されていないから推測でしかない
そしてこの場合、865は誤り
0867デフォルトの名無しさん
2012/11/25(日) 07:40:20.49@Mathematica
>>848より
env = {{"A", {"White", "White", "Black"}}, {"B", {"Black", "Black", "Black", "White"}}};
In := pBoxBall["B", "Black", env]
Out = 21/32
(* 「取り出した玉が黒であるとき、その箱が B(後者)である確率を求めよ。」に読み替えてみた。 *)
0868デフォルトの名無しさん
2012/11/25(日) 07:42:55.15箱の中は見えないって書いてあるよ。
0869デフォルトの名無しさん
2012/11/25(日) 07:47:44.95Java
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
0870デフォルトの名無しさん
2012/11/25(日) 08:10:53.65enum 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();
}
0871デフォルトの名無しさん
2012/11/25(日) 08:50:53.22enum 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
0872デフォルトの名無しさん
2012/11/25(日) 09:27:15.940873デフォルトの名無しさん
2012/11/25(日) 10:20:24.59Haskell
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
0874デフォルトの名無しさん
2012/11/25(日) 10:34:19.41次に、Bの黒が選ばれる確率が1/2×3/4=3/8、その後、黒が選ばれる確率は2/3
よって求める確率は
3/8×2/3÷(3/8+1/6)=1/4÷13/24=6/13
0875デフォルトの名無しさん
2012/11/25(日) 10:46:51.27解説ありがとう 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
0876デフォルトの名無しさん
2012/11/25(日) 12:07:34.13メモリ大量に使うことになりはしない?
0877デフォルトの名無しさん
2012/11/25(日) 12:20:02.64黒→白 負け
白→黒 引き分け
白→白 引き分け
引き分けを除いた勝率を求めればいい
引き分けの確率が小さければ、条件がない確率との乖離も小さい
0878デフォルトの名無しさん
2012/11/25(日) 12:41:42.05問題の読解力は自信なし、pythonでlistとsetを使ってみた ideone.com/odZ1ib
>>873,874
「黒が選ばれたとき」の確率じゃないの?
0879デフォルトの名無しさん
2012/11/25(日) 12:57:38.87>>866も誤解している
0880デフォルトの名無しさん
2012/11/25(日) 13:16:04.62Squeak Smalltalk
| 箱 全取り出し順 一個目が黒の確率 二個目も黒の確率 |
箱 := {#(白 白 黒) asBag. #(黒 黒 黒 白) asBag}.
"箱 := {#(白 黒) asBag. #(黒 黒) asBag}."
全取り出し順 := 箱 collect: [:各箱 |
各箱 gather: [:一個目 | (各箱 copy remove: 一個目; yourself) collect: [:二個目 | {一個目. 二個目}]]].
一個目が黒の確率 := (箱 collect: [:各箱 | (各箱 occurrencesOf: #黒) / 各箱 size]) sum / 箱 size.
二個目も黒の確率 := (全取り出し順 collect: [:各箱毎 | (各箱毎 count: [:ペア | ペア = #(黒 黒)]) / 各箱毎 size]) sum / 箱 size.
^二個目も黒の確率 / 一個目が黒の確率 "=> (6/13) "
0881デフォルトの名無しさん
2012/11/25(日) 13:19:14.71873と874は正しいのだが
0882デフォルトの名無しさん
2012/11/25(日) 13:22:34.35確率の式を知らなくても答えが納得できるかなって思ったけど、
余計なお世話だったかも
式を直接解くと
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
0883デフォルトの名無しさん
2012/11/25(日) 13:44:05.68まあ、「へーなるほどなあ」みたいな感じはあったので面白かった
でも、なんだろうなあ、Haskellは$とか%とかletとか
慣れてないと読みづらい変な感覚はやっぱりある
0884デフォルトの名無しさん
2012/11/25(日) 18:21:08.86箱に黒一個しか入ってない場合の備えはどれもできているの?
0885デフォルトの名無しさん
2012/11/25(日) 20:29:37.32「どれもできているの?」とかどんだけ上からだよ
0886デフォルトの名無しさん
2012/11/25(日) 21:33:14.720887デフォルトの名無しさん
2012/11/26(月) 00:01:04.23だって、「もう一度取り出す」が出来ないわけだから。
オリジナルは二個固定だから大丈夫だが、改変版は可変にするとしか言って無い。
0888864
2012/11/26(月) 00:26:29.07黒玉が一つも存在しない場合も確率は未定義。
確率が未定義の場合はエラーを返すのが望ましいが、
未定義なので勝手に計算した確率を返すのでも可とする。
0889デフォルトの名無しさん
2012/11/26(月) 00:29:31.47お題の {白, 白, 黒} のところを {黒} にして、ざっとしらべてみた。
>>865 Scheme => ERROR: bad object: (black)
>>873 Haskell => Non-exhaustive patterns in lambda
>>875 Java => NaN
>>880 Smalltalk => ZeroDivide
0890デフォルトの名無しさん
2012/11/26(月) 00:35:21.10備えをしなくてはならないと思い込んでる884が間違い
0891デフォルトの名無しさん
2012/11/26(月) 21:57:07.03ここ最近の流れはつまらないだろうとは思う
0892デフォルトの名無しさん
2012/11/26(月) 23:45:08.12数学、関数型言語、パズルとかホザけば
バカはそれを真似してやりはじめる
0893デフォルトの名無しさん
2012/11/26(月) 23:47:21.200894デフォルトの名無しさん
2012/11/27(火) 07:54:36.72みるあほう
おなじあほなら
おどらにゃそんそん
0895デフォルトの名無しさん
2012/11/27(火) 08:09:41.29プログラミングだと思っているドカタにとっては
ループとifと四則演算を使っただけでパズル扱い
0896デフォルトの名無しさん
2012/11/27(火) 15:56:30.930897デフォルトの名無しさん
2012/11/27(火) 19:19:41.12本当に無駄な時間だった。結局、プログラミングってAPIを繋げることだったんだよ
0898デジタルハリウッド@偏差値45
2012/11/27(火) 21:23:59.850899デフォルトの名無しさん
2012/11/27(火) 22:15:56.870900デフォルトの名無しさん
2012/11/27(火) 22:28:45.850901デフォルトの名無しさん
2012/11/27(火) 22:33:57.520902デフォルトの名無しさん
2012/11/28(水) 02:02:55.970903デフォルトの名無しさん
2012/11/28(水) 02:06:35.88高速化やら何やらのために頭をひねるときもあるのに
十把一絡げにしちゃう男の人って……
0904デフォルトの名無しさん
2012/11/28(水) 09:59:21.95デジハリが低学歴? 卒業生には筑駒出身者もいるんだぞ。
0905デフォルトの名無しさん
2012/11/28(水) 12:32:34.910906デフォルトの名無しさん
2012/11/28(水) 15:17:41.08新卒でないとダメって、実際、すごくアホな風潮だよね
金出して入らないと学べないようなことなんてあるの?
0907デフォルトの名無しさん
2012/11/29(木) 09:07:05.77LLの定義にもなってしまうが
0908デフォルトの名無しさん
2012/11/29(木) 21:02:31.09以下のような個数毎に改行して表示する場合
各言語ではどのように書きますか?
便宜上それぞれの数字の型は 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
0909デフォルトの名無しさん
2012/11/29(木) 21:40:01.45Haskell
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]
0910デフォルトの名無しさん
2012/11/29(木) 22:27:00.440911デフォルトの名無しさん
2012/11/29(木) 22:28:45.470912デフォルトの名無しさん
2012/11/29(木) 22:34:46.81Python
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)
0913デフォルトの名無しさん
2012/11/29(木) 23:23:27.50(format t "~{~5@{~2d ~}~%~2@{~4@{~2d ~}~%~}~}"
(loop for i upto 64 collect i))
0914デフォルトの名無しさん
2012/11/30(金) 01:20:46.05Squeak 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
0915デフォルトの名無しさん
2012/11/30(金) 07:25:21.55@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 = (省略)
0916デフォルトの名無しさん
2012/11/30(金) 07:53:21.16HaskellやSmalltalkもLLじゃないと思う
0917デフォルトの名無しさん
2012/11/30(金) 11:28:00.79python
for i in xrange(65):
print i, (['']*4+['\n']+['']*3+['\n']+['']*3+['\n'])[i % 13],
0918デフォルトの名無しさん
2012/11/30(金) 11:31:08.62for i in xrange(65):
print '%2d%s' % (i, (['']*4+['\n']+['']*3+['\n']+['']*3+['\n'])[i % 13]),
0919デフォルトの名無しさん
2012/11/30(金) 12:49:05.50Perl
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;
}
0920デフォルトの名無しさん
2012/11/30(金) 20:18:55.50いきなり出力するタイプがあるね
0921デフォルトの名無しさん
2012/11/30(金) 22:48:19.09Scheme
>>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))
0922デフォルトの名無しさん
2012/12/01(土) 00:16:45.02Perl
use 5.01;for(2..16){$_/=.23;say join' ',$_-8..$_-4.6}
明らかにダメな方向に進んでしまった
0923デフォルトの名無しさん
2012/12/01(土) 01:12:52.33PowerShellでものっそいべた書きかつ副作用万歳
$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] )
0924デフォルトの名無しさん
2012/12/01(土) 13:21:37.37別にそんなことはなかったぜ
0925デフォルトの名無しさん
2012/12/01(土) 20:34:27.14まあ書くのは簡単だったよ、べた書きだから
正規表現全開で書けばすっきりな気がしていたが
別にそんなことなかったぜ
[Regex]::Matches("$(0..64) ", "((\d+\s){5})((\d+\s){4})((\d+\s){4})") | % { $_.Groups[1,3,5].Value }
0926デフォルトの名無しさん
2012/12/01(土) 21:48:54.21gawk 拡張性の無い方向で
BEGIN {
d = 0
for(i = 0; i < 65; i++) {
d = (d + 3) % 13
ORS = d < 3 ? "\n" : " "
print i
}
}
0927デフォルトの名無しさん
2012/12/01(土) 22:23:37.24確かに拡張性はないけど、ようそんな法則性見つけるねぇ・・・
0928デフォルトの名無しさん
2012/12/02(日) 00:06:30.97最近はGUI周りでのjavascriptパインドの対応状況も、かなり良いよね
gtkやwxWidgetsって生残るのかしら
0929デフォルトの名無しさん
2012/12/02(日) 00:09:59.870930デフォルトの名無しさん
2012/12/02(日) 00:34:37.14numbers = (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"
0931デフォルトの名無しさん
2012/12/02(日) 10:18:57.23Python
for x in range(65):print x,"\n"if 3*x%13>9 else"",
0932デフォルトの名無しさん
2012/12/02(日) 10:50:06.67for 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
0933デフォルトの名無しさん
2012/12/02(日) 11:24:21.41急に発狂してどうした?
0934デフォルトの名無しさん
2012/12/02(日) 11:44:01.01スマホのステマか
0935デフォルトの名無しさん
2012/12/03(月) 13:43:42.44いずれは全部勉強するつもりなんだけど。
0936デフォルトの名無しさん
2012/12/03(月) 13:50:10.280937デフォルトの名無しさん
2012/12/03(月) 13:54:45.26ブログとか掲示板とかならPHPだし、UIとかajaxならJavaScript、検索エンジンとか自然言語処理ならPythonがサンプル豊富なイメージ
というのは、行き詰まるのが一番こわいから
あとデータベース設計は正規化とか関連性とかがわかる程度には理解しといた方がいいも思う
思ってるサイトができるといいな
0938デフォルトの名無しさん
2012/12/03(月) 14:32:04.740939デフォルトの名無しさん
2012/12/03(月) 15:34:47.59Perl使えばいいのに
0940デフォルトの名無しさん
2012/12/03(月) 15:36:40.200941デフォルトの名無しさん
2012/12/03(月) 15:43:51.74ruby:マイナー
python:可読性OK、流行ってる、日本語情報もOK
0942デフォルトの名無しさん
2012/12/03(月) 15:47:34.23どっちがいいの?
0943デフォルトの名無しさん
2012/12/03(月) 15:56:46.62pythonとして徐々に3にシフトしていく方針みたいだし
すぐに2から3に乗り換えられないから互換性のため2が残してあるのであって
0944デフォルトの名無しさん
2012/12/03(月) 16:01:27.870945デフォルトの名無しさん
2012/12/03(月) 17:41:41.680946デフォルトの名無しさん
2012/12/03(月) 18:06:12.540947デフォルトの名無しさん
2012/12/03(月) 18:14:20.470948デフォルトの名無しさん
2012/12/03(月) 18:16:18.67Perlはゴミ
Python最高
0949デフォルトの名無しさん
2012/12/03(月) 18:19:29.780950デフォルトの名無しさん
2012/12/03(月) 19:45:59.42だって奴ら実用プログラムなんて書かないんだろ?
0951デフォルトの名無しさん
2012/12/03(月) 20:06:58.29意識の高いクズばっかりだなって
0952デフォルトの名無しさん
2012/12/03(月) 20:25:23.30整備されたドキュメントもない過酷な環境で生きてるかわいそうな人達なの!
「そんな苦労をものともせず最強の言語使う俺スゴイ」って正当化するしかないの!
0953デフォルトの名無しさん
2012/12/03(月) 21:09:40.45LISP使い「ふっ・・・俺たちはLISPという精神と時の部屋に入って学んできた・・・」
とか思ってんだろうな
そして見下してるんだよ
「関数型言語って知ってる?」みたいに(笑)
こっちは実用的なものに興味があるのに変な自分の知識自慢とコア気取りをしててウザいな
>>952のいうとおりだ
早く消えてほしい
プログラミング通気取るとか ”悟り!!”とかほざいてやってるやつらがうざい
0954デフォルトの名無しさん
2012/12/03(月) 21:32:57.08人と同じことをすると怒られるような気がしてマイナーな分野にいっちゃう
逆に、意識の低すぎるやつは実用のためなら再発明も盗作もするんだろうな
0955デフォルトの名無しさん
2012/12/03(月) 21:42:06.44実際に再発明しちゃうから、コードを共有しないドキュメント書かない保守しない
という説もある。怠惰の美徳が皆無
0956デフォルトの名無しさん
2012/12/03(月) 21:55:26.10wwwwww
0957デフォルトの名無しさん
2012/12/03(月) 21:56:54.35Perlerについて言ってみろ
0958デフォルトの名無しさん
2012/12/03(月) 21:57:39.64でも、プロダクトレベルのものは見たことない。
0959デフォルトの名無しさん
2012/12/03(月) 22:01:37.19それくらい簡単にできるってたとえばどんなこと?
0960デフォルトの名無しさん
2012/12/03(月) 22:02:02.340961デフォルトの名無しさん
2012/12/03(月) 22:25:57.920962デフォルトの名無しさん
2012/12/03(月) 22:30:31.26新しい内部DSLを作りたくなるのはなぜなのか
0963デフォルトの名無しさん
2012/12/03(月) 22:59:33.25アルゴリズムなどを考察する上で非常に適した言語の一つだと思ってるんで
尊敬はしている
0964デフォルトの名無しさん
2012/12/03(月) 23:04:31.87PHP->javascript->python
今後はjavascriptだけで十分な要件を満たす
0965デフォルトの名無しさん
2012/12/03(月) 23:05:03.36LLにはLISP発祥の機能は沢山あるから凄いとは思うが
実用にしたいとはあんまり思わない
0966デフォルトの名無しさん
2012/12/04(火) 00:21:29.20今でもcommon lispが使われるような用途ってあるのかな
というか、時代的にグレアムやESRに感化されてlispを学ぶ時代でもないんでねーの?
プログラミング入門や実用的な価値からすれば、lispよかprologの方に軍配上がるしね
0967デフォルトの名無しさん
2012/12/04(火) 00:28:34.380968デフォルトの名無しさん
2012/12/04(火) 00:30:10.55オブジェクト指向の方法論やOSSの活動で山ほどの設計が見える昨今では、
下手に書くよりかも読んだ方がはやいと思う。
古きよき日々、男たちが真の男であった計算機の黎明期にでも生まれたかったな
0969デフォルトの名無しさん
2012/12/04(火) 00:46:22.66Python → 英語
的なイメージ。
0970デフォルトの名無しさん
2012/12/04(火) 02:19:37.660971デフォルトの名無しさん
2012/12/04(火) 02:52:09.97実用プログラミング = webサイト構築
が成り立つというだけの話
0972デフォルトの名無しさん
2012/12/04(火) 03:01:12.150973デフォルトの名無しさん
2012/12/04(火) 03:14:02.070974デフォルトの名無しさん
2012/12/04(火) 10:19:52.140975デフォルトの名無しさん
2012/12/04(火) 10:35:00.02http://youtu.be/OF5mGoKcm80
0976デフォルトの名無しさん
2012/12/04(火) 11:20:09.88日本では1993〜1995年くらいから
0977デフォルトの名無しさん
2012/12/04(火) 12:12:33.55その道の第一人者になりたいやつが多い
0978デフォルトの名無しさん
2012/12/04(火) 14:25:38.53それ以降は後から来た奴の為にも油田を掘り起こすなんてやめて欲しい
0979デフォルトの名無しさん
2012/12/04(火) 19:49:15.820980デフォルトの名無しさん
2012/12/04(火) 19:52:53.05使えないやつは低脳
0981デフォルトの名無しさん
2012/12/04(火) 21:18:07.20関数型スタイルの素晴らしさを認めざるを得ない
0982デフォルトの名無しさん
2012/12/05(水) 00:54:04.49関数型だけでは大規模なものを作るのは難しい。
0983デフォルトの名無しさん
2012/12/05(水) 02:17:59.29LISPの最大の難しさは関数型の概念でもマクロでもなくて、
情報を得ようとすると必ず立ちふさがる英語だと言ってみる(ゆとり)
0984デフォルトの名無しさん
2012/12/05(水) 03:01:49.64副作用が無いようにしたほうがいいのはわかるが、
ユーザーが求めているものは副作用。
例えば処理結果が画面に表示されるとか
0985デフォルトの名無しさん
2012/12/05(水) 07:54:52.48ちゃんと切り分けてたら全く面倒じゃない
0986デフォルトの名無しさん
2012/12/05(水) 08:36:55.63関数型の方が得意だし
0987デフォルトの名無しさん
2012/12/05(水) 10:29:31.44できるなら平行で動かしたい系で、計算完了順序が不定だが、
出力順は確定している場合は、出力部分でTCP/IPの
バッファリングのようなことをする必要があるのでしょうか。
0988デフォルトの名無しさん
2012/12/05(水) 14:43:51.07到着した分から虫食い的に埋めてくとかも有りかもなー。
0989デフォルトの名無しさん
2012/12/05(水) 19:59:47.21こういうこと?
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]
0990デフォルトの名無しさん
2012/12/05(水) 21:10:26.66手続き型forループとかウンコだわ
0991デフォルトの名無しさん
2012/12/05(水) 22:39:06.23>>989と同じ内容のコードを書け
0992デフォルトの名無しさん
2012/12/05(水) 22:53:11.61http://toro.2ch.net/test/read.cgi/tech/1354715494/
0993デフォルトの名無しさん
2012/12/06(木) 00:30:02.89副作用のあるものはオブジェクト指向
ないものは関数型じゃだめなの?
0994デフォルトの名無しさん
2012/12/06(木) 05:49:18.44ありがとう!
0995デフォルトの名無しさん
2012/12/06(木) 08:20:23.51別にオブジェクト指向は副作用の扱いが
得意ってワケじゃないよね
0996デフォルトの名無しさん
2012/12/06(木) 11:01:15.860997デフォルトの名無しさん
2012/12/06(木) 12:16:50.07副作用の取り扱いにくいさはその影響が何処にまで及ぶのかがはっきりしないことであって、
その影響範囲をオブジェクトの単位で整理するっていうのはわりとマシな対処方法だと思う
0998デフォルトの名無しさん
2012/12/06(木) 12:57:22.520999デフォルトの名無しさん
2012/12/06(木) 14:12:13.381000デフォルトの名無しさん
2012/12/06(木) 14:42:53.2310011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。