【PHP,Python】スクリプト,バトルロワイヤル36【Perl,Ruby】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN一行書いて、実行(正確には構文ミスしてないか調べる)が
必要なんだろうね。
>>998
試行錯誤開発ならスクリプト言語じゃなくても出来るだろ。
どうせお前の言ってる試行錯誤って設計レベルではなく
コードを一行一行実行しなくちゃならない
正しく構文かけたかな?の試行錯誤だろw
そんな行単位で試行錯誤することなんてねーよ。
試行錯誤するときはクラスレベルだろ。
0002デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN簡易なサンプルを書くときに使うもんだろ。
あんなので開発や試行錯誤するやつなんていねーよ。
どんだけプログラミング=関数の動きを見るだけのやつなんだ?w
自分で関数書けよ。
0003デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN構文エラーで悩まされる確率が高い時点で初心者だろうな。
間違って10かける所を100かけてしまったら、
100で割って再開でもするのか?
データベースを間違って更新してしまったら、
修正して再開すんのか?
バグってのは普通こういうものだ。
途中で止まって再開なんて出来やしない。
REPLでそんな非効率な開発なんかしてねーで
テストコード書いて綺麗な状態から
何度でも実行できるようにしろよ。
0004デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN静的言語ではこうやるし、スクリプト言語だとしても他のやり方はありえない
という決め付け、思考停止、REPLの存在否定、IDE至上主義
初めから議論する気はないんだ
0005デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.ANあんたが大将。スクリプト言語は糞だ。だから出ていってくれないかな
なんだこのスレは?この>>1は?キチガイ荒らしは常に頭が逝ってる
0006デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.ANプログラミングのプの字も知らないカスに
0007デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.ANてめぇふざけんなよ
スレ建てたことないのかよ?
0008デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN他人から見たら何を言ってるのか一切理解不能
削除依頼出してこいよ。ま、いつもの乱立連投キチガイ荒しのように立てっぱなしだろうがな
0009デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.ANじゃあ、使ってる言語とREPL。
そして複数のファイルにわかれて複数の関数とクラスを
使ってるレベルのプログラムをREPLで効率的に
開発できる例を見せてくれよ。
間違ってコードを実行した時、どうリカバリーすんの?
それがないと説得力がないだろ。
0010デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.ANじゃあ、じゃなくて削除依頼出しこいよキチガイ
0011デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.ANその関数をコンパイルなしに試せる、試し続けられることがメリットだろ
REPLの使い方おかしくね。なにが「どうリカバリすんの?」だよ馬鹿すぎる
削除依頼出してこいクズ
0012デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.ANREPLで試行錯誤して開発するらしいよ。
使い方間違ってるよね。
REPLは単に実験するための道具なのに。
単純にテキストエディタのほうがREPLよりも高機能。
それだけで、そんな作成して実行して途中で止まったとこで
また書いて、続きを実行とかいう、
超非効率なやり方をするやつはいない。
0013デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN0014デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.ANその実験環境があるからこそ、試行錯誤的な開発が容易になるんだろ
なんで片一方しか使わない前提で「リカバリどうすんの?」とか言ってんの?池沼か?
削除依頼出してこいクズ
0015デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN試行錯誤的な開発は、
REPLでやるものではないという話し。
実験っていい方が悪かったか?
単に知らない関数の動きを調べるだけだよ。
マニュアル読むのと変わらん。
そんなのは試行錯誤じゃない。
試行錯誤というのは自分の書いたコード、および設計を試行錯誤するもんだ。
関数の使い方を試行錯誤するとかどんだけレベルが低いんだよw
0016デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN試行錯誤することを試行錯誤と呼ぶし、それはREPLで効率的に出来る
削除依頼出してこいよクズ
0017デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN> 前提で「リカバリどうすんの?」とか言ってんの
しょうがないだろ。
だって、書いて実行して、エラーで止まって
続きを書いて、実行を再開するのが、
テストコードを最初から再実行するよりも
効率いいと言ってるバカが居るんだから。
エラーで止まって再開できるのは、構文エラーのみ。
論理エラー、つまり実行したら想定したら違う状態になる。
不正な状態から再実行するにはリカバリが必要なんだよ。
どう考えてもテストコード書いて再実行するほうが
効率がいいに決まってるじゃないか。
0018デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.ANだったらお前の定義の試行錯誤を書くべきだろ。
早くREPLで試行錯誤の例を見せてくれ
もちろん関数の使い方を調べる以外のな。
それがファイルに書いて最初から再実行するよりも
効率がいいかどうか判断してやるから。
REPLは関数の使い方を調べるツール
試行錯誤をするツールではない。
0019デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.ANそれはそういう使い方しか想定してないからだろ
REPLは常に起動して、
しかも自分が編集中の複数のライブラリと自作ファイルを常にすりあわせて実験できる
これが試行錯誤じゃなくて一体なんなのか
削除依頼出してこいクズ
>>18
REPLで関数の使い方を実験して
上手くいったコードを実装に使う
それのどこが試行錯誤的じゃないんだ?
REPLがなければいちいちコンパイルすることだぞ
マニュアルを読むだけじゃできない
削除依頼出してこいクズ
0020デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.ANさっさと削除依頼出してこいクズ
0021デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN何で使った事無いレベルで無知なんだろう
あ…(察し)
0022デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.ANREPL向きの言語というものがあるということがなんで理解できないんだろう
あ、察し!
0023デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN簡単な処理ならコードを圧縮できる関数型言語は静的言語でもREPLは使える
C#とかC/C++のREPLを常用してる奴なんていないだろうな
0024デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN> もちろん関数の使い方を調べる以外のな。
マニュアルで関数の使い方を調べて
呼び出すだけのドカタ仕事しかしてないと、
こういう発想しか出てこないんだな
0025デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN関数の中身はコード書く前から一から十までExcel上で決まりきっているもの
これがドカタですよ
0026デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN優秀な1だな
どうすればスレが盛り上がるか心得ているな
0027デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN0028デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.ANTDD知らないの?
0029デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN0030デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN0031デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN0032デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN0033デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.ANここってオブジェクト指向のスクリプトのスレだったのか。
まあshやsed、awkの話題をここでするのは違うか。
0034デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN副作用がなんの関係があんの?
構文エラーで止めてコード修正して進むメソッドは、
関数を最初から再開しないってことなんだよ。
0035デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN[].each do |x|
が
[]...eachd o|x|
とかなってたら、コンパイル(スクリプトの)時にエラー出るから最初の一行目から実行されない
0036デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN驚愕的なのは、スクリプトでコンパイルってなんだよ?
コードのパースは実行に含まれるって言ってる奴がいるってこと。
0037デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN> 副作用がなんの関係があんの?
> 不正な状態から再実行するにはリカバリが必要なんだよ。
馬鹿がリカバリ云々言ってるからさ
0038デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN話わかってないんじゃね?
構文エラーで止まった所で修正して、
続きを実行する開発方法が
効率がいいとか言ってる馬鹿がいるから
そいつに言ってるんだよ。
副作用全く関係ない。
副作用がない関数であったとしても、
構文エラーはともなく、間違ったコードを実行してしまったら
止まった所からリカバリなしに実行はできない。
俺はそんなアホな開発方法なんかやらないで、
テストを再実行しろと言ってる。
関数をはじめから実行しなおせと言ってる。
0039デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.ANインタープリタでの実験による試行錯誤を使った開発が
いちいちコンパイル実行を繰り返すより楽という至極当然の事実を述べてるだけ
何が最初から最後までテストだよwアホすぎる
削除依頼出してこいクズ
0040デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.ANREPLはもうひとつ前の段階として使える
構文エラーで止まったところで修正して云々という妄想は馬鹿すぎて
削除依頼出してこいクズとしか言えないけど
0041デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.ANどう自己評価してるんだろう。死にたくならないのだろうか
0042デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN0043デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.ANまず日本語を喋ってくれ、構文エラーで〜構文エラーはともかく〜(どっちだよ)
テストを再実行しろ〜(は?何が再なんだ?)
自分が勝手に想定してるこっちに全く見えない前提が多すぎて意味不明
削除依頼出してこい
0044デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.AN俺は出しません。
以上
0045デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.ANまったく支離滅裂で何を言ってるのか意味不明なんだが、
何をリカバリしろって言ってるんだ?
お前自分で何書いてるか意味分かってないだろ。
0046デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN何をリカバリするかわかんないの?
間違ってコードを実行した時、
続きから実行することは出来ないんだよ。
0047デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN0048デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN間違った開発をしてる仮想敵を作ってオラオラ俺のやり方が正しいぞ!と言われてもね
まずお前のやり方って何なのかさっぱり分からんし
仮想敵はお前の都合のいいように間違ってくれてるだけのオナニーショーだし
ちゃんと指摘されたことは受け入れろよ
なんで最初に言った妄想を延々と繰り返し続けるんだ?
完全に会話が噛み合ってないわ
削除依頼出してこいクズ
0049デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN書いてエラーで止まるから
また続きを書けばいいとのこと
そんなことができるのは構文エラーだけ。
実際は論理エラーで間違った計算を実行してしまうのだから
都合のいい場所で止まったりしない。
だからREPLでの開発は非効率なのだ。
0050デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.ANさっさと削除依頼出してこい池沼
0051デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.ANREPL使った事無い上に、REPLが何の略かすら分かってないのか
0052デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN0053デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN0054デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN末尾!つけてもらったほうがよくね?
もしかして…とか疑ってしまう
0055デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.ANそこから分かることは海外産は皆無に等しいという事実
0056デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN0057デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN初っぱなから、ある程度使えるlinux、mac とでのマルチプラットホームなやつ
その方向には向かってなさそうだけどね。
0058デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN0059デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.ANLinuxはともかく、MacにプリインストールされてるPythonは
OSバージョンによってバージョンが全然違うから共通プラットフォームとしては当てにならないし
結局自分で好きなバージョンをインストールしたらしたで元のと競合したりしてトラブルの元で開発者にはウザがられてるだろ
0060デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN0061デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN今時、クライアントはLinuxもMacもその方向には向かってないだろ
マルチプラットフォームはブラウザでやれという流れ
0062デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN0063デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.ANなに言ってるの?
Macは開発マシンとして有望だし。
0064デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.ANどっちにしろ開発者しか使わないので、別途インストールで構わない
0065デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN0066デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANの地味な戦い
0067デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANLinuxもそうですが。
0068デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN0069デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANそれすら大変というWindows厨
0070デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN32bit/64bit版の選択が必要で、ものによってはVCでビルドしたものとmingwでビルドしたものとかが
存在してわかりづらい。
0071デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANhttp://windows.php.net/download/
いろいろ注意書きを読む必要あり。
yum install phpでインストールできるLinuxとは大違い。
0072デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANそこはマルチは無しで、HSPでも入れときゃ良いと思うが
スクリプト言語きっかけにして他のOSに興味でも持たれたらイカンから、windows命のHSPが良い
0073デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN0074デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANShellとPerlとTclを煮つめた感じの…
0075デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANWindowsならRubyInstallerをインストールするのがいいでしょう
としか書いてない
VC版とかCygwin版とか、余計なこと書いてないので迷わない
0076デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANなんか、c#で、いい気がしてしまった。
でも、monoで作ったexe、linuxでもダブルクリック起動が、標準でできないんだよね〜。
愚痴った挙げ句、スレチな事書いてごめん。
でも、最近、python勉強中です。
0077デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANGUIアプリとかだとどうせ色々必要なライブラリを追加しなきゃいけないから
結局のところLinuxやMacでもPythonランタイム丸ごとアプリに同梱することになるんだよね
0078デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANpypiくらい調べてきてから書け
0079デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN0080デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANBlenderとかもそうだね
Pythonがアプリへの組み込みに適してるのは大きな売りの一つなのに
何を必死に否定する必要があるのか
クライアントに配るなら組み込んだほうが確実だろ
0081デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN実行にシステムのPython使ったら台無しだ
0082デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANアプリがPythonを使うからだろw
0083デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANPythonが私を使わせるのです
0084デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANプラットフォーム依存部分は言語処理系が差異を吸収するのだから、
コード(スクリプト)のポータビリティは保証されるだろ
エンドユーザ向けアプリに処理系を同梱することの一体何が問題なんだ?
0085デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANDropboxはPython製
0086デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN同梱したほうがいいという意味で言ったつもりだった
0087デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANそこにはカタロニア語で書かれた一枚の手紙と、分厚いカタロニア語の辞書が入っていた。
0088デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN同梱しても問題無いサイズではある
0090デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.ANもう、処理系は全部アプリに内蔵すればいいんだよ。
Linuxとか。
システム標準の処理系に依存して動くとか動かないとか
アホらしい。
0091デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.AN大量のPython製ソフト(当然、処理系は同梱されない)があるのに、
ほんの極一部の例だけで結論を出されてもなぁ……
0092デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.AN同じ処理でも関数でまとめずに
コピペしまくるんだろうなぁ
0093デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.ANだいたいそんなもの使いこなせるユーザーが対象なら元から入ってるPythonなんてそれこそどーでもいいだろ
0094デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.AN皆お前みたいなアホじゃないんだよコピペ厨
0095デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.AN奴らは黒背景にプロンプトの画面見たら恐怖を感じるのに
009657
2013/07/24(水) NY:AN:NY.AN0097デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.AN0098デフォルトの名無しさん
2013/07/26(金) NY:AN:NY.AN0099デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.AN0100デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.AN0101デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.AN正直、Java系スクリプトやScalaで簡潔に書けてるように感じるのは八割くらい
例外処理が強制されないからだと思う
0102デフォルトの名無しさん
2013/07/27(土) NY:AN:NY.AN0103デフォルトの名無しさん
2013/08/02(金) NY:AN:NY.ANID:quhddWZK!何それhaskell,ch, cint, pike?
0104デフォルトの名無しさん
2013/08/03(土) NY:AN:NY.AN動的言語が終わったのか
プログラミング言語自体が安定期に入ったのか
2chから人いなくなったのか
0105デフォルトの名無しさん
2013/08/03(土) NY:AN:NY.ANここはスクリプト言語についての話であり、動的静的は関係ないからだろう
動的なコンパイル言語もあれば静的なスクリプト言語もあるし
0106デフォルトの名無しさん
2013/08/03(土) NY:AN:NY.AN一部言語のスレに他言語の原理主義者を装った荒らしが棲みついたせいで
どの言語のユーザも不幸になってる気がする
0107デフォルトの名無しさん
2013/08/03(土) NY:AN:NY.ANID:QuQbJ8u+!それよか、RだよR。不毛な言語論争よか統計、機械学習の方が金になるって皆が悟ったんだよ。
0108デフォルトの名無しさん
2013/08/03(土) NY:AN:NY.ANID:QuQbJ8u+!馬鹿馬鹿しい。本当に馬鹿馬鹿しい。皆、ocaml,erlangあたりに行ったんじゃないの?
今さらベンチャーがPython、Railsってだけでも何か負け犬臭しかしないじゃんね
0109デフォルトの名無しさん
2013/08/04(日) NY:AN:NY.AN0110デフォルトの名無しさん
2013/08/05(月) NY:AN:NY.AN0111デフォルトの名無しさん
2013/08/05(月) NY:AN:NY.AN0112デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.AN先日PHPのソースコード見たら、すげー汚いと感じた。
$var->member
特にこれ。
Cの負の財産だから仕方ないけど。
0113デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.AN0114デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.AN単なるメンバ参照の "." と、それとは別に -> なんてのがあるわけだけど、
近代的な言語なら "." だけで良い(Javaとか)。
そういった所を深い考えもなしに -> とか書いてかっこいいとか思っちゃうのが
PHP の感覚なんだと思う。
0115デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.ANID:AaxmOBE0!ライブコーディングでVimの補完なしにpythonのコードをガリガリとTypeErrorだとか
newbieの記憶には残らないものをガリガリと書いていたけど、あれなら適当な軽量IDEでも使った方がマシで、
わざわざ瑣末なことを記憶するだけの才能があるならperlで書いた方が速いだろとか思ったけれど思っても口にはしない。
そしてまぁ、本業なら何の迷いもなくJavaとPHPで良いね
0116デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.ANひょっとして、-> がシンタックスシュガーって知らないとか?
いやいや、まさかそんなアホがいるわけないか...
0117デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.AN(*ptr).hoge って書けばいい、って話だろ、カッコが要るだけで。
そもそも*が後置なら(乗算と区別できないから ^ とか別の記号にする必要があるけど)
ptr^.hoge で良かった、ということになるんだけどな。
0118デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.ANID:AaxmOBE0!0119デフォルトの名無しさん
2013/08/08(木) NY:AN:NY.AN0120デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.AN0121デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.AN> そもそも*が後置なら
ひょっとして、* が単項演算子と言うことを知らないとか?
いやいや、まさかそんなアホがいるわけないか...
0122デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.AN0123デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.ANエキスパートCプログラミングで出てくる話だっけ
0124デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.AN* は単項演算子であるという知識があるから
前置/後置という>>117の発想ができるわけで、
知らなかった、あるいはつい最近知ったばかりだったのが
>>121であると読めてしかたがない....
2項演算子の前置/中置/後置を指しているとも思えないし....
もしかして自虐的なギャグだったのか?
高度すぎてついていけない
0125デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.AN0126デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.ANとすると ++ や -- が演算子だということがわかってない?
++ や -- を前置だけで使っていた?
0127デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.AN「 . 」や「[]」が後置の単項演算子だしな。
0128デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.ANarray()みたいに7文字もあると[]の方がいいなと思うけどね
0129デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.ANわざわざ書かなくていい言語はメジャーな中ではRubyしかない。
0130デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.ANそれはすごいね
end
0131.py
2013/08/09(金) NY:AN:NY.ANそれはすごいね
0132.py
2013/08/09(金) NY:AN:NY.AN0133デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.ANああ ++ と -- は忘れてたわ。
まあ、オペランド変更するやつまで演算子と言うのはどうかと思わないでもないが。
>>125
> レベルの違い過ぎる相手に噛みついて、壮絶に自爆って感じだなw
それ、「[]」が後置の単項演算子だしな とか、言ってる奴に言ってやった方がいいぞ
単項演算子すら知らないみたいだしね (w
0134デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.ANそもそも論を語りたいなら、(演算子の前置/後置を持ち出すのではなく)
優先度で話を止めておくべきだった
例:そもそも演算子の優先度について . よりも * が高ければ(....略....)
^ptr.hoge で良かった、ということになるんだけどな。
ポインタ参照に後置の上矢印を使うのは、Pascalの流儀
ポインタ参照/メンバ選択に前置の演算子 ! と # を使うMLを含めて以下にまとめる
C:ptr->hoge または (*ptr).hoge /* -> は構文糖 */
Pascal:ptr^.hoge
ML:#hoge (!ptr) (* ! より # の優先度が高いのでカッコが必要 *)
>>117も(>>121と同じく)C言語の前置/後置を
つい最近知ったばかりだったと思われ
0135デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.AN(だからなんなんだろう?)
0136デフォルトの名無しさん
2013/08/09(金) NY:AN:NY.AN0137デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANクロージャとかクラスとかジェネレーターとかの議論の方がはるかに有意義だったな
0138デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN0139デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANおいruby10位wwwwwwwwwwwwwwwwwwww
0140デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN7月と何も変わってないけど。数字も読めないの?
http://news.mynavi.jp/news/2013/07/11/126/index.html
0141デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN0142デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANC#(VB)とPythonは総合的にRubyより上だし
Objective-Cは糞言語だけどiOS人気で残るし
Rubyの位置は別に驚きでもないわ。
Rubyのライバルは、ActionScript、CoffeeScript、TypeScript、Lua
終わったPerlあたりだし、今後も上がることはないけど。
2.0対応もろくに進んでないのに2.1が本当に年末に出たらまた多くのgemがゴミ化すんだろうなー
0143デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN> C、Java、C++、PHP、JSは悪い意味でこれからものこるだろうし
これらが残ることがどう悪い意味なのか説明してくれるか?
C 組み込みなど低レベルな領域では必要不可欠
C++ ゲーム開発、処理系開発などパフォーマンス重視な用途では必要不可欠
Java クロスプラットフォームの大規模アプリケーションを作る場合は必要不可欠
PHP, JSは代替言語があるから消えてなくなって問題ないけど。
0144デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANPython 極めて汎用性が高い素直な優等生
Webしかない言語は敵が多くて大変だね
0145デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN単純にC、Java、C++、PHP、JSついでにObjective-Cは言語として洗練されてないもしくは古過ぎる。
そんな言語でも分野によって必須だからこれからも残るんだけど、
コーダーとしてはそういう駄目な子で仕事するのはイライラするだけじゃね。
0146デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN低レベルな仕事をこなすという目的に対して極めて洗練されてる
他のは中途半端な失敗作だけど
0147デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN言語マニアか・・・?
こういう奴に限って、
まともなものを何も作ってないんだよな。
0148デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN老害COBOLだって固定長レコードを扱うことに特化した非常によくできた言語だ
コーダーがウンコだけど
0149デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANライブラリとか作ればいいと思うんだがねぇ。
イライラの原因を自分で解決できないうちは
半人前だよ。
0150デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN自爆兄貴オッスオッス!
0151デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN0152デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN>PHP, JSは代替言語があるから消えてなくなって問題ないけど。
JavaScriptは「ブラウザ向けに限れば」標準規格化されて盤石の位置にあると思う
言語仕様で問題があり多くの派生言語は生まれているが、JSそのものは必要不可欠
ただし、サーバサイドおよび汎用言語としては、存在価値を見いだすのは難しい
>144
>Python 極めて汎用性が高い素直な優等生
それにもかかわらず、Webだけは適応に失敗したという矛盾w
それにもかかわらず、ワンライナーが苦手で対話型プログラミングには不適という矛盾w
>>146
Cを置き換えるような言語は、今後も登場しないのではないかと思う
>>148
事務処理向けDSLと見れば、今でもCOBOLは優秀な言語だろね
0153デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN0154デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN0155デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANjsのシングルスレッド云々とかが何かしら奇跡的にサーバーサイドと相性良かった
まさかな
0156デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN何が出来るかとか、インフラとして利用価値が高いとかの方が
よっほど意味があると思うんだよな
そう言う意味ならC言語の代替は無いしJavaの代替も無い
JavaScriptの代替も無いし、
PHPと他のライト言語と出来ることの差も無い
言語仕様の些細な差にこだわる奴(自分で言語を設計してるわけでも無いくせに)
ってのは無能にしか見えないね
0157デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN実際jsにクロージャがなかったら今の栄光はない
0158デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN実際、「極めて汎用性が高い素直な優等生(>>144)」を自称するPyhtonにおいて、
最大の設計ミスの一つが「クロージャの欠落」だと思う
0159デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN0160デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANnode.js以前のマルチユーザサービスはマルチスレッディングで実装するのが常識だった
それをシングルスレッド上の非同期処理で全面的に実装したnode.jsの登場は、
一つのイノベーション(革新)であり、それが多くのWebデベロッパを引きつけた要因
ただし、node.jsは非同期処理に特化したWebフレームワークであって、
非同期処理とその利点であるスケーラビリティを重視するサービスであれば最適だが、
そうでない多くのサービスでは、node,jsが提供しない機能を自力で実装しなければ
ならないことが大きな負担になる
つまり、多くの用途にはRailsのようなオールインワン型汎用Webフレームワークが
適しているので、node.jsは注目されても普及する(他からシェアを奪う)ことは無い
また非同期処理そのものはJavaScriptでなくても実装できるし、
実際に他の言語でも(node.jsの影響を受けた?)非同期処理向けのライブラリが登場している
非同期処理採用フレームワークの先駆者としてnode.jsの功績は賞賛にふさわしいと思うが、
ただそれだけをもってWebの世界を制覇できるほど甘くはないのが現実
0161デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANnodeはモジュールを組み込んで使うプラットフォームであって、
現在では、たいていの機能はモジュールで提供されているけど?
sinatraライクなフルスタックのフレームワークもあるし
0162デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANTwisted や EventMachine が前からやってた非同期プログラミングと
Node.js のそれとではモデルが違うのん?
0163デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANnonlocalで手軽に変数に代入できる3はいいけど
0164デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN再代入は本来避けるべきもの
外のスコープの変数なら尚の事
0165デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN非同期処理を同期的に記述できるようにしてあるものに比べると微妙に見えるな
まあV8にyield来るらしいからその辺は改善されていくかもしれんが
あと非同期フレームワークの先駆者というのは嘘
>>162
フレームワークの出来栄え的には巨大でコールバック地獄なtwistedはまさにnode.jsだな
Pythonならコルーチン使ってるgevent/eventletみたいな系統のほうが書きやすいよ
asyncみたいな特殊なキーワードすら要らないし標準のソケットライブラリに
モンキーパッチ当てて非同期化できるんで、同期とほぼ全く同じコードを
透過的に非同期に出来る
node.jsより古参のはずだけどな
0166デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN比べるなら言語で比べるべきではないの?
0167デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANええっ?Perl・Ruby・Javascriptにクロージャってないんだ!!
0168デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANどっかの関数ポインタすらない言語は頻繁に匿名クラスを使うしかないから
クロージャが必要になってくるけど
0169デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANマルチスレッドじゃない方の非同期な
そんなもん使わないで>>165の言うように言語サポートによって同期っぽく書けるのが理想だけど
0170デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN早くも消滅した?
0171デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN0172デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANMSは言語のセンスあるからごり押しも許せるけどGoogleはどうしようもない
0173デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANjavascriptの冗長な記述そのもの
alterjs使うと世界が変わる
0174デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN実用的装備を整えるべき。
それが普及の大前提。
話はそれからだ。
Googleは実験的に初めて放置しやすい。
0175デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANあれしこで冗長ってw
お前、そんなにたタイピング速度遅いの?
俺は冗長な記述よりも
考えるほうが時間が掛かるが?
0176デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANそもそもJavaScriptのシンタックスシュガーに過ぎないから学習コストも0で覚えるのは余裕だし
死なれても問題ないけどさ
0177デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANfunctionとreturnという単語の分は減るけど、
そんなの1関数に1回ぐらいしか使わない定義部分。
中身のコードを減らしたいのに、括弧だけの行が
減るぐらいしか効果がない。
0178デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN無駄な記述やインデントをしないといけないから
修正も面倒になる
ああもしかして一つの関数に長文書いちゃうタイプか?
0179デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN全然大したことじゃないって話だよ。
単に打つ文字列の違いでしか無いだろ。
そんな細かい文字数を来にしてないで
本質的なコード量を減らせ
文字数を減らすんじゃない、
処理コードを減らせ。
0180デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN下記は jQuery を使った典型的な JavaScript のコード例である。
$(function() {
// 初期化のためのコード
});
CoffeeScript では function キーワードが -> で置き換えられている。
$ ->
# 初期化のためのコード
jQuery などではクロージャを多用するが、CoffeeScript ではクロージャが簡潔に書けるようになっている。
これは /info の内容を取ってきて、#info にそれを入れる場合の jQuery を使ったJavaScript の例である。
$.get("/info", function(txt) { $("#info").text("info = " + txt) }, "text")
CoffeeScript でも以下のように1行で書け、75文字が67文字へと1/10程度文字数が減っている。
$.get("/info", ((txt) -> $("#info").text("info = #{txt}")), "text")
0181デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN処理を減らす余地も生まれやすいだろ
冗長であることを誇ってどうするんだこの馬鹿は
0182デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN0183デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN手続き型というより、オブジェクト指向かもな
内部に状態変数を持っていて、それを更新する
まあそれと対極の関数型の考え方も理解できないではないが、
主流のスタイルじゃないし、現実問題やっぱり再代入をする
スタイルが必要なことが多いんじゃないかな
0184デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANだから記述量と文字量の違いを区別しろよ。
やってる処理の内容が同じ場合、
それは文字量が減っているだけ。
記述量の話をお前はしていない。
CoffeeScriptは文字量を減らすだけ
記述量が減る例はごくわずか。
0185デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANこれは間違い。
index を idxと略しても
コードの見通しが良くなるとは限らない。
0186デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANそんなくだらない事言ってないぞ?
冗長の意味履き違えるなよ
0187デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN冗長の意味を履き違えてるのは
CoffeeScriptだろ。
CoffeeScriptは単に文字を減らしているだけ。
そもそもシンタックスシュガーだろ?
文字を減らしただけって証拠だよ。
0188デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANまさしく、文字を減らしただけだな。
0189デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN余計な区切りや括弧やキーワードがあることで
全体の処理の流れが直観的に追えなくなる
記述量が減ることで近くのもの同士の関連がより読み解きやすくなる
シンプルな方がいいっていうすごく簡単な理屈なんだけどわからないのかな?
0190デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN0191デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANいるんじゃないかなって気づいたかもしれない。
例えば、
$('input').each(function() {
$(this).prop('disabled', true);
});
こういうコードがあった時、
$("input").each ->
$(this).prop "disabled", true
CoffeeScriptならこうかける。JavaScriuptは冗長だ!っていう人を俺は
「冗長」という言葉で指摘するのはそこじゃないだろって思うわけ。
括弧が減るのも何かを省略できるのも一緒。
そんなもん書き方を変えただけ。タイプ数が減ったとしか思わない。
冗長というのは(同じ言語において)無駄なことをやっている場合に
指すべきだと思う。最初のコードで言えば、
$('input').prop('disabled', true);
こう書けばいいわけ。こう書かないことについて、俺は「冗長」と表現する。
0192デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN重要な区切りや括弧やキーワードがないことで
全体の処理の流れが直観的に追えなくなる
セミコロンを省略できたからって
それがいいことだとは思えないんだが。
セミコロンがあれば、そこで終わりとはっきりする。
無いことで終わりなのか続いているのか
”人間が”認識しづらくなる。
そりゃ、機械は認識できるだろうけどさぁ。
俺達は人間なんだぜ?
0193デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN>function キーワードが -> に置き換えられるっていうのは
>まさしく、文字を減らしただけだな。
後者が削ってるのは文字だけじゃないよ
そのまま返すって機能がついてるし
0194デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANオブジェクト指向は指向であって、手続き型言語と関数型言語のどちらにも適用できる概念
より正確には、手続き型言語より命令型計算モデル、関数型言語よりも適用型計算モデルだ
両者の違いは、オブジェクトが可変(mutable)であるか不変(immutable)であるかという点
命令型計算モデルにおけるオブジェクト指向では、
オブジェクトにメッセージを送ると、オブジェクトの内部状態を書き換える(更新する)
適用型計算モデルおけるオブジェクト指向では、
オブジェクトにメッセージを送ると、内部状態を更新した新しいオブジェクトを返す
そして、不変オブジェクトを多用する関数型プログラミングは、
「まともなクロージャ」を備えたJavaScriptやRubyであれば一般レベルで普及している
JavaScriptであれば、jQueryがだれでも知っている実例になる
Rubyでは、たとえば以下のような関数型プログラミングのスタイルは特異なものではない
collection.select { |e| ..... }.map { |e| .... }.sort { |x, y| ....}
もちろん可変オブジェクトの使用がゼロ、つまり純粋関数型プログラミングではないが、
大域的な可変オブジェクトを極力減らし、できる限り(Rubyであれば上記コードのような)
不変オブジェクト間の演算で計算を進める方向性が見える
0195デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANそれはその通りだしCのような記述が嫌いなわけではない
ただjavaScriptの用途では匿名関数をその場で作る事が多いのに
処理と関係のない修飾が過剰になって読みにくくなっている
ocamlのlet-inのようなの
0196デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANそれは確かに処理そのものが冗長でわかりやすいな
俺が言っているのはコードの表現が冗長という事
その上でindexをidxとするうようなただ文字数を減らすだけの物は
直感を削ってしまうので冗長を削ったものではないと言った
名前付けそのものに関しては主観と言われれば終わりだが
0197デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANよくわからない
例えば、jqueryはdomの状態を変更するよ
オブジェクトを返すけど、新しいオブジェクトを作って返してるわけじゃない
だからその例で行けば関数型じゃない方のスタイルだろ
そして、パフォーマンスなどの理由から、そういう新しいオブジェクトをわざわざ作り直して
返す関数型のスタイルは今の主流のスタイルではない
0198デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN今更冗長な型づけ宣言を導入しようとしているのが笑える。
Object obj = new Object()
とか。
動的型付け言語なのに、自明な型推論すら導入しないってアホすぎる。
0199デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN同意。
オブジェクト指向モデリングで、ステートレス設計もあるので、
一概に関数型言語が、OOPと相容れないとは思わない。
しかし、状態を保持しない設計を強制するのは、
生成・破壊(コピー)コストを考えると、現実的ではない。
0200デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.ANjQueryに置けるDOM操作は一般的プログラミングにおけるI/Oであり、
I/Oを含む一切の副作用を許さないのが「純粋関数型プログラミング」と呼ばれ、
これを代表する関数型言語にHaskellがある
そして「純粋でなければ関数型にあらず」という絶対原理主義の主張もあって、
それを鵜呑みにする人も多い(多かった?)けど、>>197はその影響を受けていないかい?
ただし、このスタイルは(>>197が言うように)今の主流スタイルではないし、
もし仮に主流になるとしても遠い未来のことだと(個人的には)考えている
その一方で、部分的な再代入やI/Oといった副作用を許容する立場もあり、
LispやMLといった伝統的な関数型言語の主流の考え方にある
>>194で書いた関数型プログラミングというスタイルも、
(I/Oや限定的な可変オブジェクトを許す)後者の立場を取っている
jQueryもDOMという可変オブジェクトと破壊的操作があるけれど(=純粋ではないけど)、
それ以外の部分では関数型プログラミングのスタイルを積極的に導入していると思う
0201デフォルトの名無しさん
2013/08/10(土) NY:AN:NY.AN>しかし、状態を保持しない設計を強制するのは、
>生成・破壊(コピー)コストを考えると、現実的ではない。
基本的に同意する。
ただし、LispやMLといった伝統的な関数型言語では、
状態を保持しない設計を強制していないし、
Lispでは関数 set-car! 、MLではref型やarray型のように
(メモリやCPUの)効率を考えたコード設計も許容している
>>200で書いたように、状態を保持しない設計を強制するのは、
Haskellのような純粋関数型言語の場合だけだから、
そこは誤解しないでほしいと願う
0202デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN0203デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANだからクロージャではなく
関数内関数が欲しい。
クロージャのように記述できるが
クロージャの中と外は完全に分離されている。
0204デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN0205デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN>スコープの外側の変数を変更はあまりしてほしくない。
ここまでは賛同するけど、その後が間違っているな
だからクロージャではなくてもいいから、
無名関数内で局所変数が欲しい。
だろ
あと、後半の
>クロージャのように記述できるが
>クロージャの中と外は完全に分離されている。
は意味不明
関数内関数であっても、外の関数と内の関数が完全に分離されている点では同じじゃね?
0206デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN0207デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANそんなことは当たり前にできるべきだし
クロージャーみたいな名前で呼ばれてること自体がおかしいんだよ。
C#はクロージャーってわざわざ名前つけてないけど、普通にそういうことができる。
0208デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANclass A {
function foo() {
:
: 長い処理
:
}
}
関数foo()をリファクタリングしたとき、
foo()の中でやっていた処理を
foo()の外にに出すのは
スコープ的にはおかしいと思うんだ。
0209デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANfunction foo() {
var i = 0;
:
bar()
: 長い処理
bar()
:
}
function bar() {
:
}
}
スコープ的にはおかしいけど、リファクタリングでよくこうやるよね。
で、この場合bar()から i は見えないんだ。
つまりコードの独立性が高いよね。
0210デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN>要は一定の処理を別にふって、その振り先に引数渡したり戻り値受け取りたいだけだろ
それは、そもそもクロージャではないだろ
ただ単に関数(メソッド)を第一級市民として(=値として)扱いたいだけなら、
C言語にも関数ポインタがあるから記述できるけど、それをクロージャと呼ぶアホはいない
>>207はクロージャが何かを知らないんじゃねえの?
0211デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANbar()はfoo()でしか使わないのだから、こう書いたほうがいいと思うんだ。
class A {
function foo() {
var i = 0;
:
bar()
: 長い処理
bar()
:
function bar() {
:
}
}
}
でもこう書いてしまった時に、bar()から i が見えてしまったら
今度はコードの独立性が下がってしまうんだ。
foo()の中にfoo()でしか使わないbar()を定義できるが、
そのbar()からは、iが見えないという関数が必要だ。
0212デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANそんな複数のメソッド、それも外部からアクセスさせたくないものがあるなら、
それを別個にクラスとして定義するべきだろ。
0213デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANえ
もしかして全ての手続きをmain()の中に(関数内関数等を使って)記述しろといいたい?
0214デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN0215デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANいいえ?
色んな所から呼ばれる関数はmain()の外。
main()からだけしか呼ばれない関数は
main()の中に記述しろと言ってる。
変数と一緒だよ。
色んな所から書き換える変数は
main()の外。
main()の中でしか使わない変数は
main()の中だろう?
0216デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN同じ事だよ。
一般的にクロージャとかわざわざ呼んでる言語がクロージャでしたいことは、処理を投げて
その処理にローカル変数を参照させたいとか戻り値を受け取りたいってだけじゃん。
finalつけないと参照できないみたいな糞言語があるせいか
クロージャーとかわざわざ呼んでいるけど
0217デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANどの言語が静的型付をいれようとしてるの?
0218デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANクロージャーという用語が出来たのは
Javaができるよりも前だよ。
0219デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN0220デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANfunction foo()
{
new class B().do();
}
class B {
function do() {
longMethod();
{
function longMethod() {
}
}
・class Bがclass Aのみに参照できること
・class Bの関数の中のうちlongMethod()は外部から参照できないこと
以上2つができない言語を使っているアナタに一言 : それはオブジェクト指向型言語ではありません。
0221デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANえ、では(>>210で述べた)C言語で関数ポインタを使うコード設計のことも
(>>216は)クロージャだと見なすのか.....
せめてWikipediaで「クロージャ」を一読してからカキコしてくれ、タノム!!
0222デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN「何かが出来ない」と「何かが出来るのと出来ない機能の両方を備えている」
は意味が違います。
はい、続きをどうぞ。
0223デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANインデントも括弧の対応も取れてないコードを書かれてもね(苦笑)
おかげで何が言いたいのかさっぱりだ。
0224デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN普段C#で書いてるからな。
>>208に対する>>220の意味が分からん場合は、多分JSみたいな糞言語使っていて
オブジェクト指向型言語つーのが理解できてないんだと思う。
0225デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANSmalltalkは、そのどちらもできないけど、
Smalltalkがオブジェクト指向言語ではないと言う人は初めてだぜ!!
いや、それともオブジェクト指向型言語とあるから、
オブジェクト指向言語(OOP)とは別の異世界にある言語族なのかなw
0226デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN何が関係あるんだろう?
あ、もしかして自分がミスしてることに気づいてない?
0227デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANクロージャがない言語(たとえばC)では、関数から抜けたら
ローカル変数の寿命は終わりでいいし、だから効率上スタックを使って
実装されることが多い
一方、クロージャの場合、クロージャから参照される外側の関数のローカル変数は
少なくともクロージャの寿命と同じだけは生かさないといけならず
クロージャの寿命は外側の関数からリターンした後も継続するかもしれない
つまりスコープ上はローカルなオブジェクトの寿命(エクステント)が伸びるという
特殊な状況が生じる
こうしたローカル変数を、クロージャにキャプチャされていると呼んだりする
クロージャというのは、このようにキャプチャされた変数と関数の組(オブジェクト)を
指す
0228デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANPythonですらカプセル化ができないから完全なオブジェクト指向型言語じゃない。
そういう厳密な定義では、Smalltalkは関数は全てpublicだから不完全。
>>226
C#のインデントスタイルはBSDオールマンが標準なんで、K&R式ではないんですが、そんなことも知らないんですね。
0229デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANその意味はオブジェクト指向ではなくて、名前空間ではないのかな?
ちなみにRubyでは名前空間としてmodule宣言が、クラス定義としてclass宣言があるから、
名前空間の分離とクラス定義の分離を意識したコードが書けるし、
たまたまClassクラスはModuleクラスのサブクラスだから、
クラス内クラス(あるクラスの名前空間に閉じたクラス)の定義もできる
ただし、それをオブジェクト指向と呼ぶ人は誰もいない
0230デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANやっぱり気づいていないんだ? { がひとつ足りないことにw
0231デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN俺の知ってるオブジェクト指向が
本物のオブジェクト指向だ。
みたいなこと言ってるし。
0232デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANまず最初に「完全なオブジェクト指向型言語」とやらの厳密な定義を示してくれないと
議論にならないよ
たとえば純粋オブジェクト指向言語は「あらゆるデータがオブジェクト」と定義できるから、
Smalltalkは純粋オブジェクト指向言語であるけれど、C#はそうじゃない
これと同様に「完全」と呼ぶ性質を定義してくれ
0233デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANスコープ外変数をメソッドから変更しているが、それを全否定か?w
0234デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANSmalltalkの作者だろw
後からストラウストラップのようなバカどもが間違った定義で話を進めたために、
本来の意味とは違う意味になってるようだがw
0235デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN本当にコントみたいな話だなw
0236デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANC#では数値もオブジェクトだぞ
0237デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANオブジェクト指向という用語は1972年にSmalltalkが発表された際に考案されたが、
そのアイデアが初めて現れたのは1967年のSimula 67であるとされる。
0238デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN一般に「オブジェクト指向プログラミング」と呼ばれる考え方には発案者が異なる二系統がある。
アラン・ケイによる、変化に強い長期運用可能な遅延結合システムを SIMULA67 にあった
「オブジェクト」をメッセージの受け手とすることで実現(オブジェクトにメッセージ送信)
するアイデアに基づく「メッセージングのオブジェクト指向」と、
ビアルネ・ストラウストラップによる、ユーザー定義型(抽象データ型)を SIMULA67 にあった
「クラス」という言語機能を使って実現(カプセル化、継承、多態性)するアイデアに基づく「抽象データ型のオブジェクト指向」。
この二つの「オブジェクト指向」は、オブジェクト指向という呼称、「クラス」や「オブジェクト」と
いった主軸となる言語機能を共通して使用してはいるものの、考え方の方向性が全く異なっており本来きちんと区別すべきものである。
しかし、教科書的な記述の多くはこれら二つを書き手に都合のよい解釈でごちゃまぜにしてしまっており、
しばしば学習者に対して無用な混乱を生じさせている。
オブジェクト指向言語はこれら二系統のどちらかを比較的厚くサポートすることが多いが、
完全にはサポートできてはいない。また、たいていはどちらかに重きをおきつつつ双方を
不完全ながらサポートする言語が多いため、利用者(プログラマー)がまず先に概念を
理解しどちらの考え方でプログラミングをするかを決めないと機能の間違った使い方になってしまう。
同じ理由で、オブジェクト指向という概念を特定の言語の(「オブジェクト指向」むけと思われる)
機能から外挿して学ぶのは難しいし、間違った「オブジェクト指向」を創造してしまう危険がある。
少し遠回りに思えても、それぞれの考案者自らがその主張を綴った論文を読んで理解を試みるほうがいい。
0239デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANアイディアが現れたのはいつかというのは、ここでは全く重要ではない
言葉の定義の話なのだから
そして、すでに定義があるのに、あとから別人が別の定義で話をはじめたら
混乱が起こるに決まっている
それをやってしまったバカがストラウストラップ
0240デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANC#でクラスはオブジェクトかな?
Smalltalkは純粋オブジェクト指向言語だからクラスもオブジェクトだけどね
0241デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANたぶん、ストラウストラップ が違う名前をつけていたら、
世の中に普及していたのは、その違う名前のほうで、
オブジェクト指向はメッセージ指向と同じく
マイナーなものになっていただろうな。
0242デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN0243デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN仮にそうなったとしても、少なくともその方がはるかに混乱は少なかっただろうな
まあ、そもそも上に出てきた真のオブジェクト指向とやらは、ストラウストラップの
言ってるオブジェクト指向とも違うようだが
0244デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANたられば論だったらお子様にもできる。
ある定義の人気に便乗して、その定義を別の人が別の概念で使い始めたことが間違っている、
という>>239の指摘に対して、たられば論は見苦しい言い訳にしか聞こえない。
0245デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANええとね。
名前の話ではなく
概念の話をしているの。
名前で混乱してるのはお前だよ?
今普及している概念は
ストラウストラップの方。
0246デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN今普及している概念の話をしている。
0247デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANパブリックメソッド使って変更するやつのことだしな
つまり、メソッドのスコープ外変数をメソッドから変更するっていう
まさに上で完全否定された処理w
それが柱w
0248デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANいや、これはオブジェクト指向と呼ぶんだ呼ばないんだという話をしているのだから、
概念をどういう名前で呼ぶのかという、まさに名前の定義の話だろ
そして、ストラウストラップの定義も、お前の完全なオブジェクト指向とは違うw
0249デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANフィールド変数一つに対して
それを変更するだけのメソッドを一つ作ると
考えてるのはお前だけだと思う。
わかってないなぁ。
0250デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN誰も変更するだけだとは言ってないし、一つだとも言ってないが?
しかも、スコープ外変数への再代入の話なんだから、
回数やら他の処理やらは議論と何の関係もないが?
0251デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN別の名前にするべきといったのはお前じゃん?
同じ名前にするのが悪いんでしょ?
じゃあ別の名前にしましょうよ。
0252デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANしてもいいけど、で?
0253デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANそうか?
なら疑問が出るんだが?
プライベートなフィールドを変更するのは
パブリックなメソッド以外何があるんだ?
0254デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN別の名前にしたらはっきりする。
ストラウストラップの方の
○○指向が普及しており、
オブジェクト指向は普及していない。
これはたらればの話ではなく
事実を言ったまで。
0255デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANで?
Smalltalkをオブジェクト指向じゃないといった赤っ恥を取り繕ったつもり?w
0256デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN・メッセージ指向
・クラス指向
の二つがあるというだけの話だろ。
どっちが完全だの起源だのそんな話はどうでもいい。
そして現在このスレで語られている概念や、
世間で「オブジェクト指向開発」という場合の概念は、
どちらもクラス指向のことを指していることは明らか。
今Smalltalkの話を持ち出すのは本物のバカ。
どういう脳みそしてればメッセージ指向の話をしていると勘違いできるんだよ。
0257デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANそれ俺じゃないw
0258デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN0259デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN決めつけたセリフを言わなければいい。
0260デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANだって俺、スマホ以外にプロバイダ2契約してるもの
(バックアップと負荷分散を兼ねて)
その気になればID二つ使って一人で会話できるよ?w
0261デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANプロバイダなんて月々1000円程度しかかからんから複数契約は珍しくない
俺も複数契約してるがバックアップやら負荷分散なんて大仰な目的じゃなくて、
くだらない目的で使ってるだけだがな。
0262デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANID制が意味ないって話だろ
頭にウジでも沸いてんのか?
0263デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANプロバイダ2つごときで「バックアップと負荷分散♪」なんてドヤ顔してる子を温かい目で見守ってやれるほど大人じゃないんでねw
0264デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN例えば、言語設計者がどちらの用語を使うかが普及にとって大きな鍵だが、言語設計者の間では
Smalltalkは別にマイナーではなく、超有名言語
C++より影響力が大きいかもしれない
Objective-Cのオブジェクト指向もJavaのオブジェクト指向も
Smalltalkの影響があるし
このスレの話題に出てきてるJavascriptはクラスベースとも違うだろ
そもそも、C++が登場した当初、
>>220の要件を満たしていたのか?w
0265デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN> Smalltalkは別にマイナーではなく、超有名言語
> C++より影響力が大きいかもしれない
> Objective-Cのオブジェクト指向もJavaのオブジェクト指向もSmalltalkの影響があるし
ソースくらい出せよ妄想君。
0266デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANお前がやってるのはインターネットだろ?なぜ目の前の道具を使わない?w
0267デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN0268デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN議論はハッタリやブラフを競うゲームじゃないんで。
存在しないソースを存在するように見せかけるお遊びはチラシの裏でどうぞ。
0269デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANソースが無ければ事実と認めないと言うのなら、
>>254
>ストラウストラップの方の
>○○指向が普及しており、
>オブジェクト指向は普及していない。
のソースを提示するのが先ではないのかな
それともストラウストラップうんぬん(>>254)は妄想かな?
0270デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANSmalltalk
Influenced Objective-C, Self, Java, PHP 5, Logtalk, Dylan, AppleScript, Lisaac, NewtonScript, Python, Ruby, Groovy, Scala, Perl 6, Common Lisp Object System, Falcon, Io, Ioke, Fancy, Dart
C++
Influenced Perl, LPC, Lua, Pike, Ada 95, Java, PHP, D, C99, C#, Falcon, Seed7
Objective-C
Objective-C(オブジェクティブ シー)は、プログラミング言語の一種。C言語をベースにSmalltalk型のオブジェクト指向機能を持たせた上位互換言語である。
Java
Smalltalk や Objective-C と同様な簡潔なオブジェクトモデルを採用している。
0271デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANSmalltalkの影響欄にDartが入ってる理由を具体的に述べてくれますか?
0272デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANあなたは「DartはSmalltalkに影響を受けている」と主張なさっているので、
当然その根拠を1つは答えられるはずですよね。
答えられないのなら尻尾巻いて逃げ出していいですよ。
弱った犬を棒で叩く趣味はないのでね。
0273デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANhttp://www.youtube.com/watch?v=huawCRlo9H4#t=1810s
0274デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN0275デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN> プロバイダ2つごときで「バックアップと負荷分散♪」なんてドヤ顔してる子を温かい目で見守ってやれるほど大人じゃないんでねw
プロバイダ・・・2つ・・・ご と き?
お前、なんの勝負してるんだ?
俺はプロバイダ5つだ!とか数の勝負してんのか?w
0276デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANバックアップと負荷分散自慢じゃないじゃねーかw
ID自演は簡単って話じゃねーか
バックアップと負荷分散の話はあくまでおまけ。
0277デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN言語の良しあし語る前にまずそこから
0278デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANえるしってるか?
だーとのさくしゃはすもーるとーくぶいえむのこうそくかでちょうゆうめいなひと。
0279デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN0280デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN言語処理系の影響が言語仕様に限定されるという視野狭窄はさておき、
DartがSmalltalkの影響下にあるわけないという272の確信が
無知であること以外のどこから来たものかすごく興味がある
Dartの言語仕様を暗記するくらい読み込んだのかな……
0281272
2013/08/11(日) NY:AN:NY.ANsumimとかいう奴の解説間違ってるじゃねーかクソが
> 誤った傾向として、よく、「すべてがオブジェクト」であることのみが強調されがちですが、
> この文脈における「オブジェクト指向」で重要なのはむしろ“メッセージング”のほうです。
> クラスはおろか、オブジェクトですら飾りに過ぎません。
> 偉い人にもそれがわかっとらん人がけっこう多いのです。w
http://d.hatena.ne.jp/sumim/20040525/p1
>>273
の図には「Object/Smalltalk」って書いてあるぞクソが
0282デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN>答えられないのなら尻尾巻いて逃げ出していいですよ。
>弱った犬を棒で叩く趣味はないのでね。
いくらバトルスレとはいえ、
ここまでムキになって挑発する心理状態が分からないw
夏だからかな?
0283デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANケイのメッセージングについてはオブジェクトは関係ない
Smalltalkはケイのメッセージング指向”と”オブジェクトを取り入れた言語
ゆえにお前が引用してる文章は何も矛盾してないぞ
0284272
2013/08/11(日) NY:AN:NY.AN0285デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN|::::::l!::.::.::.::l::.:| ';\::.:ヽ.::.::.::.::.::.::.::.::.::.::.:..';.::.::.::.::.::.::.::.::.::.::.::.::.::
|::::くヽ:.l::.::.::.:|,.. -ヾ´:.:.'、.::.::.::.:ヽ:.::.::.::.::.::.l'⌒ヽ:.::.::.::.::.::.::.::.::.::
|::::::_l_`;:l:::::::l'~j,二二...zヽ_::.::.::.::';::.::.::.::.::.|こ`ヘ::.::.::.::.::.::.::.::.::
|:::::::゙Lh!:'、::::l:',′_づツ火´::.::.::.::.:i:: :: ::::::lヽ r ノ::.::.::.::.::.::.::.::.:
|:::::::::| /ヾ`、:::`、 :; ; ヽ::::.::.:.::l::::.::.::::|/ /:::::.::.::.::.::.::.::.::.:.
l:::::l::::!' ` ゙、:ヽ ';.; ゙;'、::.::.::.|::.::.:::::|_,ィ:::::::::.::.::.::.::.::.::.::.:
|!:::|l/ ヾ; ;. ; `;::.::::|:::::::l:リ: .1::::::.::.::.::.::.::.::.l::.::.
l:::| !`ヽ` ` '; : l::.::::|:::::/ノ }::::::i::.::.::.::.::.::.l::.::.:
l| !::ハ ー‐- 、_ ; j ; |::.!;:|::/ /::::::l::.::.::.::.::.:;'!::::::::
! l:! `,  ̄ ̄` ; ' イソ j〃 _,/::::::::l::::.::.::.::.:;':l::::::::
! ゙, !,.-''´リ///バz'"/::::::::::l::::.::.::.::.::l::l::::::::
l. ,. -''V/////// /::::::::::/!:::: :: ::::/!::|::::::::
 ̄ Y//// /:::::::::/|::!::::.::.::::::! !::ト、:::
レ:''´ _ -─/:::::::/´ !::!::::.::.:::::l |::| ヽ
/: ; . '´ /::.::./ l::l!::::.::.:::::! l::l
兄(ケイ)のメッセージングについてはオブジェクトは関係ない
Smalltalkは兄(ケイ)のメッセージング指向”と”オブジェクトを取り入れた言語
ゆえにお前が引用してる文章は何も矛盾してないぞ
0286デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANSmalltalkやLispやHaskell、Prologといった言語に見られるカリスマ性はないだろう
格が違う
0287デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANうん。はずかしくて尻尾巻いて逃げてもいいレベル。
0288デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN0289デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANSimula
クラスやガベージコレクション、継承といった
オブジェクト指向言語の「機能」を最初に実装した言語
Smalltalk
Simulaを参考にして「メッセージング」という概念を提唱し、
これにオブジェクト指向という「名前」を最初に付けた言語
C++
Simulaを参考にして「カプセル化、継承、多態性」の3点セットが
オブジェクト指向の「定義」であると最初に主張した言語
「カプセル化、継承、多態性」についてはSmalltalkは全く関係なくC++オリジナルの功績
格が違うのはどっちだろうね…w
0290デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANあれ使いこなすのは相当頭良くないと無理じゃないの
0291デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN0292デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN現代のオブジェクト指向の最重要概念を一番最初に提唱したという功績がある
Smalltalkは名前を付けただけで中身はない
0293デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN> Simula
> クラスやガベージコレクション、継承といった
> オブジェクト指向言語の「機能」を最初に実装した言語
ガベージコレクションは、オブジェクト指向と直接関連しないし、そもそも実装は Lisp の方が早いでしょ。
0294デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN評価されてると思ってるのか?
実際は、糞食らえと思われてるかもよ?
実際Smalltalkの影響より大きいのかと言われると怪しいわけだし
0295デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN必要ないとは言わないが、乱発はするなとか
最近では多態性も雲行きが怪しいな
javaのテンプレートが失敗だったと言われはじめたり
0296デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN不必要にオブジェクト指向の概念を複雑化させ、
複雑怪奇なテンプレートや多重継承を持ち込み、
多くのプログラマーを困らせた馬鹿という印象しかないわ
Smalltalkのような美しさ、創造性が微塵も感じられない
0297デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANお前がいくらそう思っても世間はC++由来の「カプセル化、継承、多態性」一色に染まってるからな
ノイジーマイノリティにならないように気をつけな
0298デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANまつもとw
懐かしいネタだなw
もう10年以上前になるのか
あの記事もう一度全文見たいな
0299デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANお前のいう世間が狭いんじゃね?
かなり遅れてる
0300デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANまともに使われてるのはJavaScriptくらいだろ
0301デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN> Smalltalkは名前を付けただけで中身はない
ふーん。
アジャイル開発手法のアイデアのほとんどはケイのメッセージングのOO…というか
Smalltalkでの開発手法を拠り所にしているし、デザパタだのリファクタリングだの
IDEだの、そもそもGUIのマルチウインドウやポップアップメニュー(特に今の右クリックメニュー
やコピペ)とか、マルチフォントとか、Appleが好んで使うカラムインターフェイスだの、
それらの実装に用いられるMVCフレームワークだの、古くはC++のSTLのころからある
コレクションAPIだのもろもろSmalltalk発祥なんだけど、でも君のOOには功績ゼロなんだね。
0302デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN古いから知らないからって無視していいとかにはならないと思う。
今はフリーの処理系とかあるわけだから、ちょっとくらい触って
ケイの言う「メッセージング」とか「究極の動的システム」とかの
ワケわからなさにうちひしがれるくらいの経験はしておいてもいいと思う。
http://dotinstall.com/lessons/basic_smalltalk/21103
0303デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANソースは?
韓国人がすべての起源主張してるようにしか見えないんだが
アジャイルがSmalltalkを参考にしてるなんて聞いたことねーよアホが
0304デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN知ってるから無視してんだよボケが
0305デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN> コレクションAPIだのもろもろSmalltalk発祥なんだけど
↓
> ビアルネ・ストラウストラップ(Bjarne Stroustrup)によるC++は、
> オブジェクト指向という考えをSmalltalk経由ではなく、Simulaから直接導入しています。
> 以前お会いしたときに直接聞いたところによると、ストラウストラップは大学院時代に
> Simulaのユーザーであったため、その機能をC言語に取り込みたかったというのが、
> C++の直接の開発動機だったそうです。
http://www.itmedia.co.jp/enterprise/articles/0703/26/news021_2.html
さっそく嘘ばれとるやん
C++はSmalltalkなんて全く参考にしてねーよ
0306デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANさすがにお前が無知なだけ
Smalltalkも本当は知らなかったんだろ?w
0307デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANオブジェクト指向という言葉をSmalltalkを知りもせずに再定義したバカが
ストラウストラップだというのはマジな話しっぽいな
だが、STLのコレクションライブラリを作ったのはステファノフであって、
ストラウストラップではないぞ
0308デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANアジャイルがSmalltalk由来って話はほとんど話題にはなってないだろ
少なくとも日本語のソースは見つからない
0309デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANとりあえずスクラムとXPだけだけど
http://objectclub.jp/ml-arch/magazine/365.html
先週来日したジム・コプリエンさん[*1]によると、当初、Smalltalkで実装した
フレームワークだったのを、Smalltalk部分を取り去って「なんでも入る箱」に
したのが、現在のスクラムなんだそうです。
http://www.atmarkit.co.jp/fjava/devs_bk060201/bookreview/02/bookreview02_dev.html
ケント・ベックがXPの潜在能力に気が付いたのは、テクトロニクス社の
リーダーと仕事をしていたときだといいます。Smalltalkを使って複雑な
エンジニアリングのアプリケーションをペア・プログラミングで開発している姿に
インスピレーションを受け、ソフトウェア開発の歴史に埋もれてきた多くの
実践を組み合わせながら、XPの原型を形作っていったといいます。
0310デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANどこからもリンクされてないページをさらっと出すとか
こんなの知らなくて当然だろ
0311デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN彼がSmalltlakの文かとアジャイルの架け橋的な立場にいる一人だということが分かるから
0312デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN0313デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANhttp://web.archive.org/web/20000302001334/http://www.ruby-lang.org/ja/compar.html
0314デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN知りもせずってことはさすがにないと思うな。
もっとも、ケイの目指す「究極に動的なシステム」っていうのを理解していない、
あるいは、理解は示すが賛同しかねてるっていうのはあるかもしれないけれど。
http://d.hatena.ne.jp/katzchang/20080807/p2
「オブジェクト指向」と名付けたのは、無理解もあるけれど便乗の要素のほうが
大きかったと思う。
0315デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANTDDもアジャイル(XP)もSmalltalkから生まれた、っていうことについて、
徐々に体得的に実感できつつある。
現代のエンジニアリングの潮流がSmalltalkに由来するということは、
そこに何か非常に重要な本質が潜んでいる可能性がある。また何か書きたい。
とりあえず現時点でほとんど確信しているのは、現代のエンジニアは
教養としてSmalltalkをやっとくといい、ということだ。
仕事でSmalltalkを書くかどうかは関係なく。
0316デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN0317デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN0318デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANおまえらはあらゆることについて恐ろしく詳しいよ
同時にあらゆる事について恐ろしくおバカである
0319デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANというに前者二つはいろんなものの起源
0320デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANストラウストラップがオブジェクト指向という言葉の人気に便乗したとか
言っても理解できないだろうw
まさか自分の知らなかった言語があの誰もが知ってるc++よりも影響力があって、
そんなに、凄い言語だったなんてw
0321デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANあんま他人を馬鹿にするなよ
あしもと掬われるぞ
0322デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANあれ以上シンプルにならない Lisp と Prolog だけでいいな
0323デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN口だけ達者でヘボコードしか書けない連中が好むのがSmalltalkだった
0324デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN名前が知りたいんだが誰か知ってる?
ちゃんとその言語を好んでいたというソースがある人。
0325デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANヘボコードを肥だめに積み上げて作ったアジャイルの潮流を
クールな君らが這いつくばって学んでいるわけですね。わかります。
0326デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN何も生み出せんよ。
Smalltalkを使っていただけのユーザーなんだから。
0327デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.AN4つの言語の中で、Haskellだけは変じゃね?
もし型推論を備えた遅延評価を主とする実用的な関数型言語であれば、Mirandaだろ
Haskellの特徴大半はMirandaから引き継いだものであり、
Haskellそのものの功績は型クラスとモナドくらい
あと、Mirandaの前には、実用的な型推論を最初に実装したMLがいることも忘れずに
0328デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.ANぶっちゃけプログラミングの世界はアホ的思い付きが
大手を振ってるだけで、全然学ぶ価値無いよね
習得だって片手間で余裕だし
0329デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.AN的外れもいいとこだな。
0330デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.AN習得した言語自慢でもしてるんだろうか?
俺、 lisp、smalltalk、haskell、prologを
習得したぜ!って。
で、何を作ったの?
0331デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.ANカスは永遠にカスのまま底辺をさまよう
それがプログラミングの世界
0332デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.AN勉強だけじゃなくてスポーツでも。
0333デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.ANLISPは他に任せる。Smalltalkだけ。
ダン・インガルス、アデル・ゴールドバーグ、テッド・ケーラー、
ラリー・テスラー、ブルース・ホーンあたりは比較的名前も知られている
XEROX PARCの元Smallalk開発メンバーでいずれも天才プログラマーの類
ユーザーサイドでは、TDDやXPのケント・ベック、Wikiなどのウォード・
カニンガム、リファクタリングのマーンチン・ファウラーとかが
Smalltalk使いだったことは普通に知られているのでは?
ただ彼らのSmalltalkプログラマとしての実績がどうだったかはよく知らない。
現役Smalltalk使いだとRubyから鞍替えしたSeasideとかのアヴィ・ブライアント、
Perlから出戻りでシュウォーツ変換とかで知られるランダル・シュウォーツとか。
惜しくも先日若くして亡くなられたけど、アンドレアス・ラーブはきっと天才。
あとMVCやDCIの発案者であるトリグヴ・リエンスカウ氏もご高齢ながら現役Smalltalk使い。
0334デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.AN0335デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.ANHaskell入れるくらいなら史上最も稼いだ言語であるAPLを入れるな。
0336デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.AN0337デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.AN朝青龍は夢の中で延々と相撲のシミュレーションを繰り返していたらしいけど、
興味ない分野だと、関心を向け続けるだけでも苦痛
その点おまいらは25時間結論の出ない討論を続けてるんだから才能の塊だろ
0338デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.AN気持ち悪いくらいSmalltalkに心酔してて
実際の言動もリアルに気持ち悪いので、
Smalltalkは特別な言語なんだと心から納得してる。
0339デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.ANジェームス・ゴスリン
円周率計算の当時の世界記録をLispで達成した
またJavaの作者の一人
リチャード・ストールマン
言わずと知れたGnuの創始者
emacs lispやgplなどが有名
0340デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.AN0341デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.ANSchemeの設計
並行アルゴリズム(GCのスティールのアルゴリズム等)
ピーター・ノーヴィグ
人工知能・分厚いAIの本
Googleの研究部門を率いる
っていうか、ここで話題に出るような言語はどれも有名言語だから
それなりの人物が使ってる事は多いと思うが
0342デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.ANhttp://www.amazon.co.jp/dp/4274068471
0343デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.ANSmalltalkはある一線を超えると社会復帰が難しくなるからね
廃人直行言語、というかどちらかというと変態OSに近い環境か
0344デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.AN嫉妬うざ
0345デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.ANPaul Irish、Jeremy Ashkenash、Ryan Dahl
今はこうした若者の時代だよ
0346デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.AN若者たちがモダンなクライアントサイド技術を生み出す。
いい連携じゃん。
0347デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.AN0348デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.AN0349デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.ANデータベースから値を出し入れするだけの
低能でも出来る仕事だからね。
0350デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.AN低能でも出来る仕事だからね、
0351デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.ANCoffeeScriptもnode.jsもないってこと。
0352デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.ANブラウザ競争の渦中で、巨大企業の資本力がこれでもかと
注入されたことが大きいな。ほかのLL言語では真似できないね。
0353デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.ANまったくだ。SQLインジェクションを発生させたら
大問題であることを気づいていない。
SQLインジェクションのような簡単な脆弱性は
全く発生させないのが普通。
0354デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.ANLuaJITさんを忘れないであげてほしい
0355デフォルトの名無しさん
2013/08/13(火) NY:AN:NY.ANPaul Irish: Google Chrome Developer Tool, jQuery, Modernizr, Yeoman
Jeremy Ashkenas: Coffee Script, Backbone.js, underscore.js
Ryan Dahl: Node.js
何が衝撃ってCoffee ScriptとBackbonejsとunderscore.jsの作者が同じってことだなw
0356デフォルトの名無しさん
2013/08/13(火) NY:AN:NY.AN0357デフォルトの名無しさん
2013/08/13(火) NY:AN:NY.AN0358デフォルトの名無しさん
2013/08/13(火) NY:AN:NY.AN0359デフォルトの名無しさん
2013/08/13(火) NY:AN:NY.AN0360デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.ANって何のための議論なんだろうな・・・
ふつーに自分が一番最速で作れる言語を選べよ
0361デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.ANその果てにあるのは老害コボラーやJavaドカタだからねぇ
0362デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN比較するモノがあって初めてそれが大きいのか小さいのかが分かるのだ
つまり、我々は比較によってモノの価値を決めており
多数の言語があれば当然比較するわけなのだ
これはいわゆる本能なのだ、世界にただ1つだけの花とかチャンチャラおかしい
ことを言って済ませるようなことはしない、かならず比較して優劣を判定している
なぜなら優劣を判定することは生物にとって有益なことだからだ
大多数が良いとするものだけが生き残るのだ
議論とはその過程なのだ
自分1人だけの判定などあまり意味がない
なぜなら1人でできることなど限られているからだ
多様な考えがあればこそ判定がより正確になるのだ
もちろん最終判断をするのはアナタだ
多数ある議論の後にアナタが使う言語はアナタが選ぶのだ
0363デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0364デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0365デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0366デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.ANC言語の系統なのでいい。
C/C++ JS PHP Java C#
0367デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN(すべての言語について精通している訳ではないので、間違いがあれば指摘ヨロ)
FP
---- 壁0. 変数の壁 ----
Haskell
---- 壁1. 純粋性(副作用)の壁 ----
F#/OCaml/SML/Scala
---- 壁2. 型推論の壁 ----
Scheme/Ruby1.9
---- 壁3. 末尾再帰最適化の壁 ----
========<< 越えられない壁 >>========
Common Lisp/Closure/Smalltalk/Ruby1.8
---- 壁4. 条件判定式の壁 ----
C++11/Java8/Perl5/JavaScript
---- 壁5. クロージャ/ラムダ式の壁 ----
========<< 越えられない壁 >>========
C/C++/Java7/Perl4/Python...etc
[参考] 関数型言語Part5スレ(dat落ち)
・http://42ch.blogspot.jp/2013/03/part5.html -- 学ばないブログ
・http://fnf.ldblog.jp/archives/5885103.html -- いてつくブログ
・http://www.log-channel.com/bbs/tech/1252470706/ -- 2chログチャンネル
0368デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0369367
2013/08/15(木) NY:AN:NY.AN・よく知られた言語で抜けがありました
Erlangは壁2.の下(Schemeと同列) 、C#は壁4.の下(C++11と同列)になります
・Ruby1.9の末尾再帰最適化はオプション(=デフォルトでは無効)なので、
その実装が不完全である(=ナンチャッテ実装、TCOモドキ)の可能性があります
・Pyhtonのクロージャは、このスレの>>157以降の議論から不完全であると判断しました
・C++/C++11、Java7/Java8、C#、Perl4/Perl5 に関しては、2chやWikipedia等の
ネット情報から判断しているので、誤っている可能性が大きいと思います
・壁の優先順序は私の独断と偏見ですので、異論は認めます
ただし、「壁4.条件判定式の壁」については反論意見が多いのですが、
これは言語の基本要素であり、設計しようとしている言語が手続き型なのか
関数型なのかについて、オリジナル言語設計者の選択した結果が反映されており、
あまりに基本すぎるので後から(付け足しはできても)変更が難しい事柄であると考えます
>>368
F#は関数型言語であるML族の一員であり、特にMSによる.Net実行環境とVS開発環境が
充実していることから、実用性/普及度という点で(個人的には)大いに注目しています
0370デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0371デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0372デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0373367
2013/08/15(木) NY:AN:NY.AN比較の観点が「関数型言語」ではなく、
「関数型プログラミングの適性」ですので....
XXX型プログラミングはスタイルなので、
関数型プログラミングは非関数型言語でも適用できます
0374デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0375デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.ANMonadとかも一切使えないってこと?
0376デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN> ・Pyhtonのクロージャは、このスレの>>157以降の議論から不完全であると判断しました
ほとんどマトモに議論されてないじゃん。もしかしてnonlocalのことか?
0377デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN関数がファーストクラスかってのが一番重要な最初の壁だと思うのだが……
その観点だと、OO言語の場合、メソッドがファーストクラスオブジェクトかという
視点は外せないのでは
0378367
2013/08/15(木) NY:AN:NY.AN値が束縛された名前は変数と呼ばれ、Haskellにはありますが、FPにはありません
そしてラムダ式が束縛された名前は関数と呼ばれますが、この関数とアトムだけを
組み合わせる、つまり変数が存在しないプログラミングスタイルがFPの特徴の一つです
0379デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN篩として分かりやすい気がするな
0380367
2013/08/15(木) NY:AN:NY.AN失礼、Python3では予約語nonlocalが追加された事で、
まともな(=不完全ではない)クロージャとラムダ式が使えるようになったみたいですね
次回、>>376を更新するときに訂正しておきます
あと>>376の「超えられない壁」については、上段はRuby1.9が、下段はCを除く
最後尾列の言語すべてが乗り越えてしまったので、見直しが必要かもしれません
0381367
2013/08/15(木) NY:AN:NY.AN「関数が一級市民(ファーストクラス・シチズン)であるか否か」という視点は、
「関数型言語であるか否か」という比較では決定的な要因であると思いますが、
今回の「関数型プログラミングの適性」という比較では重要でないと考えました
ただ単に「関数が一級市民である」ことならラムダ式があれば満足できるし、
ラムダ式でなくともクロージャ(一部OOP言語のブロック)で簡潔に記述できます
また、「関数が一級市民である」ことの最も典型的な応用は関数合成だと思いますが、
カリー化されていない関数では柔軟な関数合成プログラミングには適さず、
その程度であればOOP言語のメソッド結合(チェーン)で簡単に書き換えできます
もしも
・「関数が一級市民である」ことが特徴的なコードの一例を提示でき、そのコードが
・ラムダ式やクロージャでは代用できず、
・カリー化されていない関数でも効果的で、かつメソッド結合では代用できず、
・しかも関数型プログラミングでは一般的なプログラミング技法である
ならば、この重要でない考えを撤回するでしょう
0382367
2013/08/15(木) NY:AN:NY.ANX: この重要でない考えを撤回するでしょう
O: この(「関数が一級市民であるか否か」は)重要でないという考えを撤回するでしょう
0383367
2013/08/15(木) NY:AN:NY.AN式指向がどうかっていうのは、「壁4.条件判定式の壁」を一般化したものですね
if や case/switch といった条件判定が構文上で式(expression)として定義されているか、
それとも文(statement)であるか、という差異になります
式指向の他の例には、return文の有無もあります
式指向であれば、return文が存在しないかオプション(省略可能)ですが、
文指向であれば、有効な値を返す手続きではreturn文が必須になります
式指向という単語は便利なので、次回、>>367の更新では採用させてもらいます
0384デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN関数やアトムと値を別物だと思ってる時点で
何も分かってない半可通だと分かる
0385デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN>値が束縛された名前は変数と呼ばれ
たしかに名前束縛がないならFPのが確かに純粋度?が高いように見えるね
ただ一言言うと、それは名前で束縛された代数的な数ではあるけど変数ではないよ
知ってるならなおさら間違えちゃ駄目でしょ
0386デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.ANその辺の取捨選択や順序づけにやや恣意性を感じると言うか……
カリー化されていることが重要だと思うんなら入れればいいし
一次元的に分けるのがそもそも無理なのではないか、とは思わないの?
言語Aはア、イの要素を満たして言語Bはイ、ウの要素を満たす的な
状況普通にあると思うしね
0387デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0388367
2013/08/15(木) NY:AN:NY.AN言いたい事は分かるのだけれど、「値が束縛された名前」について
「変数」という単語よりも適切な概念の名称について、提案を願う
ここは言語理論板/スレではないし、変数という言葉以外に
直感的で的確なものは(自分には)考えつけないや
0389デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN#define max 100と似たようなもんだから
マクロってのもありかな。
0390デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN関数型プログラミングって言いたいワケか?
0391デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0392デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN色んな意味で無知すぎる
0393デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.ANどっちかっていうと言葉尻を捉えて必死になってるお前の方が無知に見えるよ
0394367
2013/08/15(木) NY:AN:NY.AN>その辺の取捨選択や順序づけにやや恣意性を感じると言うか……
それは>>369で書いたように、私の独断と偏見だから恣意的そのものですよ
>>一次元的に分けるのがそもそも無理なのではないか、とは思わないの?
当然そう思うし、複数の切り口(ファセット)で総合的に評価するのが望ましいと思う
具体的には、横軸に言語を並べ、縦軸に切り口を並べた二次元の表になるだろう
でも、残念ながら2chの1カキコの範囲内では表現には限界があるので、
>>367のような(恣意的に)1次元へと切り取った表現を選ばざるをえなかった
ただし、この恣意性があるから各自の哲学/思想というか立ち位置の差異がかいま見えて、
議論(バトル)として楽しめるのではないかと思う
この表(の哲学/思想)を無理に押し付けるつもりはないし、これとは別の切り口、たとえば
>>377の「関数が一級市民であるか」を加えたり、個々の壁について優先度を変えたりした
(>>367に対する)異論/反論が出る事は、スレ的に歓迎したいし、個人的にも嬉しい
0395デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN> 議論(バトル)として楽しめるのではないかと思う
まさにその通り。
立場を曖昧にした毒にも薬にもならない表なんて何の価値もない。
0396デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN要するに、証明の問題とかである
○○をXとおくと〜
みたいな文章のことだよね?
0397デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0398デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0399367
2013/08/15(木) NY:AN:NY.ANエイリアス(別名)について:
別名は実名の対比語だと思うけど、そもそも値には名前が無い訳から違和感を感じる
マクロについて:
マクロと「似たようなもの」ということは、変数と同様に厳密性に欠けると思う
ラベル:
これがイイかもしれないけど、「値が束縛された名前」という概念を指す言葉として、
変数よりも一般的(常識的/直感的)かは疑問が残る
たとえば、WikipadiaのHaskellページ(日本語)では変数という言葉が使われていて、
その定義も備考で説明されている
おそらくWikipediaは非専門家向けの表現が選ばれていると考えられて、
このページの変数という単語を置き換えても大半の人から賛同できるものを選びたい
他の人の意見も聞きたいので、この件は判断を保留します
0400デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN自分で疑問にも思わない時点でアホすぎる
0401367
2013/08/15(木) NY:AN:NY.ANHaskellであれば、Pointfreeスタイルで書くのが関数型プログラミングらしいと思うよ
そして、副作用である「変数への再代入(破壊的代入)を一切許さない」のが、
>>367で下に位置するML族と区別するHaskellの最大の特徴であると考えていて、
それならば「変数そのものの存在を一切許さない」FPは「究極の関数型言語」だと思う
0402デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.ANなるほどなー
0403367
2013/08/15(木) NY:AN:NY.AN>>369で書いたようにJavaについては素人だし、その最新動向は無知だね
もしも>>392が正解を知っているのなら、教えて欲しい
>>367の更新に反映させたいので....
0404367
2013/08/15(木) NY:AN:NY.ANそのとおりだね
で、そのXのこと(概念)を
・証明の世界では、どんな名前が命名されていて、
・その名前はプログラミングの世界でも一般的(常識的/直感的)か?
という比較が論点になる
0405367
2013/08/15(木) NY:AN:NY.ANどちらかというと、HaskellのPointfreeスタイルよりも、
F#のパイプライン演算子のほうが
Rubyのメソッドチェーンの発想に近いと思う
0406デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.ANg = ((.).(.)) (*2) (+)
fよりgの方が関数型プログラミングらしいの?
0407367
2013/08/15(木) NY:AN:NY.ANPointfreeスタイルが適切か否かは、扱う問題(対象領域)によりけりだと思う
少なくとも問題が>>406の単純な計算式であれば、f のほうがHaskellらしいでしょ?
でも、問題が大きくなった時に、それをPointfreeスタイルで書けるような部品(関数)へ
適切に分解できるようにする発想(思考の転換)は、究極の関数型プログラミングへの
第一歩だと思うよ
Pointfreeスタイルで書くことは(表現の)手段であって、目的ではない
プログラミングという行為を、再利用可能な部品への分解と見立てることが
関数型プログラミングらしさ、つまりスタイルだと考える
あと、究極への道はFPだけではないよ
関数と写像よりも抽象化した圏と見立てる発想、Haskellのモナドも究極への第一歩
Haskellは圏論の一部を利用しているけど、もし基礎から圏で構成した言語が登場すれば、
それもまた究極に関数型言語と呼ぶにふさわしいのではないかと思う(妄想だけどねw)
0408デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.ANお前の話はつまらん。
Haskellファンだか関数型ファンだか知らないが、
スクリプト言語語る場にのこのこやってきて
目的外使用を想定した適不適のわけのわからんレッテル貼りして
揚げ足取りして悦に入る以外に何がやりたいのかさっぱり分からない。
関数型したいなら黙ってHaskellでも使ってりゃいいじゃん。こっち来るな。
Haskellだの関数型だのの宣伝がしたいなら、もっと賢いやり方があるだろう。
0409367
2013/08/15(木) NY:AN:NY.ANFP
---- 壁0. 変数の壁 ----
Haskell
---- 壁1. 純粋性(副作用)の壁 ----
F#/OCaml/SML/Scala
---- 壁2. 型推論の壁 ----
=====<< 越えられない壁 >>=====
Scheme/Erlang/Ruby1.9
---- 壁3. 末尾再帰最適化の壁 ----
Common Lisp/Closure/Smalltalk/Ruby1.8
---- 壁4. 式指向(条件判定式)の壁>> ----
=====<< 越えられない壁 >>=====
C++11/Java8/C#/Perl5/Python3/JavaScript
---- 壁5. クロージャ/ラムダ式の壁 ----
C/C++/Java7/Perl4/Python2...etc
[変更点]
・Erlang と C# を新規に追加 -- >>369
・PythonをPython3とPython2へ分離 -- >>380
・壁4.の定義を変更 -- >>383
・「越えられない壁」を移動 -- >> 383
・壁0.の「変数」という単語については保留中 --> 399
・Java8については保留中 -- >>403
0410デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0411デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.ANほんと半可通だな
0413デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN無知は黙っとけよ。
お前のレスが一番中身なくて邪魔。
0414デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.ANeverything is an expression / expression oriented という言葉がある
Lisp族をはじめとする関数型言語は普通はそうなってる
0415デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.ANまさか、三項演算子は読み書きしにくいなんて恣意的な理由?
0416デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0417デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.ANx = for i in 1..10
i * i
end
p x #=> 1..10
0418デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0419デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.ANすげえ直観に反する動作だな
CLのLOOPマクロみたいなリスト内包もどきでもないし
最後に評価した値でもない
何でそうなるんだ?
0420デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANRubyが条件式以外はキモい挙動だからか
0421デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN関数型はあまり使われてないし、基本文法よりも
有名な、追加のライブラリ次第でシェアや使いやすさは変わるが。
0422デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANRubyの for x in xs; ... end は xs.each{ |x| ... }、つまりメッセージ指向的に言うと
xs への each{ |x| ... } というメッセージ送信のシンタックスシュガーなので
eachというメソッドがレシーバを返す仕様がゆえに for でも xs が返るという流れ。
0423デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN0424デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANなるほどメソッドチェーン用にselfを返すようになってるメソッドを
そのままforに転用してるからか
説明されれば理屈としては分かるが、for式の値として見ると気持ち悪いな
0425デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANよくよく聞いてみると、その多くにはトレードオフがあって、
結局のところ無理をしたり何かをねじ曲げたりするか(例えば要求仕様とかw)
逆に関数型側の大事な何かを(例えばSchemeやOCamlやScala程度には)
諦めない限り、既存の言語を置き換えるまでには使えない代物って印象だなぁ。
これは半分冗談だけど、本当にそんなに良いことばかりなのであれば
たとえばAPLなみhttp://www.youtube.com/watch?v=a9xAKttWgP4 に
さくっと、そして関数型の売りの一つである見通しのよさと美しさを
実感できるライフゲームを組んでみて欲しいと常々思う。(反語的に)
0426デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANfrom OOO import*
として複数のファイルからdef main():
のみ実行している?のですが、
ex.)
main.py
#!/usr/bin/env python
import OOO
p = OOO.OOO
(以下略
OOO.py
class OOO(以下略
とあって form OOO import* とimport OOOについて、
from OOO import* はあまりおすすめしないと書いてあったのですがその理由がわかる人がいたら
ご教授願います
0427デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANマルチ乙
0428デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN関数型に近づけてもメリット無いよね
つまり、Rubyはウンコ
0429367
2013/08/16(金) NY:AN:NY.AN三項演算子は少し前に派生スレの「[JavaScript] スクリプト言語34 [Perl,Python,PHP]」で
議論があったけど、条件分岐 if が式で三項演算子もある Ruby であれば、
三項演算子を使うのはその式が1行に収まるくらい単純な分岐の場合、
あるいは条件分岐が入れ子になった時に最も深い分岐で使うのが効果的
a = if cond1
cond1a ? v11 : v12
elsif cond2
cond2a ? v21 : v22
else
cond3a ? v31 : v32
end
0430367
2013/08/16(金) NY:AN:NY.AN>>194でも書いたけど、Rubyでは、たとえば以下のような関数型プログラミングの
スタイルは、すでに特異なものではなくなっている
collection.select { |e| ..... }.map { |e| .... }.sort { |x, y| ....}
もちろん可変オブジェクトの使用がゼロ、つまり純粋関数型プログラミングではないが、
大域的な可変オブジェクトを極力減らし、できる限り(Rubyであれば上記コードのような)
不変オブジェクト間の演算で計算を進める方向性が見える
関数型が優れているのか?という疑問に関しては、高品質コード設計では優れているが、
効率面では再代入(=破壊的代入)が基本である手続き型に劣るだろう
ただし、これも(Rubyは純粋関数型ではないから、)性能面でボトルネックとなっている
部分を手続き型で書き、それをメソッドやクラスで隠蔽するといったコード設計ができる
あるいは絶対的な効率が重視されるプロジェクトであれば、>>409の壁1.と壁2の間に
位置する静的型付け関数型言語を選ぶことで、コード品質と効率を両立できる
大規模Webサイト開発でサーバサイドのフロントエンドをRailsで、バックエンドを
Scala(およびJava)で採用したという事例があるけど、これはベストマッチだと考える
0431367
2013/08/16(金) NY:AN:NY.AN反復(for や while の構文)での返り値が不可解であることは、同意する
言語仕様が実装に依存するというのは、言語設計として好ましい事柄ではない
おそらく(>>423が提案する)injectを基本にした仕様とするか、あるいは
単純に nil を返すという決定を下すだけでよかったと思うが、Rubyの残念な一面だ
ただし、>>418が指摘しているように、Rubyの関数型プログラミングでは、
for/while構文を無理して使うよりも、(>>430のコード例のような)Enumuratorを
使うのが一般的なので、現実のプログラミングでは問題にはならないと思う
実際のところ、他にも不可解な返り値にはクラス/メソッド定義にもあるけど、
反復を含めてこれらの返り値を参照するコードを書いた記憶が(自分には)無い
0432デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANそんなスタイル見たことない
0433デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN実装に依存する部分は言語仕様じゃないんじゃないの?
0434デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN0435デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN同意
0436367
2013/08/16(金) NY:AN:NY.ANそりゃそうだろね
条件判定が入れ子になるような複雑なロジックで、なおかつ最も深い条件判定が
1行に収まるケースなんてレアケースだから、見たことないのも無理はない
言い換えると、if ... else ... という条件判定が式指向である言語にとって、
三項演算子の重要性は低いということ
また、そもそも>>409の「式指向の壁」を越えた言語よりも越えられない言語のほうが
利用者の数(=シェア)では圧倒的に多いのだから、関数型プログラミングのスタイルに
とまどいを感じるプログラマが少なくないのも無理からぬ話だと思う
0437デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANなんで?
0438367
2013/08/16(金) NY:AN:NY.AN現実世界で「動いているものが仕様である」という考え方はよく見かける
で、このRubyの「不可解な返り値」のように実用上の問題が無いのであれば、
それを「些細な事柄」として無視する現実的な判断は、決して間違いではないと思う
ただし、これが「些細な問題」ではなく「無視できない問題」になるのは言語処理系の開発
たとえばRubyはISO/JIS規格化されたけど、その範囲は全体のごく一部にすぎない
それ以外の多くはMRI(Matzが開発したC実装)の「動いているものが仕様である」に従う
Ruby実装にはMRIの他にいくつか登場しているけど、どれも開発には苦労していると思う
逆に、言語仕様のすべてが文書化されているのは、(自分の知る限り)>>409中ではSMLだけ
SMLは、構文仕様はもちろんのこと、その意味論についても操作的意味論によって
言語のすべての範囲について「形式的仕様」が定義され、文書として出版されている
実用性ではF#やOCamlに劣るかもしれないが、言語処理系の研究者/設計者にとって
SMLは「理想の姿」であり、(日本を含む)世界のあちこちで処理系が開発されている
0439デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANnil を返されるとそれ以上何もできない
だったら有用性の面から self 返しとくってのは合理的ではないかと
inject ベースの for が何を指すのかよくわからないけど
新しいオブジェクトを作って返すのならコピーのコストがかかるから
for の用途にはそぐわないだろう
0440デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANたぶんLispのdolistみたいなものを想定してるんじゃないのかな
アキュミュレータを使わなければただのforeach的なループと同等で、
アキュミュレータを使えばinjectっぽいことができる
dolist式の値はアキュミュレータの最後の値だからコピーのコストは気にする必要はない
foreachっぽいことをやるだけならnilになる
0441デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN今のjavascriptも変わらんだろ
0442デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANごめんコピーじゃないね
(アキュムレータに)溜めこむ過程のコストって言えばよかった
いずれにしても for/each はあくまで foreach 的なループができればそれでいいな
ベクトルの異なる複数の機能を詰めこんであると学習しにくくなるしコードが読みにくくなる
0443デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANRubyにif式と三項演算子の両方があるとか、無いとか、そんな話は全然関係無くて
条件分岐を式で書けるか否か、という話だろ
C++やJavaは三項演算子があるので、条件分岐式が存在する
それにも関わらずC++やJavaが式指向の壁の下に居るのは何故だ?
単に367の主観に過ぎないだろ?
まあ、主観だから100%悪いとは言わないけど、
大体、参照透過や型推論や末尾再帰最適化やクロージャの有無に比べて
主観が入りすぎてて気持ち悪い
0444デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANデフォルトで末尾再帰最適化がオフのCRubyより下に居るのも変だと思うよ
0445デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN0446デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN0447デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANRuby厨の限界を表している
0448367
2013/08/16(金) NY:AN:NY.AN>Rubyにif式と三項演算子の両方があるとか、無いとか、そんな話は全然関係無くて
>条件分岐を式で書けるか否か、という話だろ
もちろんそのとおりで、三項演算子の有無は評価基準とは無関係だ
>C++やJavaは三項演算子があるので、条件分岐式が存在する
>それにも関わらずC++やJavaが式指向の壁の下に居るのは何故だ?
前段で書いたように、三項演算子の存在は評価とは無関係だよ
C++やJavaには条件判定の基本要素として if ... else .... があるけど、
これが構文上で式(expression)ではなく文(statement)として評価されていることを重視する
もしC++やJavaが式指向であれば、HaskellやMLといった関数型言語と同様に
最初の言語設計の時点で、if ... else .... は式として定義する判断がなされていたはず
>大体、参照透過や型推論や末尾再帰最適化やクロージャの有無に比べて
>主観が入りすぎてて気持ち悪い
参照透過性は「壁1. 純粋性(副作用)の壁」に含まれるし、他も評価基準に含まれているよ
>>369,394で書いたように壁の順序には(自分の)恣意性があることは認めている
「気持ち悪い」という主観的な感情を吐くだけよりも、>>443が平等と考える
評価基準と並びを提示するほうが、議論(バトル)として有意義なんジャマイカと....
0449デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN気持ち悪いの二乗だよ。
こりゃまためんどくさいのが居着いたな。
0450367
2013/08/16(金) NY:AN:NY.AN仕様として明記されているSchemeと区別する意味で未実装と判定したのだけど、
Common Lispの実用的な処理系の大半で、末尾再帰最適化は実装されているのかな?
もしその通りであれば、言い換えると誰からも反論が無ければ、
自分の無知であったので、>>409を次回に更新する時にCommon Lispの位置を訂正します
0451デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN関数型らしからぬ機能があるのがダメだということはRubyは相当下になるのでは?
0452デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANRubyだって仕様に明記されてないのに、しれっとSchemeと並べてるのがRuby厨すぎるわ
0453デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANそれは思った。名前束縛の件もそう。
やっぱり言う割にまともに関数型言語使ってないんだな。
0454367
2013/08/16(金) NY:AN:NY.AN構造的等値なパターンマッチ機構が便利であることは確かで壁の候補として検討したけど、
>>409の(FPを除く)壁2.より上に位置する言語ではすべて実装されているし、
壁2.より下では Erlang だけのように見える(他にもあるかな?)
だから、Erlangを区別するだけのパターンマッチは、
評価基準として「壁2. 型推論の壁」よりも弱いと考えました
0455デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN0456デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANていうか壁0って誰得だよ?lazy Kやunlambdaみたいな実用的じゃないものを並べてんじゃねーよ
0457デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANしょせんワナビー
0458デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN0459デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANclispはコンパイルすれば最適化される
0460367
2013/08/16(金) NY:AN:NY.AN>つまり、C++やJavaにif-elseがなければ式指向ということだな?
何を言いたいのか、意味が分からない
if-elseの無いC++やJavaに、プログラミング言語として何の意味があるの?
無意味な仮定を持ち出して決めつけを行うのは「詭弁(きべん)」だよ
>関数型らしからぬ機能があるのがダメだということはRubyは相当下になるのでは?
いちども「関数型らしからぬ機能があるのがダメ」とは言っていないはずだが、
これも何を言いたいのか、意味が分からない
条件判定はあらゆるプログラミング言語に存在する基本要素だよね
関数型プログラミングでも、条件判定式は関数適用式やラムダ式と組み合わせて、
プログラムのあらゆる箇所で使われる
だから if ... else ... という基本構文が式であることを重要視しているだけのこと
0461デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN>if-elseの無いC++やJavaに、プログラミング言語として何の意味があるの?
>無意味な仮定を持ち出して決めつけを行うのは「詭弁(きべん)」だよ
別人だけど俗に言うc-likeなら3項演算子があるだろう
0462デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN関数型うんぬんなんて高尚(?)なもんじゃない
こんな意味不明な動作をする言語だよ?
x = 1
p(x + x = x + x = x + x) #=> 4
0463デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN367は三項演算子で条件分岐できるのが分かってない予感
0464デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANa = cond1 ?
(() => { X; Y; })()
: cond2 ?
(() => { Z; })()
:
W;
と書けないことはないな
0465367
2013/08/16(金) NY:AN:NY.ANわかったw、Erlangファンの意志を尊重し、
>>409を次回更新する時に「パターンマッチの壁」を追加することを約束します
なお、壁0. についても、過去に(関数型言語スレで)指摘されたことで
後から追加したことを補足しておきます
>>458
AgdaやCoqは(プログラミング言語ではなく)証明系なので、却下します
>>459
これは>>450への肯定的なレスですね
0466デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN食わず嫌いじゃないのか?
それと関数型風に出来ればいいならC++98だってboost-phoenixみたいのもある
基準が変だよ
0467デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN何でそうなるんだ?
0468デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANしったかなやつだなーと
0469デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANこれの上の部分の詳細を書くとPython2.5で既にlambdaもif式もあった
それでRubyだけ何で特別扱いなんだ
0470367
2013/08/17(土) NY:AN:NY.AN・if-else構文と三項演算子があるC系言語において、使用比率はif-else構文が圧倒的に多い
・C系言語でも(if-else構文をあえて使わず)三項演算子だけでプログラムを
「書けないことはない」が、if-else構文を使う方がC系らしいプログラミングであるし、
可読性も(三項演算子だけよりも)if-else構文のほうが優れている
これは事実だと思うけど、いかがかな?
そして、それだけ条件判定としての if-else 構文は重要な要素だと評価したことで、
if-else構文が式であるか否か、すなわち式指向であるか?を壁として選んだ
ただ、それだけのこと
0471デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANランク製作者の独断できまるランキングスレなんて初めて見た
0472デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANで、Rubyにおいてif-elseの式の値を利用していることはどれくらいあるだろう?
それはC言語における ?: / if-else の割合と比較して有意に大きいと言えるの?
0473デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.AN0474367
2013/08/17(土) NY:AN:NY.AN>Pythonを下げてRubyを上に上げた意味が一番わからない
>食わず嫌いじゃないのか?
>>409は「関数型プログラミングの適性」について(>>367)、
「関数型言語が上に手続き型言語が下に並ぶ」よう、壁とその位置を考えただけですよ
Pythonが下にあることがご不満なようですけど、そうであれば
「関数型言語が上に手続き型言語が下に並び」かつ「Pythonが上位に来て」しかも
「客観的な(=できるだけ恣意性を排除した)」ものを提示すればいいんジャマイカと....
>それと関数型風に出来ればいいならC++98だってboost-phoenixみたいのもある
>基準が変だよ
関数型プログラミングはスタイルですから、あらゆるプログラミング言語に適用できます
ただし、その適性度には言語によって差異があるという話です
C++の例であれば、特定のライブラリを利用しなければ関数型プログラミングに
適さないC++98よりも、最初から言語仕様として規定されているC++11は上位になります
0475367
2013/08/17(土) NY:AN:NY.ANRubyの関数型プログラミングにおいて(変数の再代入を避ける為に)
「if-elseの式の値を利用」することは基本中の基本であり、
その比率は(同「値を利用しない」ケースと比較すれば)圧倒的に多いよ
以下の文書の節「変数を更新してはいけない」と「あらゆるすべてが式である」を参照
・Rubyによる関数型プログラミング -- Functional programming with Ruby
http://www.h6.dion.ne.jp/~machan/misc/FPwithRuby.html
実際にこの文書に沿って、10数キロステップの実用的なRubyプログラムの開発に
関数型プログラミングの適用を試してみたが、
そのおよそ70%で純粋な(=副作用の無い)コードを書くことができた
その70%の中で「if-elseの式の値を利用」することは当たり前(=100%)だし、
保守性を重視して(コードの短縮よりも)読みやすいコードを意識したから、
三項演算子は一度も利用することは無かった
0476デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.AN>最初から言語仕様として規定されているC++11は上位になります
C++11はconstexprを含んでその位置なのか?
if-elseもないし定数への展開じゃなければ
コンパイラが末尾再帰最適化もしてくれるが
0477デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANパイプでつなぐようなスタイル(Haskellのポイントフリー)が
関数型スタイルだって言ってるのか
心の底からRuby厨だわな
根本的なところで違うんだからそりゃ話が咬み合わないわけだ
0478デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.AN圧倒的に多いと言える根拠は?
三項演算子の一般的な利用頻度にかかわらずC系で三項演算子を使えば関数型っぽくはなるが、
そうではなくて>>470は一般論としてどっちが多いかの話じゃなかったの?
0479デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANこいつただのRuby厨だから
0480367
2013/08/17(土) NY:AN:NY.AN「Rubyの関数型プログラミング」において圧倒的だというのは、
>>475で示した(ガイドラインとしての)文書と
(自分の個人的な)実経験が根拠であるというのは、理解してもらえるよね?
そして、「Rubyの手続き型プログラミング」であれば、そもそも
if-else式の値は参照しない、つまりC系言語のif-else構文と同じだ
で、それに関して三項演算子との使用頻度の比較は、RubyもC系も同程度ではないかと
不思議なことは何も無いと思うんだけど、何が不明なの?
0481デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANでもコードの見やすさなんていう観点を持ち込むんなら
随分とランキングは変わってくると思うけどね。
0482デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANまともに使ってるのRubyだけなんだって
0483デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.AN(Ruby厨が考えるRubyの機能の範囲で実現可能な)
関数型っぽいことが一番うまくできるスクリプト言語はRuby!
って話なんだから、こいつをひっくり返すのはかなり難しいよw
0484デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.AN0485367
2013/08/17(土) NY:AN:NY.ANPython2.5にはクロージャが無かった(もしくは不完全であった)からだよ
そしてPython3でまともなクロージャが採用されたことを指摘されたことで、
つまり自分の不勉強によって知らなかったことをふまえて(>>380)、
その指摘を>>409で反映し、Python3を上に位置付けた
それに何かご不満でも?
今後も、誤認の指摘や説得力のある(=客観的な)意見があれば、更新を続けます
0486デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.AN0487デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.AN逆じゃないの?
0488デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANきちんと答えておかないと駄目か
>つまり自分の不勉強によって知らなかったことをふまえて(>>380)、
>その指摘を>>409で反映し、Python3を上に位置付けた
>それに何かご不満でも?
関数型のプログラミングに近いかどうかを論点にしてるのに
なんで再代入を良しとするわけ?
その観点からみたら逆でしょ?
0489デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANなんでnonlocalがあるとまともなんだ?
Rubyもそうだが、外の変数へ再代入できたらお前の思う関数型に近づくのか
と思ったら487が書いてた
0490デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANRubyが1.9で壁を越えているのは認められない。
これを許すのなら、C系言語において三項演算子で
関数型条件分岐が可能とか、もっと配慮があってしかるべき。
0491デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.AN本当に宗教なんだなrubyって
0492デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANPerlは文学
0493デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.AN多くのケースで当てはまるはずだけど実装難しそう
0494デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANC++11 > Python2とするのはよくわからんな
C++は言語仕様的に変数に暗黙的な無限エクステントを与えられないから
C++11でlambda導入されたといっても、funarg問題を解決するために
キャプチャが必要な変数に関する情報を手動で明示しないといけない仕様だぞ
とにかく目的は達成できる、という意味でC++11のクロージャが許容できるのなら
同じ理屈でPython2のnonlocalなしも許容できるだろ
上位のローカル変数に代入できないが参照はできるから、下のように書けばいいだけ
def make_accumulator():
acc = [0]
def add(n):
acc[0] += n
return acc[0]
ついでに言えばこのように環境を書き換えるのクロージャは参照透明性を持たない訳だが
参照透明性を汚すタイプのクロージャへのサポートが不十分であることが
なぜ関数型プログラミング適性において劣ることになるんだ?
自分で純粋性(副作用)を重視していることと矛盾しているとは思わないのか?
0495デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.AN宗教つーかヤバイ薬じゃね
0496デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANコード見てオナニーする趣味はないから誰でも似たようなコードになる言語でいいよ
0497デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.AN0498デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANJavascriptのクイックソート。
Quicksort = function (xs) {
if (xs.length <= 1) return xs;
var pivot = xs[Math.floor(xs.length/2)];
return (new Array).concat(
Quicksort(xs.filter( function(x){ return pivot>x;})),
xs.filter( function(x){ return pivot==x;}),
Quicksort(xs.filter( function(x){ return pivot<x;})));
};
0499デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANなんせモルモン教徒が伝道活動を通じて会得した
様々なテクニックを駆使して広めた言語だからね。
喩えとかじゃなくガチで宗教だし、宗教としてもかなり特殊。
0500デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANマジでreturnとfunctionがうざすぎる
0501デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANタイピングスピード遅いの?
0502デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANなんでそうなる
0503デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANdef sort(xs: Array[Int]): Array[Int] = {
if (xs.length <= 1) xs
else {
val pivot = xs(xs.length / 2)
Array.concat(
sort(xs filter (pivot >)),
xs filter (pivot ==),
sort(xs filter (pivot <)))
}
}
https://sites.google.com/site/scalajp/home/documentation/scala-by-example/chapter2
0504デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANインデントがないとすごく見づらいってことが
よく分かるなw
0505デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANやっぱり駄目言語だな
0506デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANsort([], []).
sort([H|T], S) :- partition(T, H, L1, L2), sort(L1, S1), sort(L2, S2), append(S1, S2, S).
partition([], _, [], []).
partition([X|L], Y, [X|L1], L2) :- X =< Y, partition(L, Y, L1, L2).
partition([X|L], Y, L1, [Y|L2]) :- X > Y, partition(L, Y, L1, L2).
0507デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANvar quicksort = function (xs) {
if (xs.length <= 1) return xs;
else {
var pivot = xs[Math.floor(xs.length/2)];
return (new Array).concat(
quicksort( xs.filter( function(x){ return pivot > x } ) ),
xs.filter( function(x){ return pivot == x } ),
quicksort( xs.filter( function(x){ return pivot < x } ) )
);
}
};
def quicksort(xs: Array[Int]): Array[Int] = {
if (xs.length <= 1) xs
else {
val pivot = xs(xs.length / 2)
Array.concat(
quicksort(xs filter (pivot >)),
xs filter (pivot ==),
quicksort(xs filter (pivot <))
)
}
}
0508デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANif (xs.length <= 1) return xs;
else {
var pivot = xs[Math.floor(xs.length/2)];
return (new Array).concat(
quicksort( xs.filter( function(x){ return pivot > x } ) ),
xs.filter( function(x){ return pivot == x } ),
quicksort( xs.filter( function(x){ return pivot < x } ) )
);
}
};
↓ArrayExというオレオレライブラリを作るとこうなる。
function quicksort(xs) {
if (xs.length <= 1) return xs;
var pivot = xs[Math.floor(xs.length / 2)];
return ArrayEx.concat(
quicksort( xs.filterCond(pivot, ">") ),
xs.filterCond(pivot, "=="),
quicksort( xs.filterCond(pivot, "<") )
);
}
プログラミング言語力は、(言語の力で)見やすくなるかどうかだが、
プログラミング力は、(自分の力で)見やすく出来るかどうかだと思う。
言語の力に、自分の力が左右されるうちはまだまだ。
0509デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANSequenceableCollection >> qsort
^self size < 2 ifTrue: [self] ifFalse: [
(self select: [:x | x > self middle]) qsort,
(self select: [:x | x = self middle]),
(self select: [:x | x < self middle]) qsort]
#(4 2 1 3 10 7 8 6 9 5) qsort "=> #(10 9 8 7 6 5 4 3 2 1) "
0510デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANクイックソートを使うことはたくさんあっても
クイックソートの作成は一回だけだ。
どの言語もクイックソートを作成した後は、
配列 = quicksort(配列)
という一行になることに気づいてほしい。
そう。クイックソートに関する点では、
もはや言語の差がなくなってしまったのだ。
0511デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANmiddleって名前ありなん?
配列の数が奇数の場合の仕様が
名前からはわかりづらいから避けていたんだけど、
middleという名前がOKならこうかけるよ。
function quicksort(xs) {
return xs.length <= 1 ? xs :
ArrayEx.concat(
quicksort( xs.filterCond(xs.middle, ">") ),
xs.filterCond(xs.middle, "=="),
quicksort( xs.filterCond(xs.middle, "<") )
);
}
functionとreturnを使う数がそれぞれ1回、最小になった。
0512デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.AN参考まで、Squeak Smalltalkの#middleはこんなふうに定義されています。
SequenceableCollection >> middle
"Answer the middle element of the receiver."
^self at: self size // 2 + 1
0513デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.AN0514デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANmiddleの仕様を
名前から判断できる?
名前から複数の仕様が考えられ、
複数の言語があったとして、
仕様がばらばらになるようなものは、
わかりにくい名前なんだよ。
0515デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.AN0516デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANそもそも「middle」ありなのとは書いてなくて
「middleという名前」ありなの?だろ
お前自分の勘違いに自分で笑ってるのか?
0517デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.AN昇順で書けよ!w
0518デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANこのままフェードアウトするパターンですね。
0519デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANそんなのがありなら最初からCoffee使えや
0520デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANJSよく知らないんですが、
filterCondとかmiddleは
どこにどんな処理として定義されているんですか?
0521デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.AN0522デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.AN最近のjsは結構いいな
0523デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.AN普通さ、自分でライブラリ書くだろ?
俺は現実的な開発において
差がでないことに興味はないんだよ。
>>520
5分時間やるから自分で書いてみろ。
処理の内容はquicksortの処理に必要な動作だ。
>>521
> jsはfunctionとreturnに文字数取られてるだけっぽいな
俺もそう思う。
CoffeeScriptは、わざと差が出るようなコードを意図的に書いたのを除けば、
functionとreturnの文字数分、そして括弧だけの行ぐらいしか差が出ないんだよ。
でそれくらいならタイピングにかかる時間の差ぐらいしかうまれない。
0524デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.AN0525デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.AN0526デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANもしかして他のlambda式ある言語触ったこと無い?
0527デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.AN読む時間か?
こっちはもっと差がないと思うが?
0528デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANそうやら根本的に相容れない人間らしいな
0529デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.AN何でもありなんだな。
Rubyならこんなシンプルにかけるよ!w
def quicksort(xs)
return xs if xs.size <= 1
quicksort(xs.smallers) + xs.middles + quicksort(xs.largers)
end
smallers、middles、largersはクイックソートの定義そった操作だから
自分で考えてみろ。…とか許されないだろJK
0530デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.AN他人のコードをパクって分からないところは「自分で考えろ」って言うのさ
まともに相手しても仕方ない
0531デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.AN0532デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.AN0533デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.AN> もしかして他のlambda式ある言語触ったこと無い?
もし、触ったことがあるlambda式ありの他の言語が
\ x y -> x*y の Haskell とか
->x,y {x*y} の Ruby とか
(x:Int,y:Int) => x*y の Scala とか
[:x :y | x*y] の Smalltalk とか
だった場合はどうなるの?
0534デフォルトの名無しさん
2013/08/17(土) NY:AN:NY.ANHaskellを使った事は無さそうだなって分かる
0535デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANRubyもそれでゆるすし、
JavaScriptもそれで許します。
function quicksort(xs) {
return (xs.size <= 1) ? xs :
quicksort(xs.smallers).add(xs.middles).add(quicksort(xs.largers));
}
結局のところ、ライブラリのほうが重要で
言語自体では差は殆ど出ないのさ。
0536デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0537デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANなぜなら、クイックソートを実装している最中に使う
smallers、middles、largersが
クイックソート専用の関数になっているから。
クイックソートを作るときにクイックソートを実装するために
作られた関数を使ってどうするw
汎用関数ではない。
>>511のコードのmiddleは汎用関数
(その根拠はSmalltalkで用意されているから)
だからこっちは問題ない。
0538デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN> quicksort(xs.smallers).add(xs.middles).add(quicksort(xs.largers))
おいおい、使わないかもしれないのにxs.smallersやxs.middlesやxs.largersを
メンバとして持ってるのか、すげー無駄だな。
アホのJS厨が考える事は分からんなー。
あ、>>529のRubyは括弧省略してメソッド呼んでるだけだから一緒にすんなよ?
0539デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANオマエ馬鹿じゃね?
smallers、middles、largersって
Ruby厨>>529が考えだしたメンバだぞ。
使いもしないのに持ってるんだとさ。
0540デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANあ、ほんとうだ!
Ruby厨って馬鹿って確信した事例の一つになった。
0541デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN逆に言えば、smallers() なら問題ないって言っているようなもんだ。
くだらね。
ちなみにsmallersのままでもプロパティにしてしまえば
メソッド呼び出しにできるので、Rubyと一緒。
0542デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANScalaでも関数型言語なら演算子は関数扱いが普通
なんつうかGetStart斜め読み程度の知識で議論しようとしてるよな
0543デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN>ちなみにsmallersのままでもプロパティにしてしまえば
>メソッド呼び出しにできるので、Rubyと一緒。
pivotとかまでプロパティ作るの?標準リストに?
0544デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0545デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANゴミの山になるだけだと思うんだけど、
そんなんで生産性が上がると思ってる奴いるんだな
0546デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN↓こいつにレスしてるの?
529 名前:デフォルトの名無しさん[sage] 投稿日:2013/08/17(土) NY:AN:NY.AN
そのままじゃ動かないコードを貼り付けて「こうかけるよ」とか
何でもありなんだな。
Rubyならこんなシンプルにかけるよ!w
def quicksort(xs)
return xs if xs.size <= 1
quicksort(xs.smallers) + xs.middles + quicksort(xs.largers)
end
smallers、middles、largersはクイックソートの定義そった操作だから
自分で考えてみろ。…とか許されないだろJK
0547デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN尻拭いをしてることぐらい
分かれよw
0548デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANどんな議論だか見えないんだが?
0549デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN何か意味あるんだっけ?
xs[Math.floor(xs.length/2)]
こういうやつね。
もしかして、中央値をpivotにしようとして間違ってる?
0550デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANRubyならこんなシンプルにかけるよ!w
def quicksort(xs)
return xs if xs.size <= 1
quicksort(xs.smallers) + xs.middles + quicksort(xs.largers)
end
0551デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN使わないかもしれないのにxs.smallersやxs.middlesやxs.largersを
メンバとして持ってるのか、すげー無駄だな。
汎用性の無い関数を山のように積み上げても
ゴミの山になるだけ
pivotとかまでプロパティ作るの?標準リストに?
0552デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN立場的にどんな場面でもfunctionとreturnキーワードは有用って主張でしょ?
じゃなきゃいちいち否定する理由がないじゃない。
0553デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANうわあ恥ずかしい
お前が
0554デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANえ?マジで説明してよ
0555デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN> もしかして、中央値をpivotにしようとして間違ってる?
中央値ってメディアンのこと?
あれは配列の数が奇数なら、中央値取ってこれるけど、
配列の数が偶数なら、中央に近い二つの値の平均になる。
だからクイックソートのpivotとは違う。
だから計算した方がいいと思ったが、
smalltalkではmiddleというメソッドが有るらしい。
(>>509 >>512 参照)
ならsmalltalkの真似でmiddleという名前を使うのはありかもしれない。
俺自身は一般的ではないと思ってるけどね。
でもさすがに>>550、このRubyコードはダメだw
0556デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN> 立場的にどんな場面でもfunctionとreturnキーワードは有用って主張でしょ?
だれもfunctionとreturnが有用なんて言ってないと思うけど?
タイプする文字が多い程度の弊害はあると。
0557デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN真の中央値調べられる時点でソート終わってるだろ
0558デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANだからそれじゃ不要だという事を否定する根拠にならないだろ
言ってることめちゃくちゃだ
0559デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANもちろん偶数のときは、中央に近い2つの値のどちらかを取る形式で
0560デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANそのまま動くコードに書き直してみた
def quicksort(xs)
if xs.length <= 1
xs
else
smaller, larger = xs[1..-1].partition { |x| x < xs[0] }
quicksort(smaller) + [xs[0]] + quicksort(larger)
end
end
0561デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN真の中央値ってなんだ?
もしかしてソートした配列の中で、
真ん中の値だと思ってる?
xs[Math.floor(xs.length/2)]
どうみても、(ソート関係ない)配列の中で
真ん中に位置する添字の値です。
0562デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN終わってないよ
中央値はO(n)の計算量で求められるし
0563デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANつまり、HaskellやScalaではラムダ式は
文法としてはあるけど実際は使わないから
functionとreturnキーワードをラムダ式に使う
冗長な記述しか認めんって主張をしてるの?
0564デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANだからそれを言ってるのに理解力無いな・・。
0565デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN(※>>529です)
おかげで、>>560がワケの分からないコードを書き始めたぞw
0566デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANお前が誰だかさっぱりわからん。
「真の中央値」と言い出したのは誰で
どういう意味で、なぜそう思ったのかを
いってくれ。
0567デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANそれは不勉強だった。すまん。
0568デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANxs[1..-1]
なにこれ
全要素って意味?
0569デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANxs[0] が hd xs で、xs[1..-1] が tl xs
リストの頭部と尾部のこと
0570デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANやるじゃん
後はif文消すだけだな
0571デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0572デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN>>503が書いた
val pivot = xs(xs.length / 2)
が正しいやり方だと思っていた。
別に配列の最初の値でいいのか。
ならもっとスマートに書けるな。
0573デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0574デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANクイックソートは、smallerとlargerがほぼ同数になるように
分割すると計算量的に有利なので、
pivotはxsの中で最も中央値に近い値を選ぶのがベスト
だけど、馬鹿正直に中央値を計算するのも無駄が多いので、
適当に三点くらいのサンプルをとって、その中央値をpivotにしたりする、らしいよ
0575デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN>>560は、>>506のPrologコードをRubyに書き直したもの
Prologを知らないなら、GHC(KL1)かErlangのコードがWikipewdiaにあるから、それを嫁
http://ja.wikipedia.org/wiki/Guarded_Horn_Clauses
http://ja.wikipedia.org/wiki/Erlang
>>503やその他のコードでは中央値としてリストの中央に位置する値を選んでいるが、
これは近似値にすぎない
もし正確な中央値を求めたいのなら、リスト全体を探索しなければならない
そんな無駄をするくらいなら、リストの先頭値(頭部)を中央値と仮定してしまえ!と
いうのがミソになる
また、>>503その他では3回のフイルタでリストを全探索しているが、
これをメソッドArray#partitionの1回で済ませているのも高速化のキモになる
0576デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANfunction quicksort(xs) {
if (xs.length <= 1) return xs;
var parts = xs.partition(function(x) { return x < xs[0] });
return ArrayEx.concat( quicksort(parts[0]), xs[0], quicksort(parts[1]) );
}
0577デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANqsort [] = []
qsort (x:xs) = qsi (< x) ++ [x] ++ qsi (x <)
where qsi func = qsort (filter func xs)
0578デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANどんな言語も大差ないんよね。
標準ライブラリ関数が充実してなければ、
自作ライブラリ関数が充実させればいいだけ。
0579デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANけどいいや
0580デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANソート済みの配列を与えられた場合の
処理の無駄を恐れてのことだろ?
0581デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN正解
0582デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN最悪の計算量がO(n^2)になるのは同じよ
0583デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN要素の重複もついでに排除してくれるよいコードですね。
0584デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN経験的に真ん中の値を使う場合の最悪の並びで与えられるより
ソート済みの配列を与えられる可能性の方がはるかに多い。
0585デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0586デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANこ・・このやろう・・馬鹿にしやがって・・
0587デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANqslの適用を1回で済ませるように書き直せないかな?
0588デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANかつ最悪の計算量もO(n log n)になるよ
0589デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN×ソート済みの配列を与えられる可能性の方がはるかに多い。
○ソート済みの配列を与えられる可能性の方が相当多い。
そーとー多い
0590デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN効率が云々とかいう議論はナンセンスなんだけどな。
0591デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN>>589の座布団ソートして
0592デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANデータが連結リストだと遅い
0593デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANそれを言ったら、大抵の言語に標準で存在するソート関数を
こんなとこで議論してどうするよ……
0594デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN次からは、たとえ劣等言語であっても、
すでにあるコードをよく読んでから投稿しようね。
0595デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN言語組み込みのソートで
クイックソートなんか普通使わんだろ。
0596デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN効率気にする奴が連結リストなんかソートするな。
0597デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANqsort [] = []
qsort (x:xs) = qsort (fst parted) ++ [x] ++ qsort (snd parted)
where parted = partition (< x) xs
書いたけど、リストの時点で比較とかの速度気にしても仕方ないと思うよ。
0598デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANしょぼいクイックソートのコードを貼る>>498のセンスが悪い
0599デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANsort = function (xs) {
return xs.sort();
};
0600デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN相当シンプルになったよ。
言語じゃないんだよね。
0601デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANArrayExは言語機能じゃないな
0602デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN開発効率に一番影響する。
0603デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN必死に話をそらそうとしているの図
0604デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN架空のライブラリー使って書いたコード貼るのやめろよ。
0605デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0606デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN禿
0607デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN自分でライブラリ作成して補うじゃん?
そのライブラリを作成する機能は
言語の機能じゃん?
現実的な話をしようぜ。
0608デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANJavaScriptでもSmalltalk程度の表現が可能なのはわかった。
0609デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANmiddleって名前あり?
0610デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0611デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0612デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANfunction qsort(xs){
var part = xs.slice(1).reduce(function(pt,e){
return (e < x ? pt.s : pt.l).push(e) , pt;
},{l:[],s:[]});
return !xs.length ? xs : [].concat(
qsort(part.l),
[x],
qsort(part.s)
);
}
ところで >>498はなんで
.filter(function(x){ pivot == x; })
なんて入れたんだ?
0613デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANfunction qsort(xs){
var part = xs.slice(1).reduce(function(pt,e){
return (e < xs[0] ? pt.s : pt.l).push(e) , pt;
},{l:[],s:[]});
return !xs.length ? xs : [].concat(
qsort(part.s),
[xs[0]],
qsort(part.l)
);
};
0614デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0615デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN何様だ
0616デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANIeのバージョンでいえば、いつからの話?
0617デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN必要条件
Internet Explorer 9 標準、Internet Explorer 10 標準の各ドキュメント モードでサポートされます。
Quirks、Internet Explorer 6 標準、Internet Explorer 7 標準、Internet Explorer 8 標準の各ドキュメント モードでサポートされていません。
http://msdn.microsoft.com/ja-jp/library/ie/ff679973(v=vs.94).aspx
Array.filter - JavaScript | MDN
実装されたバージョン JavaScript 1.6 (Gecko 1.8b2 以降)
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
0618デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANfilterすらやっと導入したieは死んでいい
0619デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANIE9かよ
0620デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN遅延評価が可能なまともなイテレータの仕組みを導入してから対応するのが筋だろう
0621デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANまあ、generatorならFirefoxで対応してるし、次期javascriptでは入るが
0622デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN時代遅れのウンコすぎ
0623デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0624デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANそんなに致命的ならCとかですぐにジェネレーターができたはずだろ
まあ、イテレータパターンくらいならどの言語でも普通にライブラリがあるけど
大抵for文で間に合ってるからほとんど使われないねw
パフォーマンスなんて結局そんなもんなんだよ
0625デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANでも、mapやfilterなどの関数を合成するスタイルのプログラミングをするなら、
遅延評価は欲しいよ
関数合成するたびに中間状態でリスト作られるのは、いくら何でも無駄すぎる
まあ「関数型ハイブリッド言語」なら在った方が良いんじゃないのw
0626デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANfun
qsort [] = []
|
qsort (x::xs) = let
val (smaller, larger) = List.partition (fn e => e < x) xs
in
List.concat [qsort smaller, [x], qsort larger]
end
0627デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANそういえば、ここまでPythonのコードが見あたらないね
0628デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN重複を考慮しないコードを書きたがるの?
ただのバカなの?
0629デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN重複を考慮しない、とはどういう意味?
入力リスト内で要素に重複があっても正しくソートできるけど....
- qsort [3,6,1,2,1,5,4,3];
> val it = [1, 1, 2, 3, 3, 4, 5, 6] : int list
0630デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN>>629の>>623は間違いで、>>628が正しい
0631デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANどうかなあ、実際リストがそれほど大きいなら関数型スタイル
つかわないでforにするでしょ
ほとんどは1000以下の速度とかどうでもいいリストだろ
ブラウザ画面で1000も表示してたら通信速度もレスポンスも悪い
0632デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANおそらく、たまたま>>577のHaskellコードが重複を考慮していなかった(>>583)ので、
すべての関数型スタイルが重複を考慮していない、と(>>628は)早合点したんだろなw
フィルタ(filter)を止めて、リストを二分割するパーティション(partition)という
述語(>>506)、メソッド(>>560)、関数(>>597,626)を導入したことで、
フィルタの抱えていた重複問題が自然に解決できた、という訳だ
しかもリスト探索が1回で済むから効率も改善された
0633デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANPython (with numpy)
qsort = lambda xs: xs if xs.size <= 1 else numpy.concatenate(
(qsort(xs[xs < xs[0]]), xs[xs==xs[0]], qsort(xs[xs > xs[0]])))
0634デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANどうせブラウザの生存期間はもっと長いので、
polyfillで未対応ブラウザでも
容易に対応できるものはあまり問題視しない。
0635デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN他の言語と同様に、標準ライブラリだけで書けないかな?
0636デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANdef qsort(xs):
if len(xs) <= 1:
return xs
ss = [x for x in xs[1:] if x < xs[0]]
ls = [x for x in xs[1:] if x >= xs[0]]
return qsort(ss) + xs[:1] + qsort(ls)
0637デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANxs[xs < xs[0]] ってどう解釈されるの?
0638デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN他の言語(>>506,560,597,626)と同様に、
1回のqsort呼び出しでリスト要素の全探索処理が1回ですむように書けないかな?
0639デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0640デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN[x for x in xs if x < xs[0]]
>>638
>>636のssとlsの生成を以下に置き換え
ss, ls = reduce(lambda (xss), x: (xss, xss[0 if x < xs[0] else 1].append(x))[0], xs[1:], ([],[]))
0641デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0642デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANarray.sort();
で終わる話をいつまで続けてるんだって話なんですよ
言語の違いはライブラリの違い
ぶっちゃけほとんどそれだけ
0643デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN関数型陣営と限定してるけど
実は関数型もスクリプトも両方書いてるというオチ
0644デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN置き換えてみた
def qsort(xs):
    if len(xs) <= 1:
        return xs
    ss, ls = reduce(lambda (xss), x: (xss, xss[0 if x < xs[0] else 1].append(x))[0], xs[1:], ([],[]))
    return qsort(ss) + xs[:1] + qsort(ls)
0645デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0646デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANdef qsort(xs):
if len(xs) <= 1:
return xs
ss, ls = reduce(lambda (xss), x: (xss, xss[0 if x < xs[0] else 1].append(x))[0], xs[1:], ([],[]))
return qsort(ss) + xs[:1] + qsort(ls)
0647デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANこれって>>613と同じ方式?
0648デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN清々しいまでにドカタだな
0649デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN1行が長すぎて読みづらいんだけど、Pythonは可読性を大切にする言語なんだし、
関数内関数が定義できるという利点を活かして、関数partitionの定義/適用で
書き直しできないかな?
あるいは(>>613みたいに)、適切なインデントで可読性を向上させてもいいと思うよ
0650デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANss, ls = reduce(f, xs[1:], ([],[]))
0651デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN次回からPHPやPerlは消していい
0652デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN>>560のRubyコードにいついて、組込みメソッド Enumerable#partition を利用せず
ユーザ定義メソッドとして書き直してみた
def quicksort2(xs)
partition = -> array, fn {
array.inject([[], []]) { |(xs, ys), elem|
fn[elem] ? [xs << elem, ys] : [xs, ys << elem]
}
}
if xs.length <= 1
xs
else
smaller, larger = partition[xs[1..-1], -> x { x < xs[0] }]
quicksort(smaller) + [xs[0]] + quicksort(larger)
end
end
0653デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN関数型プログラミングがスクリプト言語のすべてではないから、消す必要はないと思う
0654デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANそんなんでPerlとPHPを削られてもな……
0655デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN書かないという事は人数がいない
0656デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANなんかJS厨っぽい奴に粘着されそうでメンドイわ
0657デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN素直に普通のメソッド定義で書き直した
def partition(array, &fn)
array.inject([[], []]) { |(xs, ys), e|
fn[e] ? [xs << e, ys] : [xs, ys << e]
}
end
def quicksort3(xs)
if xs.length <= 1
xs
else
smaller, larger = partition(xs[1..-1]) { |x| x < xs[0] }
quicksort(smaller) + [xs[0]] + quicksort(larger)
end
end
0658デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANバトルスレなんだから、それは不戦敗と等しいのでは?
0659デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANああ、うん・・それは同意。
0660デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANpartition とかよく使う処理だし外でいいよ
0661デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN今更何言ってんだって話だけどな
0662デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANおかしいので、まずその辺の教養をつけるといい
土方作業でも何でもいいから
0663デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN何度も呼ばれるに決まってんだろ
ドカタはドカタらしくすっこんでろ
0664デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANRubyのメソッド Array#<< は破壊的操作だよ
>>657だと、メソッド inject の引数で配列が2個生成されて、
それらにメソッド << で要素を(破壊的に)追加している
だから、inject内のループで毎回ソート対象の配列全体を再生成している訳ではない
(ただしタプルとして使う2要素の配列は毎回生成してるけどね)
0665デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN結局のところ、元の>>560と比べて2ステップ増えただけという、つまらん結果になった
def quicksort4(array)
if array.length <= 1
array
else
smaller, larger = array[1..-1].inject([[], []]) { |(xs, ys), e|
e < array[0] ? [xs << e, ys] : [xs, ys << e]
}
quicksort(smaller) + [array[0]] + quicksort(larger)
end
end
0666デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANRubyは配列への要素の追加操作で
内部的な配列再生成は伴わないの?
どうやってメモリを確保しているんだろう。
0667デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANまずは計算量という言葉を学習してから来い
0668デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANまさか、このスレのコードが空間計算量をまともに考えているとでも?
0669デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANRubyの配列は、内部実装としては双方向ポインタによる連想リストだから、
追加(<<)の場合には、追加した要素の分だけしかメモリは確保されない
0670デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN一つだけ定義されてて、全部アドレス呼び出しに変換されてるよな
スクリプト言語だと、まさかいくつも関数の領域を同的に確保して、
時間食ったりするの?
0671デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN無駄にリスト作りまくりなのはpartitionじゃなくて、ここ
0672デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0673デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN言語や実装によるとしか。
0674デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANスクリプト言語の関数はクロージャになってるのが多いし、
クロージャは環境も含むから、それぞれ毎に領域を確保する必要はあるだろう
ただ、毎回パースしたりするわけじゃない
0675デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANhttp://jsperf.com/generating-simple-closure-test
0676デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN一番遅いやつでも一秒間に200万回、、、
こんなの気にしてるやつがバカだなw
0677デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANどう受け取ったらそうなるんだよ
0678デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANスコープチェーンみたいなものへの
ポインタがあるだけでしょ
0679デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN素直に数字見たらそうなるだけだが?
どれも速すぎて全く処理がないと考えていい
0680デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANそれを速すぎると感じた時代もあったね
0681デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN関数定義の処理は、時代が進んだらハードも当然変わるんだが
0682デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN思われた当時より数年たった今、ますます速いと
思っているように、CPUの進化でどんどん速くなる。
一秒間に200万回。これは今は速い程度だが、
将来は超速い処理ということになるだろう。
つまりますます気にしなくて良くなる。
このことを>>688はいいたいのだろう。
0683デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN誤差としていいかもしれんが、全く処理がないはいくらなんでも言い過ぎ。
0684デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANあるものに比べて5倍の速度が出ましたとかね。
実際使ってみると5倍も差があるように感じない。
その理由は二つあって、
一つは、プログラム全体の処理時間のうちわずか1%の部分が5倍速くなっただけ。
ベンチマークではわずか1%の部分だけを集中して
計測するようなことをするから5倍さがでるがプログラム全体からすれば
体感できないレベル。
もう一つは、もともと速い処理がもっと速くなっただけ。
0.001秒で終わるものが、0.0001秒で終わっても計測は出来るだろうが
人間にはわからない。
具体的なアプリで何秒の差がでたかというのが人間にとっては重要。
0685デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0686デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0687デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN何のために話題用意してると思ってるんだよ低能。
0688デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANやっぱもっと宗教的・哲学的・美学的観点から論議したほうがはっきりしていいよね
0689デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANそれを言わないことには何の価値もないぞ
0690デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0691デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN秒間200万なんて異次元の速度なんだろうな
0692デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0693デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN自己顕示欲満たすために議論してる奴は死ね
0694デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0695デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANJSのJITは速いって事ある毎に言ってて面白い
0696デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANJITが速いのは意味があることでしょ?
何を言ってるんだろうかね。
0697デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0698デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN秒間200万回とか300万回が十分速いとかいう話じゃないのか?
0699デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0700デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0701デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANつか、ベンチマークの内容をみたところランダムの数値を
作ってる処理が大部分のようだが
0702デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0703デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANえ?
0704デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN初代 Pentium の 300MHz なんてあるんだ。
200MHz までだと思ってた。
0705デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANマジでマジで
return functionのとこなんか特に
Random生成なんて線形合同法のバリエーションか似たような速度の
アルゴリズムだろ
つまり、実質のコストは数値一回足したとか二回演算したとかそんなもん
0706デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0707367
2013/08/18(日) NY:AN:NY.AN要望があったので再開します
ここまでの指摘について、>>409を更新しました
FP
---- 壁0. 変数の壁 ----
Haskell
---- 壁1. 純粋性(副作用)の壁 ----
F#/OCaml/SML/Scala
---- 壁2. 型推論の壁 ----
=====<< 越えられない壁 >>=====
Erlang
---- 壁3. パターンマッチの壁 ----
Common Lisp/Scheme/Ruby1.9
---- 壁4. 末尾再帰最適化の壁 ----
Emacs-lisp/Closure/Smalltalk/Ruby1.8
---- 壁5. 式指向(条件判定式)の壁 ----
=====<< 越えられない壁 >>=====
C++/Java/C#/Perl/Python...etc
---- 壁6. ラムダ式の壁 ----
C
[変更点]
・Common Lisp を上げ、Emacs-lisp を新規に追加 -- >>444,450,459
・壁3.を新規に変更 -- >>455,456
・壁.「クロージャ/ラムダ式」を「ラムダ式」に変更し、これに伴って
C++/Java/C#/Perl/Python についてバージョン化も廃止
==> これについては、別途説明します
・「壁5.式指向」について、>>480以降で客観的な意見(反論/異論)が無かったので保留
・Ruby1.9の末尾再帰最適化について、実装が不完全であるという確定情報が無いので保留(>>490)
0708デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN自分の数値でどれだけ遅くなってるのかを言ってもらわないと
0709デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANrandomは全ケースで同じ数だけ呼び出してる
0710デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0711デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANで?
0712デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0713デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN>>706なんだから、randomが処理の大部分を占めるわけがない
0714デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANで?って言われても
コード見る限りその上での比較だから最低でも乱数生成より2倍は遅い
0715デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0716デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN706なんて他の数値を公表してないから何とも言えん
0717デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN俺の環境だと、一番遅いやつで乱数生成の3倍程度
一番早いやつだと1/2だから、乱数生成が大多数を占めてる
特にクイックソートのやつはこれだろ
0718367
2013/08/18(日) NY:AN:NY.ANFortranの設計者でありBNF(バッカスナウア記法)の考案者でもある
バッカス氏が考案した関数型言語です
特徴としては変数という概念が存在せず、プログラム構成子と呼ばれる
高階関数を使い、アトム、基本関数(=組み込み関数)、そして
プログラム構成子自身を組み合わせることでプログラミングを進めます
Wkipediaの英語版にも解説があるので、そちらも参考になるでしょう
http://en.wikipedia.org/wiki/FP_(programming_language)
日本語では、以下の書籍で解説されています
・続 新しいプログラミング・パラダイム
http://www.amazon.co.jp/dp/4320025350/
なお、この書籍は>>575で紹介したGHCや、演繹データベース、
圏論のコンパイラ生成への応用、もう一つの「究極のプログラミング」である
構成的プログラミングなど、興味深いトピックが満載なのでお薦めです
0719デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN一番速いやつってJust Return Fixed Functionってヤツ?
これは関数返してるだけで関数内関数を作ってないから違くね?
0720デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN作ってるけど、実際の処理は関数内関数を返すだけだから同じじゃね?
まあ正確なところは実際にやってみないと分からんけど
0721675
2013/08/18(日) NY:AN:NY.ANhttp://jsperf.com/generating-simple-closure-test
他の結果が消えてしまったのは一度変更したためです。
0722デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANお前、ほんっとバカだなっ
つーか、自演か?
0723367
2013/08/18(日) NY:AN:NY.AN>・Ruby1.9の末尾再帰最適化について、実装が不完全であるという確定情報が無いので保留(>>490)
この件について、>>369でも書いているように、情報が確定していません
もし不完全であるという確定情報があれば喜んでRuby1.9を下げたいので、情報提供を歓迎します
0724デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANデフォルトオフの時点でさっさと下げるべきだろう?
0725675
2013/08/18(日) NY:AN:NY.ANなぜか上に上げてくれないようです
そういうこと
0726デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0727デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANベンチに関数内関数を作ってるGenerate Function Returns 0ってのがあるので、
それを見ればいいよ
0728デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANヤバいRuby厨を起こしたのお前か!
0729デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN猛省しる!
0730367
2013/08/18(日) NY:AN:NY.ANRuby1.9で末尾再帰最適化が実装されたのは事実ですので、却下します
ただし、その実装が不完全であるという確定情報があれば採用する、という話です
>>725
もしPyhtonの if式が、他の言語と同様に if <cond>: <true> else <false> という
自然な構文に変更されたなら、式指向であると認めます
この件は過去にも何度か議論されていますが、客観的な意見が無いまま、
言い換えるとPyhton支持者の独りよがりな意見のまま議論を終えているのが実情です
また、クロージャについては(自分の不勉強もあって)議論に混乱が見られたので
思いきって>>707では壁から外しましたから、Pyhtonだけが不利では無いと考えます
0731デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANそれだと、乱数生成コストとほぼ同じ
結局、関数の中に関数作るのなんて演算数回と変らんってこと
つまり、気にする奴はやはりバカ
0732デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN> もしPyhtonの if式が、他の言語と同様に if <cond>: <true> else <false> という
> 自然な構文に変更されたなら、式指向であると認めます
だからよ、自然な構文かどうかを決めてるのはお前の主観だけだろ?
なーにが「客観的な意見が無いまま」だ、アホ
0733デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANそれ以外は主観だろ
0734デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0735デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN> 実装が不完全であるという確定情報
Ruby開発者会議20130727Japan
「特殊なケースでtail call optimizationが効かないことがあってもよいか」
https://docs.google.com/document/d/1Ie6HNoxCptIUe52I3XCxDLn52FtE_RWaF8lrDIXAVmc
0736デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN367の無知・主観によってなされた不当なランク付けを
いちいち指摘してたり、情報提供してお伺いをたてて
壁を外させたりランクを上げてもらったりするのを
この後もえんえんと続けるの?
あほらし
0737デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0738367
2013/08/18(日) NY:AN:NY.AN条件分岐式として不可解な構文を採用しているのはPythonだけ、これが客観性の根拠だよ
不満があれば、過去の議論の一部である以下のカキコへ反論してくれ
====【Perl,PHP】LLバトルロワイヤル19【Ruby,Python】====
711 名前: 682 Mail: sage 投稿日: 2011/12/29(木) NY:AN:NY.AN
>>695のPythonコードが読みづらい原因はif演算子の構文にある
条件判定が式である言語に限定して、それらの構文を比較してみる
Ruby:
if 条件式 then 式1 else 式2 end
Smalltalk:
条件式 ifTrue: [ 式1 ] ifFalse: [ 式2 ]
Lisp:
( if 条件式 式1 式2 )
ML:
if 条件式 then 式1 else 式2
Haskell:
if 条件式 then 式1 else 式2
Python:
式1 if 条件式 else 式2
普通の言語は「条件式 -> 式1 -> 式2」と左から右へ流れる(それが自然)
それに対して「Pythonだけ」は「式1 <- 条件式 -> 式2」と
左へ右へと行ったり来たりしないとコードが読めない
プログラミング言語界の中で「Pythonだけ」が異端な存在で、可読性の悪い構文が採用されている
これは明らかにPython開発陣の言語設計ミス、あるいは判断ミスだね
0739デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0740デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANでたよ、主観
0742デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0743デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANこれはよく使われてるからランク下げないとな
0744367
2013/08/18(日) NY:AN:NY.AN>>730の繰り返しになるけど、if-else構文はプログラム言語の基本要素なのだから、
もしPython設計者がPythonを式指向な言語としたのなら、他の式指向言語と同様に
最初から if <cond>: <true> else <false> という構文を採用していた、という話だよ
>>740
それが自然でないなら、>>738にある言語の中でPythonを除く:
Smalltalk/Lisp/ML/Haskell
の設計者達も(自分と同じく)頭が変なんでしょうね
さて、Pythonのif式が不自然ではないという主張と、どちらが客観性があるのでせうか(棒
0745デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANOCaml: fun x -> x
SML: fn x => x
Scala: (x:Int) => x
Ruby: -> x {x}
どの関数型言語も、ラムダは「引数 矢印 戻値」と並ぶ(それが自然)
それに対して、Rubyだけが「矢印 引数 戻値」と並んでる
矢印が真ん中だから、引数が戻値に変換されるという意図が伝わるのに、
「Rubyだけ」が異端な構文を採用してる
これは明らかにRuby開発陣の言語設計ミス、あるいは判断ミスだね
異端な構文を採用してると、その言語機能を持っていないルールですので、
Rubyはラムダを持ってないということになりました
0746デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANRubyの「式 if 条件」の形に else 節を
付け足したものだと考えれば、
俺は別に変だとは思わないけどな。
Pythonは else 節をよく活用している
面白い機構も多いからなおさら自然な流れだ。
あくまで主観だけどな。w
0747367
2013/08/18(日) NY:AN:NY.AN三項演算子の話と同じく「樹を見て森を見ず」だね
プログラム言語の基本である if-else 構文がRubyでは式として定義されているから、
(三項演算子と同様に)オマケであるif修飾子の存在は評価基準からは除外できるよ
0748デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANFP
---- 壁0. 変数の壁 ----
Haskell
---- 壁1. 純粋性(副作用)の壁 ----
F#/OCaml/SML/Scala
---- 壁2. 型推論の壁 ----
=====<< 越えられない壁 >>=====
Erlang
---- 壁3. パターンマッチの壁 ----
Common Lisp/Scheme
---- 壁4. 末尾再帰最適化の壁 ----
Emacs-lisp/Closure/Smalltalk
---- 壁5. 式指向(条件判定式)の壁 ----
=====<< 越えられない壁 >>=====
C++/Java/C#/Perl/Python...etc
---- 壁6. ラムダ式の壁 ----
C/Ruby
0749デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN評価基準から除外できるとか、お前に決める権利はないだろ?
ルールマスターのつもりか?
公平に振る舞いたかったら、せめて「除外できると思うのですが、皆さんどう思いますか?」と訊け
0750デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANあのさあ、
「ある言語が関数型プログラミングに活用可能な機能をどの程度有するか」と
「その言語がどのくらい関数型を意識して設計されたか」をごっちゃに
していないか?
その言語にあったパラダイムがあるんだから、
ここで後者を議論したってしょうがないだろう?
前者なら、条件分岐が値を返せればそれでいいじゃん。
構文の自然さとか、お前の主観は関係ないだろ。
それとも関数型を意識せず設計された言語は存在価値無し!とか思ってんの?
0751デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0752367
2013/08/18(日) NY:AN:NY.ANRubyの -> x { c } という構文は、Ruby2.0から採用されているね
これが違和感のある構文だというのは、自分も認める
この -> は、矢印ではなくてギリシャ文字のラムダを横に倒したものらしいが、
正直言ってコジツケだし、写像関係の矢印とまぎらわしい
素直にOCamlまたはSMLの構文を導入すれば良かったと思うが、
おそらくは fun や fn といったキーワードの導入に抵抗があったのだと憶測する
ただし、以前の(そして、Ruby2.0でも廃止されていない)構文は
lambda { |x| x } であれば矢印は使わず、lambdaという見間違えようのないキーワードが
採用されているから、これをラムダ式と見なさないという判断にも無理があるのではないかと
0753デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0754デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANであれば |X| というブロック引数の違和感、わかりにくさは無視か?
0755デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANとにかく、お前が「認める」「認めない」とかいう判断を必要とする
時点で、それはお前の主観に塗れた排除されるべき要素なんだよ。
相手には客観性を求めるくせに、いいかげんアンバランスに気付けよ。
0756デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0757デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0758367
2013/08/18(日) NY:AN:NY.ANRubyの関数型プログラミングではif修飾子は無視できる、ってことだよ
逆に、Pythonの自然な構文 if <cond>: <true> else <false> は、
Pythonの関数型プログラミングでは使えないので不自然なif式を使わざるをえない
これは、クイックソートのコード合戦で、明らかになったのではないかな?
0759デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN0760デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANまーた釣り臭い書き込みを……
上手いなーw
0761367
2013/08/18(日) NY:AN:NY.AN>それとも関数型を意識せず設計された言語は存在価値無し!とか思ってんの?
いや、>>653は自分のカキコだけど、なにか?
>>367の冒頭で書いたように、この議論は「関数型プログラミングの適性」という
限られた条件下での比較だから、誤解は勘弁願いたい
0762デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANそのわりに、構文のセンスとか設計までさかのぼって議論しているじゃん。
明らかにおかしいよ。
0763デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN立てておいたぞ。
【PHP,Python】スクリプト,バトルロワイヤル37【Perl,Ruby,JS】
http://toro.2ch.net/test/read.cgi/tech/1376836047/
0764デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANどう明らかになったのか知らんので、説明頼む
Pythonのif式ではクイックソートが書けなかったんだっけ?
0765デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN何が読みやすくて読みにくいか
これは考え方次第なんじゃね?
例えばCOBOLが自然言語に近いから
わかりやすいという主張があった。
これはある意味間違ってはないと思う。
違いは、数式で表現するか文章で表現するかだよ。
数式で表現すれば簡潔に書け、数式を知っている者にとってはわかりやすいが
知らない者にとってはわかりにくい。
文章だと数式を知らなくてもわかるが、少し文字が多くなる。
どちらがわかりやすいかというのは
場合によりけり。
俺は、なんでも短くかければいいとは思わないな。
0767デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN省略しないほうが見やすい場合もある。
セミコロンも同じ。
コンピュータはルール通りに解釈するから
どんな書き方でも解釈できるが、
人間はそうは行かない。
句読点と一緒で、コンピュータにとっては不要でも
適度に改行やスペースや区切りがあると
人間は見やすくなる。
人間にとって見やすいのは何か?
それはなんでも省略することではないと思う。
0768デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN木と森の判定がお前の主観になってんだっつの
0769デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN> Rubyの -> x { c } という構文は、Ruby2.0から採用されているね
> これが違和感のある構文だというのは、自分も認める
> この -> は、矢印ではなくてギリシャ文字のラムダを横に倒したものらしいが、
> 正直言ってコジツケだし、写像関係の矢印とまぎらわしい
今はUnicodeが自由に使える時代なんだから、
ASCIIの範囲で書ことうせずに、Unicode使えばいいのにね。
文字が入力できないという問題は
IMEやテキストエディタの問題。
0770デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN3 4 + = 3 + 4
1 5 + 2 3 + * = (1 + 5) * (2 + 3)
0771367
2013/08/18(日) NY:AN:NY.AN>>736の引用カキコで書いてあるように、コードの読み手にとって
素直に迷い無く読みとれるか否か?という視点だよ
>>752で書いたように、キーワード lambda が先行するのだから、
それをラムダ式の仮引数以外の何かと誤解するとは考えにくいと思うけど、
いかがかな?
0772デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANだからアウトな
0773デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN> ナリスマシかよw
AA省略
ナリス・マーシー (1900〜)
0774デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANブロック引数にこんな記法使う言語なんかないし、
実際、ブロックローカル宣言と区別付かないし、
素直に迷いなくは読めないからやっぱりアウトな。
0775367
2013/08/18(日) NY:AN:NY.ANPythonの最後のコードは>>650で、(不可解な)if式を使っている部分が以下の行
f = lambda xss, x: (xss, xss[0 if x < xs[0] else 1].append(x))[0]
この行は
f = lambda xss, x: (xss, xss[if x < xs[0]: 0 else 1].append(x))[0]
とは書けないから、「Pythonは式指向ではない」ことが明らかになった
if x < xs[0]: 0 else 1 の部分だね
0776デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.ANそれPythonのif式で書けちゃってるじゃん
お前、Pythonのif式がダメって結論からスタートしちゃってるよ
それじゃダメな理由が説明出来てない
0777デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN○「Pythonは私の好みに合わない」ことが明らかになった
0778デフォルトの名無しさん
2013/08/18(日) NY:AN:NY.AN英語で動詞が先に来たり、結論を先に述べるとかと一緒で言語の内部設計と関係がない。
0779デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN「明らかになったのではないかな?」とか言っといて
よくよくきいてみれば「俺好みの順番では書けていない」かよ。
ふざけんな
0780デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN---- 壁5. 式指向(条件判定式)の壁 ----
じゃなくて
---- 壁5. 私好みの壁 ----
なんだなw
0781367
2013/08/19(月) NY:AN:NY.ANその考え方を導入した言語が Fortress だね
http://ja.wikipedia.org/wiki/Fortress
日本語の解説書も出版されている
・Fortress言語―マルチコア時代の並列化プログラミング言語
http://www.amazon.co.jp/dp/4765533379/
0782デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN完全に本質を外しているよ!
と言ってあげたい。
0783デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANそれは400台のレスで既に明らかになってるよ
367の言う「式指向」という言葉は「構文の見た目が私の好みに合っている」という意味
0784デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN0785デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANえ?そういう話なの?!
0787デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN0788デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN関数型的な機能じゃないから見て見ぬふり?
0789デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN0790デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANきゃつの主観で無視できる存在らしいぜ。
0791デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANむしろ若干上の方が読みやすいくらい
0792デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN0793デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANいいよそれで
0794デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANあれは許せるのか?
ちなみにPythonもほぼ同じ表記を採用している
0795デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANこんなrubyキチに付き合うとはw
0796デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN別に関数型言語が偉いとか誰も何も言ってないのに、Rubyの順位が高いだけで
脊髄反射のようにRubyキチ扱いする奴ってどうなのかねぇ?
0797デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANbecause it keeps the two options next to the condition itself,
rather than throwing one of the two possible results way over on the other side of the positive result.
It is easier to see the condition as controlling both of the possible expressions,
with one in its left hand and the other in its right.
Plus, it reads very cleanly as English grammar,
and readability is one of the things that drew me to Python in the first place.
0798デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANここまで見る限り十分論理的な批判ばかりだと思うぞ
誰もRubyをdisってるわけじゃないし
0799デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN言ってることがおかしいぞ?
さてはおまえもRubyキチか?
0800デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN0801デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANSQLとかもそうだけど宣言型では方法より結果を先に書くのが好まれる傾向がある
0802デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN結果が左と右に綺麗に分かれていて見やすいし、条件が結果を
コントロールしていることがよく分かる
それに、英語の文法に沿っていて読みやすい
読みやすさは重要だ
つまり、英語のネイティブにとって、英語に近いPythonの方がむしろ
読みやすいという意見があるようだね
0803デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN0804デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANどういう基準で決まるんだ。
「もしも~ならこうして、そうでないならこうする」という日本語の
流れに沿ってるのが左から右へ流れてるってこと?
だとすると、英単語を使ってるPythonからしたら噴飯ものだよね
0805デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN英語の文法のせいじゃね?
もし、英語が日本語のように
結果を後に書く文法だったら、
右から左なんてものもなかっただろう。
SQLも、「○○テーブルから、○○という条件に合うものを、抽出」という
書き方になっていただろうね。
0806デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN左から右へ処理が進むわけで、
右から左という流れがそもそもおかしいんだろう。
0807デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN関数の定義だって入力と出力を先に書いてからそのあと中身書くでしょ
0808デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN367が大好きな流れの向きとは逆
0809デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANfunction(a,b)みたいな順序になったのも英語のせいだな
動詞、目的語という語順だから
だから、目的語に対して時系列に左から右へと関数が
適用されていくという形を取ることができなかった
このせいでプログラミングの世界は遅れてしまったと思う
それに、配列とただの値を区別するのも英語らしい
全てが配列であり、普通の値は、長さが1の配列として扱えたら
統一的に扱えていいのにと思ったことはいくらでもあるけど、
日本語が主流だったらそういうスクリプト言語ができていたかもね
0810デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN英語の単数系と複数形の影響だろうね
Ruby作者が「私には複数か単数かなんてことはどうでもいいので、
Rubyはそうなってない」という話をしてるのを聞いて、ああ、日本人なんだなあ
と妙に納得したよw
多分英語圏の人にとっては、どうでもいいことじゃないんだろうねえ
0811デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANHaskell等の関数型言語の関数合成は右から左
だから、関数型プログラミング適正とやらとは無関係ですね
0812デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN無関係だろうね
ただし、劣ってると思う
時系列に左から右へと行く方が明らかに便利
英語に引きずられておかしなことになってしまった
全ては英語が劣った言語のせい
0813デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANまあ欧州圏の言語族ではあるだろうな
0814デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN読むときは左に結果が来てる方が読みやすい
書き捨てコードが主戦場のRubyは左から右であるべきだな
0815デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANそういうのはIdeの機能で飛ばしたり畳んだりとどうとでもなるが
0816デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANどっち向きにコードが流れるかなんて
どうでもいい
0817デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN英語圏のバカどもが、英語の感覚でやるからそれに気づかなかっただけ
英語以外の民族にはいい迷惑
オブジェクト指向が流行ったのも、ぶっちゃけ英語と反対の語順で書けて、
時系列と流れが一致して分かりやすくなったからだ
0818デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN0819デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN腹いせに英語をdisることにしたの?
0820デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANあとから参照するために、Itやらthatやらに相当する変数がたくさんいるんだよ
これでプログラミング不必要な変数を乱発しわかりにくいものになった
それもこれも語順が間違ってたせいだ
Jqueyなんかがメソッドチェーンで人気を博しているけど、
最初からそうなるべきだったんだよ
0821デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN代入する側とされる側が遠く離れて読み難いんだよ
だから、x = y で x が y に代入される言語を作ってから戻ってこい。な?
0822デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN「こうするよ、~ならね。さもなくばこうする。」とは言えるし
時系列もこの場合は関係ないから、Pythonの式でも別に不都合はないよ
0823デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANecho hello | sed 's/$/ world/' | wc -c
関数もこんな表記を採用すればよかったんだよ。
v = foo(bar(baz(123))) みたいなカッコの対応取れてるか?
って問題は発生しない
123 | baz() | bar() | foo() => v
メソッドチェーンみたいで見やすいだろう?
まあ引数が複数になった時どうするかって話があるけど。
0824デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN日本語の辞書でもそうだが、
まず単語がでてきて、その説明を書く。
------------------------------
★プログラミング言語
プログラミング言語(プログラミングげんご)とは、
コンピュータに対する一連の動作の指示を記述するための人工言語の総称である
------------------------------
みたいにね。
定義とはC言語で言う#define みたいなもの。
関数の定義もそう。左は右と等価であることを示すもの。
なお代入は定義ではない。
0825デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANよく分からない
定義が先に出てくると、なんで左から右じゃないの?
0826デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN矢印を変えればあら不思議
v => 123
左から右だろ?
しかも、これは「vが出て来たら、123に置き換えろ」と読めるから合理的
実は代入の矢印はみんなが考えてるのとは逆にするべきなんだよ
0827デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANx + 1 = y とは書けないから、代入は紛れも無く右から左だよ
0828デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANこれが定義であるならば、
x = x + 1
x = (x+1) + 1
x = ( (x+1) +1) + 1
:
:
となって意味不明なことになる。
だからこれは定義ではない。
0829デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN#define VALUE foo() + bar() // この時点では処理は実行されない。
int value = foo() + bar() // 処理が実行されvalueに値が入る。
printf("%d", value); // 変数の値を出力するだけ
printf("%d", VALUE); // ここでやっと処理が実行される。
このように、代入と定義は実行されるタイミングが違う。
定義だと必要になるまで実行されない。
すなわち、遅延評価と同じものなのだ
0830デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANソッコーで>>827に論破されててワロス
Ruby厨って存在自体が恥ずかしいね
0831デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANなんで紛れもなく右から左になるのか分からない
単に、方向が固定されてることを示しただけであって、それが右から左なのか
左から右なのかはその議論からは確定しないじゃないか
しかも、y+1=xと書けないのはそういう規則にしているだけの話だろう
0832デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANまさか、これすら受け入れられないレベル?
0833デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN君のネタはとても面白いからコテつけてくれないか
0834デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANそういう話ならカッコの有無とか演算子の優先順位で状況次第ってことになる
自分はそういう話をしてるつもりはないんだけど、もともとは
流れ的にそういう話だったみたいだな
多分、文脈と違う話をしてたわ
スマン
0835デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN誰も定義と代入が一緒だとは言ってないと思うんだが
なぜに一生懸命そういう説明をしてるんだ?
0836デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANややこしいんだが
0837デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN面白いならコテつけなくても
見分けつくだろう?
まあ、つける気はないが。
0838デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN結論が先で詳細、条件があとは関数型だからあり。
TrueResult if Conditions
TrueResult if Conditions else FalseResult
x = y + z という代入と同じ仕組み。
これは手続き型では特例で本来は、y + z -> xという処理の順序で書かれるべき。
0839デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN0840デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANそうでないから引数に余計な括弧がついたりするんだ
0841デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANそれは正確には、+演算子の優先順位が代入演算子の優先順位より高いというだけ
別に例外でも何でもなく、よくあること
たとえば、1+2*3などは乗算から先に計算するがこれと全く一緒の理屈
0842367
2013/08/19(月) NY:AN:NY.ANRubyのTCO情報について、提供ありがとう
この文書の存在は知らなかったので、興味深く読ませてもらいました
これは、将来的に特殊なケースでTCOが有効化されないという実装の不完全性(バグ)が
発見されたと仮定した時、それをどう扱うのか(=どう判断すべきか)?という話だね
つまり、(Schemeのように)言語仕様としてTCO実装を必須(MUST)にすべきか、
あるいは(Common Lispのように)TCO実装は推奨(SHULD)にするかという判断だ
もし前者であれば、たとえ特殊なケースであってもTCOが有効化されなければ
(仕様として)不完全であると判断されるし、後者であれば、特殊なケースでTCOが
有効化されなくてもTCOが実装されていると判断できる
そして、その質問に対し、Matzは後者であると答えている
>>707に話を戻すと、「末尾再帰最適化の壁」が(前者の)言語仕様を意味するのであれば
Common LispとRuby1.9は「どちらも不完全だから壁は越えられない」となるし、
これが(後者の)実装依存を意味するのであれば
Common LispとRubyは「どちらも壁は越えている」と見なせる
>>787
どちらの判断でも(個人的には)かまわないと思うけど、Common Lisp支持派の
意見も聞きたいので、本件の判断は保留、つまり現状維持とさせていただきます
0843デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN0844デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN馬鹿だなぁ。代入の話は演算子優先順位とは全然関係ない
優先順位を弄っても、「y + zの値をxに代入する」という処理で
y + zを=の左側に持って来れるわけじゃないからな
出来るもんならやってみ?
0845367
2013/08/19(月) NY:AN:NY.AN正面からは反論できない、ということでいいのかな?
つまり、Pythonのif式、<true> if <cond> else <false> の読みやすさについて
英語文法として自然である(>>802)とかといった意見はあるけど、
もしそれら意見に客観性があるのならば、
条件分岐式があるPython以外の言語 Smalltalk/Lisp/ML/Haskell の設計者達も
Pythonと同様の構文を採用したはずであるのに、実際にはそうならなかった....
この矛盾を説明できない限り、「式指向の壁」は壊せないよ
0846367
2013/08/19(月) NY:AN:NY.ANPythonのif式とHaskellのリスト内包表記に類似性を見いだせるという意見は理解できし、
リスト内包表記はHaskellとPythonに固有の優れた特徴(個性)だと思う
ただし、プログラム言語の基本要素である条件分岐構文 if <cond> then <true> else <false>
について、Haskellはそれを「式」として定義し、Pythonは「文」として定義した
Haskellにとってif-else式は欠くことのできない基本要素であるのに対して、
リスト内包表記はfilter/mapの組合せ処理を簡便にする構文糖であり、必須の構文ではない
この理屈は、Pythonにも当てはまるはずだ
Pythonにとって「if <cond>: <true> else <false>」というif文は、言語として基本要素なのだから
もし反論があるなら「論よりコード」、クイックソートをif文を使わずif式で書いてみて、
それがPythonらしい可読性のあるコードかどうかを批評するところから始めればいい
>>788
これも上段の説明と同じだ
Rubyにとって条件分岐の基本はif式であって、if修飾子ではない
実際、クイックソートのRubyコードで(>>560,665)if式は使われている(=使わないと書けない)けど、
if修飾子は使われていない(=使わずに書けている)ことは実証された
三項演算子の議論と同様に、枝葉の矛盾で幹ごと倒そうとする論法を「詭弁」と言う
0847デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANテスト
0848367
2013/08/19(月) NY:AN:NY.AN遅レスになったけど、>>665等で三項演算子を使ってみた
これは>>429の「条件分岐が入れ子になった時に最も深い分岐で使う」ケースになる
普段であれば迷わずif式を使って以下のように書くけど、>>429でそう書いたので、
三項演算子を使っても構わないレアケースとして紹介したつもりだ
三項演算子(>>665):
e < array[0] ? [xs << e, ys] : [xs, ys << e]
if式:
if e < array[0] then [xs << e, ys] else [xs, ys << e] end
0849デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANそれこそ詭弁だ。
条件分岐式として使う局面に限定した場合、
Rubyのif修飾子はPythonのif式と違い、
else節がないという致命的な欠陥がある。
致命的欠陥品が使われない(事実上使用できない)ことをもって
それが記述の順による使いにくさに起因すると因果関係すり替え、
Pythonタイプのif式が使いにくいものであるという
結論に持って行くのはフェアーじゃない。
0850デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN0851367
2013/08/19(月) NY:AN:NY.AN>>845の先頭行を訂正する
X: 結局、>>783の引用カキコに対して
O: 結局、>>738の引用カキコに対して
0852367
2013/08/19(月) NY:AN:NY.ANたしかにRubyのif修飾子にはそういった欠点がある
だからRubyにとってif修飾子はオマケであって、if式が条件分岐の基本構文という位置付けになる
オマケに欠陥があるからといって、基本を無視するのは間違っているよ、という話であり、
それを「樹を見て森を見ず」と揶揄している
それに対して、Pyhtonでは、条件分岐の基本構文は(式でがなく)if文として定義され、
しかも(オマケ?の)if式には、他言語の常識に反した構文(>>738)という矛盾を抱えている
独りよがりな常識はずれの構文なのに、それを認めることこそ(他言語に対して)アンフェアだと
考えるし、なぜPython特権を認めにゃならんの?という話だ
繰り返しになるけど、(>>845で書いたように、)>>783の矛盾は「誰も説明」できないのかな?
0853367
2013/08/19(月) NY:AN:NY.AN>>852の最終行を訂正する
X: >>783の矛盾は「誰も説明」できないのかな?
O: >>738の矛盾は「誰も説明」できないのかな?
0854デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN367の言う「式指向」という言葉は「構文の見た目が私の好みに合っている」という意味
であることを367本人としても強調したいらしいなw
0855367
2013/08/19(月) NY:AN:NY.AN>>854では、「何が矛盾なのか」分かりにくい文章だった
X: >>783の矛盾は「誰も説明」できないのかな?
O: >>845(>>738)の矛盾は「誰も説明」できないのかな?
0856デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANん。>>854はなにも矛盾していないぞ?
0857デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN矛盾なんか別にないだろう。
C系言語のif文の列びに準じようとする判断が勝ったか、
英語表現としての自然さを重んじる判断が勝ったか
の違いってだけ
0858デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANPyhtonが先駆的なだけだろ。
0859デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN0860デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN0861デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN代入(=)や、C/C++のプロトタイプや、本の目次などは処理の流れと一致してない。
0862デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN英語表現としての自然さを建前に
視認性や可読性を損なってもいいのかということ
0863デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANいくら正論で反論して論破しても>>367が屁理屈ゴリ押しで擁護するから
逆にRubyの印象を悪くしているのに
0864デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN誰一人Ruby言語自体をdisってはいないのにRubyがdisられていると思い込んでいるのがポイント
これぞRubyって感じだね
0865デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANやめなよそういう言い切りは
君が過去スレまで遡って「Ruby言語自体をdisるレスは一つもなかった」ことを証明しないといけなくなるよ
0866デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN[x*x | x <- list, x < 3]
これ、明らかに式指向()に反してると思うんだけどどう?
0867367
2013/08/19(月) NY:AN:NY.ANPythonの(不可解な)if式構文の正当性に関する根拠である
「英語表現としての自然さを重んじる判断」には客観性がある ==> 仮説
それ以外の言語では条件分岐式構文として、上記の判断よりも
「C系言語のif文の列びに準じようとする判断」が勝った ==> 事実
もし「仮説」が正しければ、それは「事実」と反する、だから「矛盾」だろ?
しかもPythonのif文の構文は「C系言語のif文の列びに準じようとする判断」で設計された
これはPyhton自身の「内部矛盾」を意味する
つまり、ある時には「英語表現としての....」を、また別の時には「C系言語の....」を言うという、
ご都合主義でPyhtonは設計されたことになるけど、それでもいいの?という話だ
そして、この矛盾を解消(説明)できなければ、仮説「英語表現としての
自然さを重んじる判断」は、独りよがりな主観にすぎない、と言えるのではなかろうか
0868デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN自分らが読みやすいと思った構文を採用してるだけだろ
たとえば、if式以外でも、 1 < x && x < 10 を 1 < x < 10 と書けるのも
Python以外で殆ど見た事ない
0869デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANご都合主義で場当たり的に追加された言語っていうのは
procオブジェクトがあるのにlambdaオブジェクトを追加した
Rubyのような言語を指すんだよ
0870デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN0871デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANif修飾子は?
0872デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN0873デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN構文ごとに判断がなされているだけなのに
なんで矛盾なんだ?
非一貫性、非対称性はRubyにだってあるだろうに。
0874デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANいや、Pythonに限らず他言語の瑕疵をあげつらって
Rubyを持ち上げたいだけなんだろ?
ほんっっとMatz以下、Ruby信者には虫ずが走るわ。
0875デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANRubyにも「式 if 条件」の構文あるけど、Rubyもご都合主義で設計されたの?
しかも367曰く殆ど使われてないみたいだけど、そんな使われない構文を足すなんて
深く考えずに設計されてるんじゃないの?
0876デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANRuby信者が絶滅すれば他の言語の使用者は互いにdisったりしないから
このスレも終了ですね
0877デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN式志向(笑)
0878デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANバトル=disり、とは限らない
0879デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN言語のdisりの問題じゃねーわ
0880デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANreturn if 条件
以外になんか有る?
0881デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN0882デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN言っとくけど、
ifは最初に持ってきても
英語表現だからな。
0883デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANPythonのif文の構文は「英語のif文の並びに準じようとする判断」で設計された
だから、「if 条件 式」と「式 if 条件」の二つの書き方ができる。
どちらも英語表現だ。
088457
2013/08/19(月) NY:AN:NY.AN英語とpythonの両方に詳しくなりました。
0885デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANいや、このスレは最後の1言語が残るまでdisりあうスレなんだけどな
0886デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN0887367
2013/08/19(月) NY:AN:NY.AN自己レスになるが、Pythonコードでクイックソートは書けないのかな?
「式指向の壁」を越えた言語、Haskell(>>597)、ML(>>626)、Ruby(>>560,665)では、
どれも同じスタイル(パターンマッチまたはif式)でクイックソートのアルゴリズムを表現できている
後出しで条件を追加するのは失礼だから、先に書いておくよ:
1) if文は一切使用せず、if式だけで書くこと <== この条件クリアが式指向であることの証明になる
2) クイックソートのアルゴリズムを表現していること -- >>599はNG
3) 標準ライブラリ(itertoolsやfunctoolsなど)はOKだが、それ以外(numpyなど)はNG -- >>633,635
4) 効率を考慮すること -- >>636,638
5) 可読性に配慮すること -- >>640,649
これら条件は、他の言語との公平性を考慮したつもりだ
論よりコード、「Pythonが式指向言語である」ことの実証を期待したい
0888デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN色々つっこまれてんだから、先にそれらに答えろよ馬鹿
0889デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANお前の好みだとPythonのif式は可読性に劣るんだったよな?
1) と 5) という同時に満たせない条件出してなに公平づらしてんだよ。
馬鹿が。
0890デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN0891デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN自分のブログにでも書いてろって話だよな
0892デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.ANPythonのdefや代入は文だからquicksortという関数を定義したければ
globals().__setitem__('quicksort', lambda xs: ....
と書かないといけない
この方法のquicksort定義にはYコンビネータが必要な気がする
あと、例外処理無理すぎる
0893デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN0894デフォルトの名無しさん
2013/08/19(月) NY:AN:NY.AN静的型言語のdeclarationはまた異なるカテゴリじゃないのかなぁ
Pythonのdefや代入のようなstatementは実行時に「副作用を目的として使用する」
もんだから関数プログラミング的ではないと言えるし
expression orientedかどうかってのは結局statementとの対比でみてるよね
http://en.wikipedia.org/wiki/Expression-oriented_programming_language
0895デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN0896デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.ANnested functionサポートしてるし、
method含めfunction(Python用語でいうとcallable)は全て第一級オブジェクトだよ
nested functionなんてALGOL68の時代からあるのに意外とサポートしてない言語あるよね
無名関数定義できるだけ、みたいなの
0897デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.ANreturn reduce(lambda xss, x: (xss, xss[0 if f(x) else 1].append(x))[0],
xs, ([],[]))
def qsort(xs):
return (lambda (ss, ls) = partition(xs[1:], lambda x: x < xs[0]):
qsort(ss) + xs[:1] + qsort(ls))() if len(xs) > 1 else xs
0898デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.ANそれはできないが、演算子の順位をいじれば、x=y+zで、「左にある=が右にある+
よりも先に行われる」ことはできるよ
+よりあとに代入が行われるのを持って、君は「代入は右から左だ」と
言ってるんじゃなかったの?
どうやらその反論をみると違う理由のようだけど、それを説明してくれないか?
俺にはなぜ君が代入が左から右だといってるのか分からなくなったわ
0899デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.ANなぜ右から左だと言ってるのか
0900デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN> +よりあとに代入が行われるのを持って、君は「代入は右から左だ」と
> 言ってるんじゃなかったの?
理解出来ないなら無理に絡んでくるなよ、馬鹿だな
時系列にそって左から右に処理が進むべきって話が>>806あたりの議論で
代入は処理を左に書けないだろうって意見が出たんだろ
だから、「+よりあとに代入が行われるとき、+は代入より左にある」のでなければ、
左から右に処理が進むことにならんだろうが
0901デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN0902デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.ANそりゃそうだが、tryだのhandleだのが一種のパターンマッチ式なML族と
ステートメントなC++やPythonとでは式志向かどうかという観点では
全然違うと言わざるを得ない
0903デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN意味不明だなあ
それはできないけど、+が後の場合は左から右にかける
もちろん、先の場合は無理だよ?
でも、それは代入の演算子の優先順位が高かった場合、同じように
「代入が+より前に行われる時に、代入を右側に書くことは出来ない」
んだけど、なんでそれは左から右と言っちゃいけないんだ?
0904デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.ANまあでも言いたいことは分かるだろw
0905デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.ANあのさ、元々「全部メソッドチェインみたいに書けるべきだな」「おっと代入は無理だったわ」って話なんだぞ?
そのへん理解してる?
あとさ、演算子優先順位は関係ないんだって何度も言ってるだろ
> 「代入が+より前に行われる時に、代入を右側に書くことは出来ない」
これは括弧使えば x + (y = z) って書ける言語はある。でも
> 「+よりあとに代入が行われるとき、+は代入より左にある」
こっちは括弧使って演算子の優先順位変えても書けないだろ?全然違うんだよ馬鹿
0906デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.ANdef qsort_logic(xs):
ss,ls = [],[]
for x in xs[1:]:
(ss if x < xs[0] else ls).append(x)
return qsort(ss) + xs[:1] + qsort(ls)
return xs if len(xs) <= 1 else qsort_logic(xs)
0907デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.ANこれってさ、正確に言えば、
=を挟んで左側のものを、右側に入れることは出来ないって意味でしょ?
通常は変な書き方をしないから、単に代入を右側に書くことはできないって
言ってるのであって、
> x + (y = z)
これって、yにzを入れてるのであって、
zにyを入れてるんじゃないでしょ?
なら、代入を右側に書いていない。
0908デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.ANせやな
0909デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN右側とか左側とかじゃなくて、「右から左へ」「左から右へ」って言い方しろよ
で、確かに代入は「右から左へ」値をコピーする処理だけど、それが何か?
0910デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN日本人としては、代入はこう書きたいな。
0911デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN>>887の要求を全て満たしてるのに、完全に手続き型のコードになっててワロタw
367の言ってる事って関数型プログラミングと関係無いんじゃね?
0912デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN優先順位関係なく、+がどうやっても左にかけないから、
右側から左側だと言いたいわけね
演算子の順位も関係ないと
でもやっぱり理屈としては間違いだね
+をどうやっても左側に書けない本当の理由は、
+が右辺値にしか作用しないから
それだけの理由だと思う
逆にいえば、左辺値にしか作用できない、Cのポインタ操作にかんする
アドレス加算演算子とかはどうやっても左にしか書けない
それを遅らせなくてはいけない場合でもね
だから、結局判例が出来てしまう
処理が左から右に流れてるとか、右から左になが流れてるとかは、やはり+が左に書けないこととは関係ない
0913デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN効率を考慮する必要がある時点で関数型は使えないからね
0914デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN0915デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.ANメソッドチェインのように「左から右」に書けない処理があるって言ってるだけなのに、
「左から右」の処理を持って来て反例が存在する?
だれも全てが「右から左」だって言ってないだろ
本当に底なしのアホだな
0916デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.ANそれだと x.foo().bar() と (bar . foo) x は両方「左から右に」処理が流れてることになるけど、そんな話だったっのか?
もうそれで良いならいいや、馬鹿の相手は疲れた
0917デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.ANつまり、「代入は右側から左だ」と言っておいて、
その本当の意味は実は「代入は左から右に処理を並べたくても、
書けない場合もあるよ」ってことだったの?
ごめん、完全に誤解してたわw
それなら文句ない
まあ、右から左に処理を並べたくてもかけない場合もあるけどw
0918デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN0919デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN定義できる言語ならメソッドチェインで代入も右に書けるぞ。w
| a b |
a := b := 0.
3 + 4 --> #a * 5 --> #b.
^{a. b} "=> #(7 35) "
0920デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.ANアドレス演算子だと思った
ていうか、アドレスとか関係なく、加算演算子を左辺値に書けたっけ?
0921デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN言われてみれば、演算子の順位だけでは語れない部分もあるねえ
関数合成の場合、あとから合成した関数が呼びだだされる場合の処理の流れも
考慮にはいるかな
この辺はざっくり処理が左から右にかけるといっても曖昧なんだなってことがわかるね
まあでも、演算子の順位も加味されて処理の流れが決まってることに間違いはないけど
0922デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.ANおーすげー
動的型言語は代入と宣言が似た構文だからなー
その調子で変数宣言も書いてくれ
0923デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN1=*a++とはそりゃかけんわ
0924デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN結局右から左って何?
0925デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN0926デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN最初に言い出したのは367なので、彼に聞いてください
>>738
> 普通の言語は「条件式 -> 式1 -> 式2」と左から右へ流れる(それが自然)
0927デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN言ってるけど、797を書いた人物はどう見ても
英語が相当できる人物だろ
それでも納得しないのか
嘘をついてるとかネイティブレベルかどうか分からないとか
そういう厳しい基準の議論なの?
0928デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN>>797
0929デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN> アドレス加算演算子とかはどうやっても左にしか書けない
>>923
> 1=*a++とはそりゃかけんわ
???
それってリテラルに代入できないだけだよね?
y = *x++ とは書けるし
0930デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.ANその場合、*演算子の意味が別物になっとる
cのポインタはこういうところが混乱の元でもあるね
0931デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.ANx+1に代入できないだけなのと一緒
0932デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.ANにしてもCにアドレス加算演算子なんてあるんだろうか
ふつうのインクリメント演算子だと思うのだが
0933デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.ANまあ、でも、アドレスも値の一種だとか、よくは知らんが、マジで厳密に
突き詰めれば同じなのかもしれん
ただ、仮にそうだとしても言わんとしてることとは関係あるまい
揚げ足取りの類
0934デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN自然には書けないとみなします。
0935デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN1 -> x
x <- 1
0936デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.ANあとキャストにも制限があったっけ?
0937デフォルトの名無しさん
2013/08/21(水) NY:AN:NY.AN0938デフォルトの名無しさん
2013/08/21(水) NY:AN:NY.AN0939デフォルトの名無しさん
2013/08/21(水) NY:AN:NY.ANhttp://orgachem.hatenablog.com/entry/2013/08/21/030244
いやーこれはひどいw
> Gets???もう、もう意味が分からないです。いったい何をGetsするんですか。
ソースコード読んでますか?
この関数はコレクションに値をset/getする関数ですよ?ってコメントに書いてますよ?
おなじみの、引数があればsetterとして、なければgetterとする関数です。
上にset valueって書いてあるじゃないですか? getsは当然get valueのことでしょう。
このコードはそもそもvalueを読み書きするもの。汎用的なものなので
具体的なvalueが何かはわからない。だからvalueって書くしかない。
valueの読み書きなのは関数のコメント見りゃわかる。なのでvalueを書くまでもない。
ただ、どの部分がsetでgetなのかはわかりにくいから書く必要がある。
> 引数が7つもある香ばしい仕上がり。Multifunctionalにした結果がこれだよ!
はい全然違います。getとsetを分離した所で、引数の数は変わりません。
むしろ重複コードが増えます。重複させない限り分離できません。
自分ならどうコードを書くか、せめて頭のなかで書いてみましょうね
> これがJSで最も有名なライブラリか……誰か助けて…
こんなくだらない点しか指摘できない。さすが有名なライブラリ。
id:devorgachem えらそうにw
0940デフォルトの名無しさん
2013/08/21(水) NY:AN:NY.AN0941デフォルトの名無しさん
2013/08/21(水) NY:AN:NY.ANなんの値を取得しているんだよ!取得する”具体的な値”は何か
ちゃんと書けってつっこみを入れる。
だけどこのコードの場合、汎用的な関数なので取得するのは
"値"としか書けない。値は具体的ではない。
Gets valueと書いた所で、なんの値を取得しているんだよ!ってつっこむ。
そもそもこのコメントが書いてある意味を勘違いしている。
これは ”何を取得しているか” ではなく "何をしているか” を説明するためのコメント
この関数は、汎用的な値を代入、取得するものである。
だから"値"を取得するということは、Getsというコメントを
見るまでもなくわかることである。
わからないのは、どの部分がsetterであり、どの部分がgetterであるかということ。
だから、複数の値のsetter、単一の値のsetter、そしてgetter。
”何を取得しているか” ではなく "何をしているか” それを示したかっただけ。
このブログの人は、Getsというコメントを見て
ソースを読まずに脊髄反射をしただけである。
典型的な初心者を抜けたつもりの初心者
0942デフォルトの名無しさん
2013/08/21(水) NY:AN:NY.ANhttps://twitter.com/orga_chem/status/314414450293751810
>>941みたいに丁寧に添削してくれる人が身近にいないと、
いつまでも誤った理解が修正されずに「俺って天才かも」という歪んだ自尊心が育っていく典型例だな
0943デフォルトの名無しさん
2013/08/21(水) NY:AN:NY.AN典型的なワナビー
0944デフォルトの名無しさん
2013/08/21(水) NY:AN:NY.AN0945デフォルトの名無しさん
2013/08/21(水) NY:AN:NY.ANさすが何のコメントも資料もなくても関数の内容を全て把握している天才は違うな、言うことが
0946デフォルトの名無しさん
2013/08/21(水) NY:AN:NY.ANえ…え?
ネチネチいじめまわしてるように見えるんだが…お前優しいな(自分自身に)
0947デフォルトの名無しさん
2013/08/21(水) NY:AN:NY.AN0948デフォルトの名無しさん
2013/08/21(水) NY:AN:NY.AN日本語苦手そうだな。ここで書き込んでることが丁寧ということではないぞ
0949デフォルトの名無しさん
2013/08/21(水) NY:AN:NY.AN臭い
0950デフォルトの名無しさん
2013/08/21(水) NY:AN:NY.AN0951デフォルトの名無しさん
2013/08/21(水) NY:AN:NY.ANjQuery使ってないとわからん
0952デフォルトの名無しさん
2013/08/21(水) NY:AN:NY.AN> で、なんでこんなの晒したん?
さっきはてなブックマークでみつけた。
「納涼!ほんとにあった怖いコード」シリーズで
面白く読もうとしてたら、俺の大好きなjQueryを
ディスってたから、速攻ありえないと思ってコード見た。
やつのブログでディスり返すつもりだったが、
匿名で書き込めなかったのでここに晒した。
jQueryはショートコーディングでかいてあるから
多少わかりにくくても、短くしているところはあるんだが、
まったく天下のjQuery様がそんなヘボするわけ無いだろ。
これがJSで最も(略)誰か助けて・・・じゃねーよクソガキが
てめーが未熟なだけだ。
>>945
> さすが何のコメントも資料もなくても関数の内容を全て把握している天才は違うな、言うことが
関数にコメントあるじゃんw その上50行程度の関数
>>946
> ネチネチいじめまわしてるように見えるんだが…お前優しいな(自分自身に)
正解! だから匿名で書き込もうと思ったけど、書けなかったから
ここでネチネチいじめたw
0953デフォルトの名無しさん
2013/08/21(水) NY:AN:NY.AN0954デフォルトの名無しさん
2013/08/21(水) NY:AN:NY.ANプログラマとして上だろう
つまり、こいつが指摘してることは、的外れか取るに足らないことだと想像できる
0955デフォルトの名無しさん
2013/08/21(水) NY:AN:NY.AN普通は突っ込まないけど、汚いことは汚い
ただ実際のコードの内容やその関数のテストコードが無いことに突っ込まないあたり初々しい
0956デフォルトの名無しさん
2013/08/21(水) NY:AN:NY.ANたった50行だ。
テストコードがないのは当たり前。
なぜならこのコードはプライベートメソッド相当だから。
この関数は内部で使う非公開関数。だからマニュアル化もされていない。
0957デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.AN指摘してるのは、想像に固くないな
やはり、実績が違いすぎる
0958デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.AN同じ作者の昔のaccessのコード見てこい低能
0959デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.AN0960デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANhttps://github.com/jquery/jquery/blob/1eb1ad616069ab103ceecf48c48514f51dd5d5ac/src/core.js
これか? 昔のコードが書きなおされたのは、
昔のコードに問題があったからなんだけど、
問題が有るコードと比べてなんの意味があるんだ?
俺はきれいに書きなおしてくれといったんだぞ?
綺麗に書き直しました。ただバグがあります。
でも綺麗だからこっちに入れ替えてくださいって
いったらぶち殺されるぞw
>>959
あなたの会社では、三項演算子は禁止ですか?
0961デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.AN0962デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.AN必要な処理が足りないコードと比較しても
意味が無い。
0963デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.AN他人のブログほじくり出してきて来るだけあるな。
0964デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANお前がコード見て汚いと言ったから
じゃあ汚いというのなら、きれいに書き直せよ
って言われただけだろ?
何逆ギレしてるんだ?
自分の発言に責任をもてってだけだろ。
できなきゃ謝罪しろ。
0965デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.AN謝罪要求とか久々に見た。
0966デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANじゃあ強制的に戻そう。
お前言ったよね?コードが汚いって。
じゃあお前これよりきれいなコードかけるの?
自分ができないことを言うなよ。恥ずかしいやつだ。
0967デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.AN他人からそれをDisり返されても泣き言言うなってことだな
自分の考えが正しいと思うなら論理的に反論すれば良いと思うよ
なんかモゴモゴ口ごもりながら必死で論点ずらそうとしてる奴らは
関係者かなんかなの?
0968デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANまったくだ。
ブログの内容を論理的に指摘した人に
早く汚いといった根拠を示せよ。
0969デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANなんでそうなるんだ?
極力変数宣言端折ってたりする技巧的で複雑なコードなんだから、
読み手からすりゃ汚くて当然だって言ってるだけなんだけど、理解できない?
0970デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.AN複雑は単に複雑なだけ。複雑な書き方が最善な場合もある。
汚いというのは、それよりも綺麗なコードがあるということ
だが、綺麗なコードは示せていない(笑)
0971デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANはいはい一番汚ないところだけな。
http://ideone.com/xQChL3
0972デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANあと走らないコードの run code
0973デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.AN本当かどうかは知らないが、jQueryがこれでJavaScriptを圧縮してるらしい。
【jQueryコード】76バイト
return chainable?elems:bulk?fn.call(elems):length?fn(elems[0],key):emptyGet;
【お前のコード】129バイト
if(chainable){return elems}else if(bulk){return fn.call(elems)}else if(elem.length){return fn(elems[0],key)}else{return emptyGet}
ここまで考えてなかっただろ?
これは設計方針であって、綺麗汚いとは別の話。
0974デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANreturnしてるんだから、elseいらんだろ。
こういうのを汚いという。
0975デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANま、わかってたけどね。
0976デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.AN汚いものを綺麗に直せという話なのに、
バイト数増やして劣化させてるじゃねーか。
0977デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.AN0978デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.AN何使っったんだよ。
0979デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANワロタw
書き忘れた。
ついでだからググれwww
しかし、無駄なelseがある汚いコード出されても困るなぁw
0980デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANjQueryが使ってる奴を使うとその手のif文消えるはずなんだけどなあ
一体何を使ったのか後学のために教えてくださいよ
ねえ
0981367
2013/08/22(木) NY:AN:NY.AN遅くなったがレスありがとう、>>887に挙げた条件をすべてクリアしていると思う
異論はある(>>896)けれど、これをもって「Pythonは式指向の壁を越えている」と判断したい
同様に、(if文を使わず)三項演算子を使った>>613から、「JavaScriptは...(以下略)」としたい
これらについては、>>707の次回更新時に反映させることを約束します
>>906
もともと関数型プログラミングという文脈下でのコード合戦なので、
(for文を使う>>906よりも)関数reduceを使った>>897のほうが望ましいと思われ
0982デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANhttp://ideone.com/Zqswpw
で、jQueryで使われてるプログラムってなんなんですか?
0983デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.AN三項演算子がバグってるのは
0984デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.AN変な知ったかしなけりゃよかったねw
0985デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANマジで頭大丈夫か?
プライベート関数にAPI並みのドキュメントを期待する方がどうかしてる
0986デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANお前の頭が大丈夫か?
0987デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.AN0988デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.AN具体的にどこの処理の意味が分からなかったのか行数で「ここからわからなかった」と明示してくれ
0989デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.AN0990デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.AN具体的にどこの処理の意味が難しかったのか行数で「ここからわからなかった」と明示してくれ
本当に難しいコードだったのなら簡単に指摘できるだろ?
さぁ。どこが難しかったのか教えてくれよ
0991デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANbulkの意味答えてみ
あ、あとついでにjQueryで使われてるコード圧縮プログラムもお願いしますね
0992デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANjQueryに精通してると主張してる奴がMinifiedコードを見間違えるわけ無いからね
見たこと無いなんてもっとあり得ないし
詭弁のためにわざと低圧縮にしましたと認めるなら許す
0993デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.AN/ _ ヽ //´ __,,>、
/  ̄ ̄ { /::/ / ̄:::::::::::::::\
l _ィニニア二二二ニヽ、j._ /::::l/::::::::::::::::::::::::::::::::l
| 0Lj/-‐-レノ ノ_ヽ:::`ヽ l:::::::::::/l/lノノ/_イ:::::l
レ:r、/ イ゚テ ピト`|::| l:::::::::/ rtテ、 .ィtq l::::::|
l:lヘ '" ,j '"/ノ |::lヘ!j ´ ,j !;:::/
ヽヽ、 r‐-, /' レリー 、 ,...., lノ/
lヽ、  ̄ / `ヽ、lヽ 、  ̄ /´
_,r┴‐-`v´-‐j-、__ , -‐-、_r┴─'ー‐チト バルク!!
/ ̄/:.:.:.:| ̄ ̄`T ̄´|:.:.:.:l´ `ヽ / ヽ ̄`ー-‐'´`''''⌒ヽ
/ ,':.:.:.:.:.l l l:.:.:.l \ _r‐、-、-、r, 、 ',
|:.:.:.:.:.:.! ! !:.:.l ,. -‐ゝ/// 〉 〉 〉 〉 〉 ! ',
l:.:.:.:.:.:.l | l:.:.:l / 人〈〈〈〈 ' ' ' /っ l l
l:.:.:.:.:.:.! ! l:.:.:.ト/ / ```´-ァ‐'''" / l
、__/:.:.:.:.:.:l | |:.:.:ヽヘ l // / _ ィノ
/:.:.:.:.:.:.:! l |:.:.:.:.:l `ーヽ、_ノ´l、______/lニ二」
____l:.:.:.:.:.:.:.| l |:.:.:.:.:! |_ ( ( ) )_〕| l
l`ー‐‐'匸二l ̄ ̄l二フーイ /  ̄ `‐‐'´ ヽ |
0994デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANhttp://ideone.com/xQChL3
そもそもこれがバグっていただけ。
0995デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANコードに書いてあるコメント
Bulk operations run against the entire set
↓Google翻訳
一括操作は、セット全体に対して実行
bulkの意味ですか? 一括操作の一括なのでは?
0996デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANバルクってバラ積みだろ
0997デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANその変数が格納しているものと名前の関係を教えてくださいな
特に別の型の変数を代入して使いまわしている事について
俺はそういう事するのは汚いコードだと思うんだけど
いくら言っても汚くない綺麗だって言うからさ
0998デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANin bulk
(1)ばら荷で,包装しないで.
(2)大口で,大量に:
0999デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANhttp://ideone.com/Zqswpw
で、jQueryで使われてる圧縮プログラムってなんなんですか?
早く答えてくださいよw知ったかぶりなんですかあー?
1000デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANええわかってましたけどw
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。