1 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 13:12:25 ] 禁止事項【臨時】 ・前スレの911自身の書き込み、またそれに関連した書き込みを禁止致します。 (スレが荒れる原因となります) プログラミング言語処理系の開発に興味のある人達のスレッドです。 字句解析・構文解析から,データフロー解析,ループ並列化,データ分散,SSA変換, CPS変換,レジスタ割付,命令スケジューリング,ソフトウェアパイプライン, SIMD命令生成,VLIW向けクラスタリング,スクラッチメモリ向け最適化,リンク時最適化, JIT,動的バイナリ変換等の各種最適化,それにVM,GC,低消費電力化などなど。 意味論に関する話題も歓迎です。 過去スレ 1 pc.2ch.net/tech/kako/981/981672957.html 2 pc2.2ch.net/test/read.cgi/tech/1021136715/ 3 pc5.2ch.net/test/read.cgi/tech/1070089173/ 4 pc5.2ch.net/test/read.cgi/tech/1100097050/ 5 pc8.2ch.net/test/read.cgi/tech/1106129164/ 6 pc8.2ch.net/test/read.cgi/tech/1115335709/ 7 pc8.2ch.net/test/read.cgi/tech/1129287390/ 8 pc8.2ch.net/test/read.cgi/tech/1131273918/ 9 pc8.2ch.net/test/read.cgi/tech/1135082582/ 10 pc8.2ch.net/test/read.cgi/tech/1146844753/ 11 pc11.2ch.net/test/read.cgi/tech/1160879890/ 12 pc11.2ch.net/test/read.cgi/tech/1188688416/ 前スレ 13 pc12.2ch.net/test/read.cgi/tech/1233143342/ 関連リンクは多分 >>2-10 あたり
237 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 07:51:05 ] >>235 XMLベースなら改行に意味を与えない方がよいよ、とマジレス。
238 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 09:17:19 ] YAMLっぽいのはどう? A: - {add(a,b): a+b} - {sub(c,d): c-d} B: ...
239 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 11:03:57 ] LISPでいいだろ アホか
240 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 18:49:07 ] >>239 ヒント:クラス系オブジェクト指向言語
241 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 19:38:34 ] >>240 CLOS
242 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 19:54:49 ] endだけで構文解析すりゃいいだろ? インデントでなんて馬鹿げてる。
243 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 23:35:14 ] nadesi.com/man/page/%E3%82%B3%E3%83%B3%E3%83%9C forth 系のアプローチ…だと…
244 名前:227 mailto:sage [2010/01/20(水) 00:14:50 ] >>234 意味さえ分れば、プログラムは作りやすいですよね。 >>235 XMLありえなす。 edef はどうかと思いましたが、endefはアリかもw >>238 XMLのと合わせて思ったんですが、 Squeak(smalltalk)の開発環境みたいなUIで表示するのは有ですかね? まあ、自分のテキストエディタが使えないといけない、 と思う人は特定数いそうですけど。 >>241 不勉強なんですが、 CLOSはプロトタイプベースに近いのではないかと思ったんですが、 どうでしょう? マルチメソッドだけでがんがれ、という意味であれば、 それはそれでネストしないはずなので、答としてアリな気はしますね。 >>243 構文解析という意味だと、>>235 さんのedefアプローチに近いですね。 わかりやすい予約語を作れればいけそうですね。
245 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 00:29:45 ] >>244 CLOSはクラスベースだよ。defclassで定義する カプセル化はしないだけ
246 名前:227 mailto:sage [2010/01/20(水) 00:29:52 ] 連投すみません。 メソッド呼び出しの構文について質問です。 Rubyでは、 my_object.my_method arg1, arg2 のようにメソッド呼び出しの括弧を省略する事ができます。 これはとても便利だと思うので、自作の言語にもこの文法を取り込みたいです。 一方で、JavaScriptのように関数をファーストクラスオブジェクトとして 扱いたいという要求もあります。 window.set_on_exit(object.my_event_handler) などとして、イベントハンドラを追加できるような文法を考えています。 Rubyでは、 a = my_object.my_method とした時に、my_methodが呼び出され、実行結果が変数aに代入されます。 しかし、自作の言語の現在の仕様では、メソッド自体が変数aに代入されます。 この差をどう埋めるべきかで悩んでいます。 案としては、 - 特定のメソッドの時には引数は評価されないようにする。 - a = &(object.method) か a = object.&method のように&を必要とする。 などがありますがどれも綺麗ではないです。 個人的に一番良いかなと思っている仕様は、 a = object.method <= methodが返る a = object.method arg <= methodが実行される a = object.method() <= methodが実行される という、引数があれば関数呼び出しで、引数が無い場合は括弧の省略は不可という仕様です。 これは分かりにくいでしょうか? ご意見頂ければ幸いです。
247 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 00:43:05 ] 場当たりな文法は破綻しやすいからなあ。 引数を二つ取る関数に引数を一つ渡したらどうなるの? Curryingとかを調べてみると良いかも。
248 名前:227 mailto:sage [2010/01/21(木) 01:24:49 ] >>247 場当たりに見えるという事はまだ作り込みが甘いんですね。 >引数を二つ取る関数に引数を一つ渡したらどうなるの? Rubyでは、呼び出し時にエラーになりますし、 JavaScriptでは、Undefindを渡したのと同じ動作をすると思います。 このどちらかが分りやすいかなと考えています。 >Curryingとかを調べてみると良いかも。 説明が足りなかったですね。 2引数の関数を呼び出す場合には、 hoge(a, b) か hoge a, b と書くようになる事を考えています。 カリー化については、構文によるサポートはいらないのではないかと 思っています。 単にカリー化を使いこなせてないだけかもしれませんが、 あまり常用する物とは思えませんし、Haskellのような構文で部分適用を サポートすると、静的に型を解析しない言語では、 意図せずカリー化を行ってしまい、混乱するのではないかと思います。 逆にカリー化を行いたい場合には、 Rubyのようにメソッドが基本的にオブジェクトではない言語では、 currying_function = currying(method(:hoge), arg1) curring_function(arg2) のようにメソッドをオブジェクト化する必要がありますが、 メソッドや関数が初期からオブジェクトであれば、 currying_function = currying(hoge, arg1) curring_function(arg2) のように黒魔術(リフレクション)を使わずに簡潔に書けると思います。
249 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 04:10:49 ] merd.sourceforge.net/pixel/language-study/syntax-across-languages/bjcrntRfl.html homepage.mac.com/mkino2/oop/messaging.html メソッドがだとすると、その obj の生成、複製、破棄とか 気になるといえば気になるのにゃあ・・・
250 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 15:27:35 ] 引数をあらわす括弧と、演算子の優先度をあらわす括弧が ネストした時に、どれがどれかわからなくないですか?
251 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 15:33:19 ] わからなくない
252 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 23:36:25 ] >>250 形式言語とパーザの勉強して、 「曖昧な文法」ってどんなのがあるか理解しよう。
253 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 00:13:45 ] perlfunc List operators take more than one argument, while unary operators can never take more than one argument. Thus, a comma terminates the argument of a unary operator, but merely separates the arguments of a list operator.
254 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 00:18:23 ] 明快入門コンパイラ・インタプリタ開発 C処理系を作りながら学ぶ 神本だった。ここでうだうだ糞文法の質問している奴 読めや
255 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 00:19:20 ] 本を紹介するんならICBMくらい書けや
256 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 00:21:06 ] >>255 あー?お前誰に命令してるんじゃ?
257 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 00:22:43 ] >>255 あー? テポドン2号落とすぞコラ
258 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 00:24:52 ] テポドン2号だと? おまえ、それかっぱえびせんじゃねえか
259 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 02:22:16 ] ワロヒコ乙
260 名前:227 mailto:sage [2010/01/22(金) 03:00:20 ] >>249 C#などのように扱い始める時にオブジェクトの生成を行う方法と、 JavaScriptのようにメソッドの定義時に行う方法があると思っていますが、 後者の方が心理モデルを構築しやすく、理解しやすいと思っています。 オブジェクトにはフィールドとメソッドがペタペタくっついてる、と 説明すると、初学者にも理解してもらいやすいのではないでしょうか? >>250-253 たしかに分かり難い所があるかもしれません。 この点に関しては、>>253 であげられた所ドユメントでも、 > the simple (but occasionally surprising) rule is this: と書かれています。 Perlは各関数が取る引数の数によってどうパースされるかが変わります。 Rubyでは、"p (1) - 2"というコードで 1.6 と 1.8 で結果が違います。 また、Ruby 1.8 では、引数の数でも変わります。 これらをふまえると、単純に関数名の後ろのスペースの有無で評価結果を 変えるのが良いのではないかと思っています。 私は過去にCなどの言語で関数名の後ろにスペースを入れるべきという主張を 見た事がありませんし、while, for 等の構文と関数呼び出しを スペースの有無で見わけるという、コーディング規約も一般的だと思います。 そのため、自由度は減りますが、見た目的には良いのではないでしょうか? >>254 どのような点が良いのでしょうか? Cのような低いレイヤの処理系を実装するとなるとinline化の判断や 可変長配列サポートの仕方とかが気になりますが、 その辺はまっとうな方法を紹介してますか? 土日に本屋に行って探してみます。 >>255 じゃあ、ABMで。
261 名前:デフォルトの名無しさん [2010/01/22(金) 05:11:45 ] >Rubyでは、"p (1) - 2"というコードで 1.6 と 1.8 で結果が違います。 >また、Ruby 1.8 では、引数の数でも変わります。 Ruby作ってる奴ってアホだろ
262 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 07:37:29 ] > while, for 等の構文と関数呼び出しを > スペースの有無で見わけるという、コーディング規約も一般的だと思います。 ナンセンス。 エディタと文法と実行モデルを区別しようぜ。
263 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 08:52:13 ] >>261 a +b と a + b で意味が違うとかな。 アホ扱いされる一面ではある。 >>260 そういう、レキシカルアナライザの挙動が、パーサに左右される状態に依って変わる、 なんていう言語はパーサとレキシカルアナライザを作るのが大仕事になる。 なに考えてるのかわからんが素直に正規表現でトークンを切り出して、LL(1)かLALR(1)で 処理できる文法にしたほうがよい。まずは。
264 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 10:13:13 ] >>260 > Cのような低いレイヤの処理系を実装するとなるとinline化の判断や > 可変長配列サポートの仕方とかが気になりますが、 > その辺はまっとうな方法を紹介してますか? お前、自分のレベルにあった本をまず読めよ。 なんで上から目線なんだw
265 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 11:26:13 ] ワロヒコの本を紹介するような椰子には、上から目線で当然だろwwwww
266 名前:227 mailto:sage [2010/01/23(土) 00:12:26 ] >>261 , >>263 知らなかった。確かに違う。> a +b と a + b で意味が違う この辺、複雑なルールなのに穴に落ちる事が少なく 普通の使用者は気がつかないようになってるのが、凄いですね。 本当にRubyの作者はアホですね。 このRubyのやつとか、Perlの関数名によってパース結果が変わるのとか、 真似するのはやめるべきですね。シンプルよりも使いやすさを求めるのではなく、 許容できない使いにくさが無い範囲でシンプルな文法を目指したいですね。 >>246 で書いた文法の場合、正確に文法を書くとすると、 関数呼び出し ← id ( '('? (式 ',')+ ')'? / '()' ) 参照 ← id にしようと考えています。( ?は省略可能, /はor, +は一回以上の繰り返し) 要は、idの後ろからその式の終端までに他の式があれば 関数呼び出しとして扱うつもりです。 LL(1)だと、 a(1) と a = 1 が両方パースできません。 PEG文法の範囲の文法が使いやすくて良いと思います。パーサの実装も楽です。 LLだと無限大相当ですが。
267 名前:227 mailto:sage [2010/01/23(土) 00:13:47 ] >>262 区別できてる気はしませんが、話したいのは文法についてです。 while (true); myfunc(true); のように書き分けるコーディング規約は一般的だと思いますが、違いますか? 検索して3番目に出てきたPearライブラリの規約では、 pear.php.net/manual/ja/standards.control.php > 制御構造では、関数コールと区別するために、 制御キーワードと開きカッコの間に空白を 1 つ置きます。 と書かれていました。皆これを当然と思っているのなら、 関数名の後ろにスペースを入れた場合、エラーになるまたは違う解釈をする、 というのは落とし穴にならないのではないでしょうか? >>264 設計、実装にあたり参考になる本を紹介してもらう事もあるかもしれませんが、 それは、それでよろしくおねがいします。 ちなみにどんなレベルが私に合ってると思いますか? >>265 私が言うのも何ですが、何でこのスレではそこまで煽られてるんですか?
268 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 01:51:17 ] >>266 の文法はPEGとしても>>246 の例と一致していないよ。たとえば 「func a, b,」や「func (a,」が関数呼び出しにマッチしている。 書きたかったのは下のような奴じゃないかと思うんだけど。 関数呼び出し := id ( '()' / 式 ( ',' 式 )* / '(' 式 ( ',' 式 )* ')' ) で、この文法ってRubyと大差ない複雑さだよ。 「f f, f a, b, c」とか、式の中に裸の「,」が出てきたら困るよね。
269 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 02:34:05 ] 横レス失礼 >>266 ,267 言っている事が矛盾している気がするヨ。 >>266 では、a +b と a + b で意味が違う事を問題としているが、 これはRubyが構文によってセパレータ(字句区切り子)の解釈が異なる事に起因する。 しかし「二項演算子の前後には空白を入れる」という一般的なコーディング規則に 従っていれば実用上の問題は生じない。 対して、>>267 ではwhile文と関数呼び出しという二つの構文で、セパレータの 解釈が異なることを問題としていない。それを一般的なコーディング規則であるから、 問題は生じない(落とし穴にならない)と主張している。 Rubyの構文が汚いのは分かるから、>>263 が助言しているように、 まずはセパレータでトークンを区切って素直にパーズできる文法で設計することを勧める。
270 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 02:48:19 ] >>268 ここはこれでも全然煽られてないんだよ。 能力を持った人しか来れないし。 逆にエロゲの人でも能力を持っていればそれほど煽られない(煽られないことはないが)。 君みたいにダメプログラマで上から目線なら、今までだったらもっと煽られて相手にされてないよ。 トークンの切り出し程度で悩んでるなんて、ここに来る資格はない(断言
271 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 03:16:08 ] 偉そうなこと言っといて安価ミスってると恥ずかしいよね
272 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 03:47:25 ] ああ(笑
273 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 09:48:12 ] >>267 >while (true); >myfunc(true); >のように書き分けるコーディング規約は一般的だと思いますが、違いますか? 少なくとも、コーディング規約としては一般的ではない。
274 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 10:15:29 ] ワロヒコって言った奴ちょっと出てこい
275 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 10:33:34 ] >>273 CのK&RやJavaは、そうやって書き分けるだろ。それが一般的。 GNUが特殊だと思う。
276 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 10:34:47 ] >>273 そうか?いたって一般的だと思うが 少なくともここにある規約は全部そうなってる ttp://www.objectclub.jp/community/codingstandard/
277 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 12:07:05 ] >>246 俺はそれでいいと思う。PythonとRubyの折衷案みたいだね。 r = obj.method1 s = r a, b obj.method2 c, s, d こんな3行があったとき、sを使わずにrの結果を直接method2に渡すと r = obj.method1 obj.method2 c, r a, b, d となる。 これをパースするのが難しそうな気がする。
278 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 13:44:15 ] >>275 気にしてなかったけど、意外と多いね。 www.google.com/codesearch?q=while++lang:c 空白の有無で意味が変わるのは個人的には気持ち悪いけど、 俺が使う訳じゃないしな。
279 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 14:13:45 ] https://developer.mozilla.org/en/Mozilla_Coding_Style_Guide#Control_Structures google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Conditionals lxr.linux.no/linux+v2.6.32/Documentation/CodingStyle#L181 cvsweb.netbsd.org/bsdweb.cgi/src/share/misc/style?rev=HEAD > Space after keywords (while, for, return, switch). httpd.apache.org/dev/styleguide.html > There is a space between the keyword and the opening bracket. Mozilla, Google, Linux, NetBSD, Apache はキーワードの後ろは 空白を空けるスタイルだった。コーディングスタイルと構文規則 では要求される厳密性が違うけどね。インデントの強制くらいなら 受け入れられ易いとは思うけど。
280 名前:227 mailto:sage [2010/01/23(土) 15:47:09 ] >>268 , >>277 その点は見逃していました。 たしかに(人間にとって)パースするのが難しいですね。 試しにRubyで試してみた所、 def a(*x)print"a";p x end;def b(*x)print "b";p x end;a 1,b 2,3 syntax error, unexpected tINTEGER, expecting kDO or '{' or '(' との事です。引数列の中では、関数呼出の括弧は省略不可なのでしょうか? PEG文法は貪欲なアルゴリズムなので a 1,b 2,3 は a(1,b(2,3)) になります。 これは罠になる事が多いでしょうか? このようなコードはとても読みにくいとは思いますが、 そもそも書く方も混乱するので書かれにくく、 プログラムを書く時の罠にはならないかと思います。 >>273 , >>275 , >>276 GNUのコーディング規約はスペース開けるんですね。知りませんでした。 論点としては、 while の後ろにスペースを開けるのが一般的かどうかではなく、 関数名の後ろにスペースを開けない事が一般的かどうかですね。 これも、func (1)+2 という罠コードを書かないという風にすればいいんですが。 どちらも、RubyのようにWarningを出す等の処理をすれば良いですかね?
281 名前:227 mailto:sage [2010/01/23(土) 15:48:12 ] 脇道 >>268 すみません、適当を書きました。 手元のでは a(0)[1](2) みたいなののサポートも入ってたのですが、 今回は省略です。 >>269 矛盾というか、同じ論法で正反対の結論になってると言いたいわけですね。 それは前提となるコーディング規約が重要なのではないでしょうか? 私は二項演算子の前後に空白を入れるのはそんなに一般的でないと思っています。 皆さんはどうですか? >>269 ,>>270 今論じてる、fun(foo,bar)とfun foo,bar の間の話に、 トークナイズ(字句解析)は関係ないと思ってるんですが、私の言葉の使い方は間違ってますか? "fun(foo,bar);" => ['fun','(','foo',',','bar',')',';'] という処理の事を字句解析と言うと認識してるんですが。
282 名前:デフォルトの名無しさん [2010/01/23(土) 19:05:04 ] 二項演算子の間に空白を入れる人は多いよ。 fun(foo,bar)とfun foo,barを同居させた奴が前スレにいたよ。 エロゲプログラマだったけど。
283 名前:デフォルトの名無しさん [2010/01/23(土) 19:06:39 ] 関数宣言の時にカッコの後ろに空白をいれるのは検索性を良くするためで、 来れも結構いるよ。
284 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 19:14:54 ] そもそも>>246 の >引数があれば関数呼び出しで、引数が無い場合は >括弧の省略は不可という仕様です これがおかしい そんな半端に括弧を省略して何になる a = call object.method だろ 文法より意味論をまず確定しろ
285 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 19:15:22 ] >>276 >少なくともここにある規約は全部そうなってる >ttp://www.objectclub.jp/community/codingstandard/ それ、みんな 「Java コーディング標準(オブジェクト倶楽部バージョンを〜用に変換したもの・・・」 だから、全部同じスタイルになっててあたりまえだろw >>279 Open source系は、キーワードの後ろにスペース入れる事が明記されてるのが多いね。 pearもそうだ。
286 名前:デフォルトの名無しさん [2010/01/23(土) 19:36:35 ] もうちょっと勉強してから質問しないと、低レベルすぎて話にならないよ。 9??の馬鹿の方がまだ良かったかな。 しかし、こんな素人にみんないつのまに優しくなったんだ?
287 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 19:40:29 ] レベルより態度。
288 名前:デフォルトの名無しさん [2010/01/23(土) 19:40:31 ] 高卒でも kenjikakera.asablo.jp/blog/2009/11/04/4676336#c の様に構文を自由に変えられるコンパイラを作ってるんだから、 麻布と京大の名が泣くぞ。ちんこ。
289 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 19:47:40 ] 9??の態度は最悪だったなw その後にマルチスレッドのコンパイラが出たのは、人格と能力はべつもんと知ったな。
290 名前:デフォルトの名無しさん [2010/01/23(土) 19:50:17 ] >>283 自己レス カッコの後ろ->カッコの前。恥ずかしい…orz
291 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 19:57:45 ] >>288 これが18年前に作られたそうだ。OO的にはダメダメだけどエロゲ程度で作るのなら関数型が分かり易くて良いだろう。
292 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 20:00:47 ] しかもコンパイルスピードは高速らしい。 makeを内蔵してマスター時のスピードを少しでも上げるんだとさ
293 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 20:03:16 ] まあ、物を見てないんでホントかどうかは怪しいが。
294 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 20:03:45 ] 計算機はプログラマの人格には無頓着だからな。 ネットでは人格が変わる人もいるから、そっちかもしれんが。
295 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 20:06:09 ] Horizontal Layoutってどう思う? 1 + 2*3 と書くと2*3を先に計算して 1+2 * 3 と書くと1+2を先に計算するって奴。
296 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 20:08:31 ] きもい。Cの優先順位が身に染みてるけど、メンテのためにカッコをいれる。 それに比べて>>295 は俺にはなじまん。
297 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 20:08:45 ] 1 + 2 * 3 は?
298 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 20:13:51 ] スペース同じなら * 優先
299 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 20:14:39 ] 同じなら左優先
300 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 20:20:31 ] GAME言語は左優先だったな APLもだっけ? 1 2 3 ADD MULがいいか MUL(1, ADD(2, 3))がいいか (MUL 1 (ADD 2 3))がいいか ((1 2 ADD) 3 MUL) Lisp+Forthも面白いか。 でも世の中にはカンマと小数点が逆の国があるらしくて そういう国の人はどう思うのだろうというのも時々
301 名前:295 mailto:sage [2010/01/23(土) 20:20:33 ] 聞いておいてなんだけど自分もキモいと思う。 採用している言語もほとんどないしね。 >>297 1+2*3 1 + 2 * 3 のように均等に分けた場合は演算子の優先順位で決まるらしい。
302 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 20:25:06 ] 1/((2+3)*4) とかどうするの? 1 / 2+3 * 4 とか書くの? 空白多すぎて読み辛いよ・・
303 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 20:28:39 ] Smalltalkも左優先。 >>302 空白の数で優先度が決まるのかw。 いっそ、空白やTABの数で演算子の種類が略
304 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 20:31:14 ] Smalltalk はメッセージ式のルールが上位にあるからシンプルで分かり易い。
305 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 20:32:34 ] >>300 >にはカンマと小数点が逆の国 フランス、スペイン、イタリア、ドイツあたりがそうらしい。 '.'の代わりにスペースを使う場合もあるとか。
306 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 21:01:14 ] >Smalltalk はメッセージ式のルールが上位にあるからシンプルで分かり易い。 今でも慣れない、四則演算は小学校で習うから体に染みついてる 数値演算でバグだすとマジ悩む>>Smalltalk
307 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 21:13:02 ] Scalaの、通常の四則演算を多記号に拡張したような規則は 面白いなあと思ってたんだが、アレは元ネタがあるんだろうか
308 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 22:10:18 ] だいたい、文字列みたいな一次元で表現しようとするから困るんだよ。 二次元に数式置いて、近い順に演算するってのはどう? 三次元に拡張して、上の段が掛け算、下の段が割り算でもいいよ。 この球の中の総和、みたいな。
309 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 00:07:00 ] 「左結合」「右結合」という術語があるんだから使いましょうや。
310 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 02:47:29 ] >>303 whitespace
311 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 23:43:34 ] >>307 www.scala-lang.org/node/118 これのこと?
312 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 08:32:47 ] >>308 trifungeやると
313 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 13:54:25 ] >>291 おまいは関数型言語をわかっていてそれを関数型と言ってるのか? どっかのおかしな事典の「C言語は関数型言語」というトンデモを信じてないか?
314 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 14:03:04 ] 手続き型と勘違いしてるのでは
315 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 07:37:00 ] 291の発言は?だが、「関数型言語」の定義を聞かれると 答えるのは難しい。
316 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 07:47:49 ] 実は「関数型言語」という語の意味が二種類あるという落ちか。 古い定義だと「subroutine以外にfunctionを使える言語」なんでCを含むんだよね。
317 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 09:05:34 ] 細かい違いな気がするけど 何かを返す返さないで記述が違うのは 便利な気がする・・・basic void 使え・・・c ソース嫁・・・動的型付
318 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 09:09:08 ] > 古い定義だと「subroutine以外にfunctionを使える言語」なんでCを含むんだよね。 [要出典] Cはsubroutineをfunctionと「呼んでいる」言語であって。
319 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 09:53:07 ] 値を返すサブルーチンを関数と呼ぶのはCに限らずFortranとかPascalとかあるが、 それらが「関数型言語」と呼ばれていたのは聞いたことがない
320 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 10:11:12 ] LISPも正格評価で逐次処理、関数は置き換えではなく呼び出しだから、 関数型ではなく実質的に手続き型言語と言えなくもない
321 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 10:22:57 ] 古い論文だとFortranをfunctional languageと呼ぶことがあるんだけど懼ヲ まあ、聞いたことないのが当たり前だと思う。 自分も最初に聞いたとき訳が分からなかったし。 あと、その訳語として「関数型言語」が主流だったどうかは知らない。 ごめん。
322 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 10:32:12 ] >>321 具体的にその論文名を。
323 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 10:52:26 ] threaded interpretive language とか書名聞いて 何ぞと思って調べてみたら forth と z80 の解説書だった 俺もどこで見たか忘れたけど、Cを関数言語と呼んでた 記憶が・・・まぁ文脈というか時代背景によるよね > 用語の定義
324 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 10:58:59 ] 技評の「新ANSI C言語辞典」を持ってる人がいたら、それの 「関数型言語」の項を見てもらいたいのだが...
325 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 11:08:31 ] >>322 論文は手元にないんで無理。 Webならwww.liv.ac.uk/HPC/HTMLF90Course/HTMLF90CourseNotesnode52.html が近いかな。 むしろちょっと疑問なんだけど、 "functional language"に同綴り異義語があった というのってそんなに興味深いのか。
326 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 11:19:10 ] >>324 通りすがりの漏れが引用しますよ p.294 関数型言語 の項より 「関数型言語(functional language) 関数型のプログラミング言語。 LISP、LOGO、APL、BCPL、B、Cなどがある」
327 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 11:22:51 ] そのころの基準で関数型じゃない言語って何だ? FORTRAN、COBOLは違うのか? BASIC? 関数を言語仕様に入れただけで、分類が型が変わるのか? アセンブラ?
328 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 11:58:43 ] どうでもいいからブログでやってろ
329 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 12:27:44 ] >>326 たぶんそれが日本でデマが流行ってる元凶。 時代によって変わったりなどしない。B も C も関数型じゃない。 >>325 も HPC の専門家らしいので、言語屋じゃない。 言語屋が C を functional などと言った例はないはず。
330 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 12:52:56 ] 素直にこの辺りを参照した方が良いと思う。 ttp://ja.wikipedia.org/wiki/%E9%96%A2%E6%95%B0_%28%E6%95%B0%E5%AD%A6%29 俺解釈だと「処理が関数の変数と値に依存する言語」「独立して書かれている処理は独立している」だな。
331 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 13:02:29 ] 「Cを関数型と呼ぶ人が一部にいたのかどうか」 「その事実は万人が知っていてしかるべきか」という話になってしまっているが なんにせよCもFortranも関数型言語ではないし LISPにしても、延々とこんな話を続ける理由になるほど手続き型言語っぽくはない
332 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 13:03:14 ] >>330 バカ
333 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 15:53:39 ] LISPとCに根本的な違いが無いのに 「LISPは関数言語」というデマがいつからか 流行ったのが酷いと思うけど。
334 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 16:11:15 ] > 根本的な違い 根本的というのが曖昧すぎて、何とも言えないな。つまりどういう要素が根本的なのか。
335 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 16:24:30 ] LISPとCでどこが違うのか言ってみてよ。
336 名前:227 mailto:sage [2010/01/30(土) 17:59:10 ] Haskellも副作用(モナド)あるから関数型じゃないよね、とか燃料投下してみる。
337 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 18:22:26 ] OCamlはもっと微妙。