新次元新発想!新しい文法を作るスレ
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001ネタでもいいよ・・・
NGNGただ、はじめから備わってるものでは、面白くないので新しい文法を提案してください。
あの処理がこんな風に書けたら楽だ、みたいなことです。
ちなみに私は先入観の塊と化しているので何も思い浮かびません。
頭の体操みたいな効能もあるかもしれません。
0002デフォルトの名無しさん
NGNG{
文
}
コードを他の実行可能ファイルに埋め込む。
って言うか何でム板に笑点スレが・・・?
0003ヌルポ〜ず
NGNG0004デフォルトの名無しさん
NGNG0005マヂレス
NGNGInteger I = 0;
Repeat(30){
ConsolePrint("test%I", i);
I++;
}
こんな言語きぼーん。
0006デフォルトの名無しさん
NGNG#define Integer INT
#define Repeat( for(int _j = 0;_j <
#define ){ ;_j++){
0007デフォルトの名無しさん
NGNGswitch case文は使用禁止
ifならifで統一しコードの可読性を下げるな。
0008デフォルトの名無しさん
NGNGどんな会社に行ってんだ・・・こいつは。
0009デフォルトの名無しさん
NGNG0010デフォルトの名無しさん
NGNG0011デフォルトの名無しさん
NGNGウンコ画像が全画面で一瞬だけ表示される
0012デフォルトの名無しさん
NGNGそれはそれで利点は、有るのでは?
まあ、どっちかに統一しても
そんなに意味のあることでは無いのだろうけ・・・
0013デフォルトの名無しさん
NGNGexec();
0014デフォルトの名無しさん
NGNGオブジェクト指向スクリプトを作ってるのですが
x.<(y).if({
//trueの時の処理
},{
//falseの時の処理
})
if文も演算子もすべてメソッド起動の形にしたいのですが
こういうのはありですか? 意見をききたいのですよ
0015デフォルトの名無しさん
NGNGjudgeクラスとかを導入した方が良い予感。
judge.if(BOOL,処理,処理);
とかの方がまだ好感が持てるかなと。個人的には。
0016デフォルトの名無しさん
NGNG>>8を読んでビックらこいたよ。これって一般的な規約だったりするの?
0017デフォルトの名無しさん
NGNGうーん、それだとjudgeクラスには何の意味も無いような…
ifはBooleanオブジェクトのメソッドにしようとおもっていたんですが
0018デフォルトの名無しさん
NGNG//trueの時の処理
},{
//falseの時の処理
})
としてくれるならまだ納得できた。whileとかはどうするの?
0019デフォルトの名無しさん
NGNGなるほど、実は2項演算子というかメソッド起動は
(object message parameters)とする案も自分の中であるんです。
つまり ((((x * x) + (y * y)) + (z * z)) sqrt)で3次元の距離を取得のように
while文は
obj.while( {/*ブロック*/} )
です。終わる時はobjにfalseを入れます
0020デフォルトの名無しさん
NGNGつーかSmalltalkがそもそもif文をメソッドとして実装してるだろ。
002120
NGNG実装→実現
0022デフォルトの名無しさん
NGNGそうですね "新次元新発想"ではなかったですね
0023デフォルトの名無しさん
NGNG残念だったな(ゲラ
0024デフォルトの名無しさん
NGNG内積とか外積とか計算できるやつない?
0025デフォルトの名無しさん
NGNGMathmatica
0026デフォルトの名無しさん
NGNG(5.(4.(3.(2.(1.())))))ではなく(((((().1).2).3).4).5)
ラムダっぽくてグー?
0027デフォルトの名無しさん
NGNG俺は一生かかっても LISPは覚えられないと感じた瞬間。
0028デフォルトの名無しさん
NGNGなるほど!mathematicaで作ってみるか。ゲームだけど…
0029デフォルトの名無しさん
NGNG頑張れよ・・・
0030デフォルトの名無しさん
NGNG内積・外積程度だけなら適当に作ればいいじゃん
別に言語に関係ないじゃん
0031デフォルトの名無しさん
NGNG普通にCかC++でmatrixのライブラリ探したほうがいいような…
0032デフォルトの名無しさん
NGNGLispはそんなに難しくない、というか規則が割と少なく簡単
0033デフォルトの名無しさん
NGNGカーとかクダーとか授業で習ってこんなおもしろそうな言語があるのかと感動したことがある。
これでCGIでも書いてみようか知らん。
0034デフォルトの名無しさん
NGNGLispじゃないけどSchemeは如何?
ttp://www.shiro.dreamhost.com/scheme/gauche/index-j.html
0035デフォルトの名無しさん
NGNGgoto文に替わって、cometo文。
割り込みやメッセージのディスパッチに使う。
どこからともなく飛んでくる便利なラベル。
0036デフォルトの名無しさん
NGNG( ´∀`)< ぬるぽ
0037デフォルトの名無しさん
NGNG0038デフォルトの名無しさん
NGNG0039デフォルトの名無しさん
NGNG0040デフォルトの名無しさん
NGNGstring c = "hoge";
vector<pair<string, string>> m;
m.push_back(make_pair("print(string s)", "cout << s << endl"));
class t = CreateClass(c, m);
t.print("逝ってよし");
0041デフォルトの名無しさん
NGNGclass& CreateClass(string classname, vector<string> method);
string c = "hoge";
vector<pair<string, string>> m;
m.push_back(make_pair("print(string s)", "cout << s << endl"));
class T = CreateClass(c, m);
T *abc = new T();
abc->print("逝ってよし");
0042デフォルトの名無しさん
NGNGほんと、C++って読みにくくなったよな。
0043デフォルトの名無しさん
NGNGそうでもないよ
0044デフォルトの名無しさん
NGNG慣れれば読めるよ
慣れにくいからよみにくいって言うかもしれないけど
0045デフォルトの名無しさん
NGNG.hoge
としないとアクセスできないようにすれば
_とかmとか「しらね」で揉めないし、可読性20%UPなのに。
class Barfoo {
int hoge;
void doIt(int hoge) {
if (.hoge>0) {
return doThis(hoge);
} else {
return doThat(hoge);
}
}
0046デフォルトの名無しさん
NGNGCOME FROM なら Intercal にあります。
0047デフォルトの名無しさん
NGNGAPL 系の言語だな。
J 使ってみ。
0048デフォルトの名無しさん
NGNGdefine append=lambda(...)=>
letrec listcat=lambda(x,tail)=>
if pair?(x)then cons(car(x),listcat(cdr(x),tail))else tail in
if pair?(...)then if pair?(cdr(...))then
listcat(car(...),apply(append,cdr(...))) else car(...) else ...;
↓
(define append
(lambda ...
(letrec ((listcat (lambda (x tail) (if (pair? x) (cons (car x) (listcat (cdr x) tail)) tail))))
(if (pair? ...)
(if (pair? (cdr ...)) (listcat (car ...) (apply append (cdr ...))) (car ...))
...))))
0049デフォルトの名無しさん
NGNGクラス → オブジェクトの雛型、変数の型
インターフェース → 変数の型
なんで、役割をすっきりさせて
クラス → オブジェクトの雛型
インターフェース → 変数の型
というようにしてしまうとどうだろうと思ったけど、
あまり利点が思いつかない…
0050デフォルトの名無しさん
NGNGこんな風に。
public static function hoge(int a, int b) {
return a + b:
}
こう書いておくことで、hoge というメソッドが、そのクラスのクラス変数や、
インスタンスのインスタンス変数にアクセスしないことを言語的にはっきり
させることができる。アクセスしたらエラーにする。
このキーワードが指定されているメソッドを使うときには、マルチスレッドでの
同期などに気を使う必要が無い。
こう書くことで、このメソッドが厳密に数学の意味での「関数」(引数として
渡されたものだけによって、戻り値が決定される)だということをあらわせる。
005150
NGNGのところで、思いついた。
0052デフォルトの名無しさん
NGNG全然「新しい文法」じゃないじゃん
0053デフォルトの名無しさん
NGNG20 [10] + 3
30 [20] + 4
40 print [30]
で10が出る。
行番号が変数/メモリ配置を兼ねている。
0054デフォルトの名無しさん
NGNG行数が増えると大変なことになりそうだけど
俺でも作れそうでいい
0055デフォルトの名無しさん
NGNG20 INPUT "カズ イレテ"
30 IF [10] = [20] THEN 40 ELSE 50
40 PRINT "セイカイ"
50 END
0056デフォルトの名無しさん
NGNGsymbol s1, s2;
putsyn("%s:", s1);
putsyn("__ongoto(%e) %s;", ex, s2);
putstatement(blk);
putsyn("goto %s; %s", s1, s2);
}
0057デフォルトの名無しさん
NGNGCに直すと
int _10 = 1 + 2;
int _20 = _10 + 3 ;
int _30 = _20 + 4 ;
int _40 = printf("%d",_30) ;
0058デフォルトの名無しさん
NGNGa(b(c(...)));
と書くのは見ずらいし、ネストが深いと括弧を数えるのが面倒なので、
'<-'という右結合の2項演算子を用意する。
a(b(c(d, e(f))));
は、
a<-b<-(d, e<-f) ;
と書ける。
デメリットは、比較演算子<と単項の-をくっつけて書けない。
(a < - bと a <- bはまったく違う)
自作言語には既に組みこんであるけど、
<-より良さそうな記号ない?
0059デフォルトの名無しさん
NGNG:-)
0060デフォルトの名無しさん
NGNG<= てのはどう?
< も = も 二項演算子だから2つが並ぶことはあり得ない。
006258
NGNG>>58の例に当てはめると
a:-)b:-)c(d, e:-)f) ;
こうなって、なんか読みにくい気がする。
:-だけの方がいいかな。
a:-b:-c(d, e:-f) ;
>>60
既に<= という割と使われる比較演算子(leq)があったりします。
0063デフォルトの名無しさん
NGNG006458
NGNGa^^b^^c(d, e^^f) ;
結構良いですね。
a^^b;
bをaに適用するという意味は薄れるかな。
追加でもう一つ。
<-だけでは関数の引数が複数の場合に使えないので、
<-よりも優先度が高い、/- という補助の2項演算子を用意する。
これも右結合。
例えば、
a(b(c,d(e,f(g,h()))));
は、
a<-b/-c<-d/-e<-f/-g<-h();
の様に書ける。
この演算子の記号もちょっと微妙。
^^にならって、仮に/-を/^とすると、
a^^b/^c^^d/^e^^f/^g^^h();
慣れればokかな。
0065デフォルトの名無しさん
NGNG0066デフォルトの名無しさん
NGNG使える型が限定されているならわざわざ無理してswitch文を
使うまでも無い。
修正が容易な構文はsewitchよりもif-else-ifネストだ。
0067デフォルトの名無しさん
NGNG>使える型が限定されているならわざわざ無理してswitch文を使うまでも無い。
?
よくわからないのでコードで示してみて。
0068デフォルトの名無しさん
NGNG>a<-b/-c<-d/-e<-f/-g<-h();
>a^^b/^c^^d/^e^^f/^g^^h();
慣れてもどれがどう対応するのか読みづらいような…
0069デフォルトの名無しさん
NGNG0070デフォルトの名無しさん
NGNGAならB、BならAに
0071デフォルトの名無しさん
NGNGMLみたいにって…
MLには既に o という同じことをする演算子があるのに
それは指摘しないのか
007258
NGNGMLにはそんな演算子があったんですか。
それは、引数が複数ある場合はどうなるのかな。
あ、そういやMLの関数は引数が1つだけと聞いたことがあるから、
問題ない?
>>69
呼び出しを後置演算子としての括弧で判断してるので、
今の仕様だとちょっと無理です。
関数自身の値が欲しい時や、変数との区別も必要。
今の仕様では、
func0 /- arg1 /- arg2 <-
func1 <- func2 <- func3 <- func4()
は
func0(arg1,arg2,func1(func2(func3(func4()))))
という意味で、func4()の様な引数無し関数は
voidを渡す方法が無いから、ちょっと不恰好。
確かに括弧をなくせば辻褄が合う気がするんだけど。
0073デフォルトの名無しさん
NGNG{
printf("死ね");
SINE();
}
0074デフォルトの名無しさん
NGNG無限ループネタを今更やられてもなぁ。
0075デフォルトの名無しさん
NGNG参照可能になるような変数があったら便利と思うのはおれだけ?
0076デフォルトの名無しさん
NGNGうん、考えたこともなかった。
0077デフォルトの名無しさん
NGNGEmacs LispのDynamic Scoping(古いLISPに多い)のこと?
007875
NGNG既にあるなら忘れてくれ。
0079デフォルトの名無しさん
NGNG例:char com[16] = "sizeof(com)"; //文を格納する
int size = @com; //"@"で発動する
0080デフォルトの名無しさん
NGNG0081デフォルトの名無しさん
NGNGPascalなら関数のネストが出来るから
そんな感じのコードが書けると思うけど。
ちょっと違うか
0083デフォルトの名無しさん
NGNG藻前ら、もうちょっと勉強汁!
BrainF*ckとか
0084デフォルトの名無しさん
NGNG関数は値を返す、手続きは処理をするとキッチリ分けたい。
0085デフォルトの名無しさん
NGNGcase (3,5,2):
...
break;
case (3,4,1):
...
break;
default:
...
}
0086デフォルトの名無しさん
NGNGswitch {
case( 式1 ) {
}
case( 式2 ) {
}
}
0087デフォルトの名無しさん
NGNGjavaはふつうにできますが。って言うかCでも何も考えなきゃできるでしょう。
0088デフォルトの名無しさん
NGNGif (a){
case(==b){
}
case(!=b){
}
}
0089デフォルトの名無しさん
NGNG文法破綻してないか?
009071
NGNGすまん >>69 のほうが正しい。俺の読み違い。
'<-' って関数合成かと思ったら関数適用の演算子だったのね。
fun1 o fun2 は、fun1(x) と fun2(x) という二つの関数から
fun1(fun2(x)) という関数を返す演算子。
0091デフォルトの名無しさん
NGNG「新しい文法」ならいいんだろう。
面白みも旨みも新鮮さも感じられないが。
0092デフォルトの名無しさん
NGNGi
&&{{{}}}}}}{}{{}{};;;;;;;:
i
とかどうだろう?開発効率一気にあがりそうなんだけど。
0093デフォルトの名無しさん
NGNG何それ? 何に使うの?
0094デフォルトの名無しさん
NGNG宇宙人との交信ですか?
0095デフォルトの名無しさん
NGNG0096デフォルトの名無しさん
NGNG0097デフォルトの名無しさん
NGNG画期的な制御構造だと思うがどうだろうか?
for (int i=0; i<100; i++) {
if (func() == NG) break;
func2()
func3()
} nomalExit {
printf("るーぷ100回しました");
} breakExit {
printf("途中でbreakしました。");
}
0098デフォルトの名無しさん
NGNG0099デフォルトの名無しさん
NGNG0100デフォルトの名無しさん
NGNG0101デフォルトの名無しさん
NGNG...
while ( hoge ):
...
}
まんなかで、条件判断がしたい…
0102デフォルトの名無しさん
NGNGfor(;;){
...
if( !( hoge)) break;
...
}
0103デフォルトの名無しさん
NGNG美しくない。。。。for(;;)きらい。
101は、なかにwhileがひとつだけじゃないとコンパイラに怒られる
ようにしたい。
0104デフォルトの名無しさん
NGNG0105デフォルトの名無しさん
NGNG無理やりやってみる。
#define loopBegin { bool loopBreaked=false;
#define loopBreak { loopBreaked=true; break; }
#define loopNormalExit if( !loopBreaked )
#define loopBreakExit if( loopBreaked )
#define loopEnd }
loopBegin
for(int i=0; i<100; i++) {
if (func() == NG) loopBreak;
func2();
func3();
} loopNormalExit {
printf("るーぷ100回しました");
} loopBreakExit {
printf("途中でbreakしました。");
}
loopEnd
0106デフォルトの名無しさん
NGNG個人の趣味と客観的必然性を混同する馬鹿が大勢いるせいで、
日本ではいらないシステムに無駄な金が大量に投資されてい
るんだが、多分お前もその一味だろ。
0107デフォルトの名無しさん
NGNGなぁ、forの中にiってことはC++かJavaだろ?例外使えばいいじゃん。
try
{
for (int i=0; i<100; i++) {
if (func() == NG) throw new BreakException();
func2()
func3()
printf("るーぷ100回しました");
} catch(BreakException) {
printf("途中でbreakしました。");
}
}
0108デフォルトの名無しさん
NGNGラベルでgotoしても同じだな。
0109デフォルトの名無しさん
NGNGgotoなんて飾りですよ
0110デフォルトの名無しさん
NGNG011197
NGNGネストしたらどうする?
>>107
ネタだと思うが、例外の使い道と処理負荷知ってる?
俺はこの制御構造は本当にあったら便利だと思う
これで本当にgoto分がまったくいらなくなるだろう
0112デフォルトの名無しさん
NGNG今でも全くいらないですが…
0113デフォルトの名無しさん
NGNG煽られた・・・
0114デフォルトの名無しさん
NGNGループが指定した回数回らない。ってのは十分「例外」だと思うが。
その冷害が起こったときにある処理をさせたいわけだ。
何の問題がある?
011597
NGNGすまぬ、言い方を変えよう
「これで本当にgotoを使いたいと思う時がまったくなるだろう」
とりあえず今日はねる
0116デフォルトの名無しさん
NGNGすまぬ、言い方を変えよう
「これで本当にgotoを使いたいと思う時がまったくなるだろう」
とりあえず今日はねる
>>112
すまぬ、言い方を変えよう
「これで本当にgotoを使いたいと思う時がまったくなるだろう」
とりあえず今日はねる
>>112
すまぬ、言い方を変えよう
「これで本当にgotoを使いたいと思う時がまったくなるだろう」
とりあえず今日はねる
>>112
すまぬ、言い方を変えよう
「これで本当にgotoを使いたいと思う時がまったくなるだろう」
とりあえず今日はねる
>>112
すまぬ、言い方を変えよう
「これで本当にgotoを使いたいと思う時がまったくなるだろう」
とりあえず今日はねる
>>112
すまぬ、言い方を変えよう
0117デフォルトの名無しさん
NGNGすまぬ、言い方を変えよう
「これで本当にgotoを使いたいと思う時がまったくなるだろう」
とりあえず今日はねる
>>112
すまぬ、言い方を変えよう
「これで本当にgotoを使いたいと思う時がまったくなるだろう」
とりあえず今日はねる
>>112
すまぬ、言い方を変えよう
「これで本当にgotoを使いたいと思う時がまったくなるだろう」
とりあえず今日はねる
>>112
すまぬ、言い方を変えよう
「これで本当にgotoを使いたいと思う時がまったくなるだろう」
とりあえず今日はねる
>>112
すまぬ、言い方を変えよう
「これで本当にgotoを使いたいと思う時がまったくなるだろう」
とりあえず今日はねる
>>112
すまぬ、言い方を変えよう
「これで本当にgotoを使いたいと思う時がまったくなるだろう」
とりあえず今日はねる
0118デフォルトの名無しさん
NGNG状態遷移を表現するのにgotoは直感的でいいですよ。
あとは、腐ったループから抜けるとき。
>>114
きっとレジスタ全部退避させるのがもったいないと思われ、、、
011997
NGNGだったらelseも例外だなププ
try {
if (a!=0) throw new ElseException();
printf("通常処理");
} catch (ElseExcetion) {
printf("例外処理");
}
0120デフォルトの名無しさん
NGNGそうか?
0121デフォルトの名無しさん
NGNG性能が問題にならないなら、
腐ったループ→メソッドに切り出し
状態遷移→Stateパターン
にするけどね…
0122デフォルトの名無しさん
NGNG本質的なことを聞くけど、いくらでも解決法のある問題で、一番面倒な「そういう仕様になるまで祈る」を選択したんだい?
あと、寝るんじゃなかったのかい?ネタスレでバカな俺相手に煽るより寝た方が遙かに有意義だと思うけど。
012397
NGNGダメ社会人必死だな(ププ
0124デフォルトの名無しさん
NGNGお前もな。
0126デフォルトの名無しさん
NGNG:
:
if xxxx then
break blkname
endif
:
endblock
→ここに抜ける
:
:
0127デフォルトの名無しさん
NGNGhttp://www9.plala.or.jp/oomasuya/diary.html
0128デフォルトの名無しさん
NGNG:
:
もし 〜 なら ループの最初から
:
:
ループ終わり
0129デフォルトの名無しさん
NGNG俺もそれ、欲しい。
ボーンシェル系の while って、そんな感じだよな。
俺ならこういう構文にする。
while {
} do( 式 ) {
} done;
いや、doneはいらないか。
0130デフォルトの名無しさん
NGNGint m(_ _)m b[2];
int φ(._.) c[2];
int σ(^_^) d[2];
a[3]=0;// 配列を広げてくれる
b[3]=0;// ごめんなさい、エラーを出す
c[3]=0;// ログを出す
d[3]=0;// そう、お前の責任だ!
0131デフォルトの名無しさん
NGNGscanf("%s", a)www
return 0 WWW
0132デフォルトの名無しさん
NGNG<name>{
...
<name>}
0133デフォルトの名無しさん
NGNGラベル付き break なら Java とかにある。
0134デフォルトの名無しさん
NGNG0135デフォルトの名無しさん
NGNG最初から終わりに向かってだらだら読まれるっていう今までの
前提を覆すってのはどうよ。
0136デフォルトの名無しさん
NGNG0137デフォルトの名無しさん
NGNG逆さに・・・
{
;c return
;a + b = c;
;c int
}
(a int,b int)hoge int
0138デフォルトの名無しさん
NGNGbourne shは、式と文を区別しないからそう書ける。
というか式と文の区別自体無意味で盲腸のようなもんだと思う。
013997
NGNGjavaを↓のように拡張キボンヌ
public class TestClass implements Interface1,Interface2,Interface3 {
public void go() overrided Interface1 { // <-- オーバーライドメソッド宣言
System.out.println("Interface1のgo実行!!");
}
}
014097
NGNG途中でreturnするのはgotoと一緒だ
0141デフォルトの名無しさん
NGNGそんなこと言ったら continue break はどうなんだ
0142デフォルトの名無しさん
NGNG反対!! さっさと抜け出したほうが見やすい
0143デフォルトの名無しさん
NGNGアホか。これ以上やることのない条件を最後まで引っ張ったらインデントは増えるわ条件分岐のコストはかかるわろくなことがない。
014497
NGNGcontinueは廃止
breakは1ネストの脱出だからOK
>>142
ネスト内でのreturnは制御構造を完全に無視してジャンプする行為だ
これを見やすいと言われちゃ、君には構造化プログラミングの素質がないとしか言えん
さっさと抜け出すほうが楽、もしくは>>143のような理由で反対なら話し合う余地もあるが
>>143
同じことがgoto文でも言える、goto廃止も反対なんだな?
0145デフォルトの名無しさん
NGNGはいはい、一生行ってなさい。
昨日辺りから歪んだ言語感覚持った輩が何人かうろついてるな。
0146デフォルトの名無しさん
NGNG負け惜しみ全開だな
0147デフォルトの名無しさん
NGNGsage覚えた方が良いですよ。
0148デフォルトの名無しさん
NGNG成否を判定すべき処理ごとに関数を作れってことか?
じゃないと if のネストが深くなるだけのような気が
0149デフォルトの名無しさん
NGNG015097
NGNG関数をつくれという事ではない
>じゃないと if のネストが深くなるだけのような気が
本来ネストすべき処理だからネストは増えるのは当然
ただ、きっちり設計すれば問題になるほどネストが増す事にはならないと思うのだが
ネスト中のreturnを止める事によってネストが膨大になるというのは設計が甘い匂いがプンプン
具体例を挙げてくれんか?
0151デフォルトの名無しさん
NGNGいや、いきなり言われてもコードはだせないけど、
普段はよく、
なんかやって失敗したら return false;
なんかやって失敗したら return false;
・・・
最後に return true;
みたいにするから。
0152プロの逝って良しの1 ◆MvRbZL6NeQ
NGNGa,b,c,d,e = subroutine( a1,a2, obj );
これは絶対必要だな。
0153デフォルトの名無しさん
NGNGそんなんなら、いっそのこと返り値なしのほうがスッキリする。
0154デフォルトの名無しさん
NGNG同意。入力は引数、出力は返値と区別したいモノだ。
0155デフォルトの名無しさん
NGNG良いなそれ。
0156デフォルトの名無しさん
NGNG0157デフォルトの名無しさん
NGNG0158デフォルトの名無しさん
NGNG0159デフォルトの名無しさん
NGNGリストを基本とした言語だな。
0160デフォルトの名無しさん
NGNGリストじゃねーか
0161デフォルトの名無しさん
NGNG0162デフォルトの名無しさん
NGNG>a,b,c,d,e = subroutine( a1,a2, obj );
perl なら下のようにかけるけど、求めているのと違う?
($a,$b,$c) = &foo($x,$y,$z);
それとも、複数の返り値を宣言したいのか?
int int int subroutine(int,int,int);
0163デフォルトの名無しさん
NGNG>int int int subroutine(int,int,int);
複数の値を返す関数へのポインタを複数返す関数 のプロトタイプってどうなるんだ?
0164デフォルトの名無しさん
NGNGええ、PerlとかPHPではできるね。
実質、このスレって
新次元新発想!C言語の新しい文法を作るスレ
っしょ。
0165デフォルトの名無しさん
NGNG> int int int subroutine(int,int,int);
long long int fn();
って書いてたら返値が4パターンあるのだが。
(C言語の拡張として見ることを前提にすると)
0166デフォルトの名無しさん
NGNG0167デフォルトの名無しさん
NGNGC++ でもテンプレート使って頑張れば
十分実用的なものが作れるよ。
0168デフォルトの名無しさん
NGNG?
0170デフォルトの名無しさん
NGNGテンプレート詳しくないんだけどこのMTypeってのは2つ以上の任意の数の型で具象化できるの?
0171167
NGNGできん。
だから、一応個数ごとに用意する必要がある。
まぁ、そんなに多いのを使うことはないので
そんなに沢山用意する必要もない。
それに、少ないやつの定義を再利用できるので
実装もそれほど大変じゃない。
まぁ、じゃぁこれを使ってるのかと言われると
使ってないわけなのだが(w
0172デフォルトの名無しさん
NGNGboost使え
で、みんなもっと新しい文法考えてくれ、将来自作スクリプトにとりいれるから
0173162
NGNGそ、想像もしたくない。
>>165
曖昧さが発生するってことかな?
関数の返り値と返り値が代入される左辺値の型が厳密な言語仕様にするとか・・・。
しかし、複数の返り値は >>152のアイディアで、私は返り値は複数なくてもよいと思う。
>>164
>実質、このスレって
C風じゃなくて、なんか奇抜なアイディア(文法)をみてみたいな。
0174デフォルトの名無しさん
NGNGこんくらい奇抜なのもあるくらいだからなぁ。
0175デフォルトの名無しさん
NGNG強烈・・・。
0176デフォルトの名無しさん
NGNGクダラネ
0177デフォルトの名無しさん
NGNG> 関数の返り値と返り値が代入される左辺値の型が厳密な言語仕様にするとか・・・。
long long fn();
long long a;
long b, c;
a = fn();
b, c = fn();
やっぱり曖昧な罠。
.hファイル相当だけじゃなく.cファイル相当も見ればわかるけど、それじゃ分ける意味が・・・。
0178デフォルトの名無しさん
NGNGBrainFuck ならスレがあるぜ!
http://pc2.2ch.net/test/read.cgi/tech/1036013915/
0179デフォルトの名無しさん
NGNGlong intとかのintを省略できないようにすればよい
long long int => long long ひとつ
long int long int => long ふたつ
0180デフォルトの名無しさん
NGNG(int,long,float)fun(double,char,short);
じゃだめなの?
0181デフォルトの名無しさん
NGNG0182デフォルトの名無しさん
NGNGvoid bar(char*, long*, int*, doube*);
....
bar((char*, long*, int*, double*)foo(1,2,3,4));
//cast from (void*, void*, void*, void*) to (char*, long*, int*, double*)
0183デフォルトの名無しさん
NGNGそれって返値を絶対に受け取らなきゃいけない訳で。
0184デフォルトの名無しさん
NGNGfruit_t f = GetFruit();
if( f == FRUIT_RINGO || f == FRUIT_BANANA || f == FRUIT_ORANGE || f == FRUIT_MIKAN ) {
っつーのが、結構無様に見える。
if( GetFruit() in ( FRUIT_RINGO, FRUIT_BANANA, FRUIT_ORANGE, FRUIT_MIKAN ) ) {
って書きたい。
0185デフォルトの名無しさん
NGNGpublic class A {
private B b;
public void method1( int i ) delagate to b; // 委譲(同名メソッド)。引数も引き継ぐ
public void method2( int i ) delagete to b.method20( i ); // 違うメソッド。引数は明示。
};
0186デフォルトの名無しさん
NGNG0187デフォルトの名無しさん
NGNGLisp
0188デフォルトの名無しさん
NGNGswitch (GetFruit()) {
case FRUIT_RINGO:
case FRUIT_BANANA:
case FRUIT_ORANGE:
case FRUIT_MIKAN:
foo();
}
じゃ駄目?
0189デフォルトの名無しさん
NGNGPASCAL ならできる。
0190デフォルトの名無しさん
NGNG> FRUIT = ( RINGO, BANANA, MIKAN )
> RED * FRUIT?
( RINGO )
逆に
> RINGO := RED * FRUIT
> BANANA := YELLOW * FRUIT
> MIKAN := ORANGE * FRUIT
と定義して、
> FRUIT?
( RINGO, BANANA, MIKAN )
と集合を返すこともできるとか。
・・・Prologみたいな。
0191デフォルトの名無しさん
NGNGえ、prologでできるんじゃ?
0192デフォルトの名無しさん
NGNG0193デフォルトの名無しさん
NGNG0194デフォルトの名無しさん
NGNGLISPで適当なトランスレータ作るとか。
S式と違って、文法的なエラーを早い段階で検出できるから、
素で書いてくよりも効率いいし、append系を演算子にすると楽だよ。
S式自体もread使えばそのまま埋めこめるし。
define flat-tag = lambda(tag, totag, s) =>
let loop (x=s, r='()) in
if pair?(x)then
if tagged-list?(car(x), tag) then
loop(append(cdar(x), cdr(x)), r)
else loop(cdr(x), cons(car(x), r))
else `(,totag ,@(reverse r));
define-macro +s x => flat-tag('+s, 'string-append, x);
define-macro +p x => flat-tag('+p, 'list*, x);
define-macro +l x => flat-tag('+l, 'append, x);
define fib(n)=>if n < 2 then n else fib(n - 1) * fib(n - 2);
define factorial(n)=>if n=0 then 1 else n * factorial(n - 1);
↓
(define flat-tag
(lambda (tag totag s)
(let loop ((x s) (r '()))
(if (pair? x)
(if (tagged-list? (car x) tag)
(loop (append (cdar x) (cdr x)) r)
(loop (cdr x) (cons (car x) r)))
`(,totag ,@(reverse r))))))
(define-macro (+s . x) (flat-tag '+s 'string-append x))
(define-macro (+p . x) (flat-tag '+p 'list* x))
(define-macro (+l . x) (flat-tag '+l 'append x))
(define (fib n) (if (< n 2) n (* (fib (- n 1)) (fib (- n 2)))))
(define (factorial n) (if (= n 0) 1 (* n (factorial (- n 1)))))
0195デフォルトの名無しさん
NGNG本当はC++が好きです
何でC++が好きかというと・・・なんでだろ?
0196デフォルトの名無しさん
NGNGなるほど、参考になります
0197デフォルトの名無しさん
NGNG0198デフォルトの名無しさん
NGNG0199デフォルトの名無しさん
NGNGハーマイオニーたん「使っていいのよ」
おれ「ありがとう。助かるよ。」
シュッシュッ
0200デフォルトの名無しさん
NGNG0201デフォルトの名無しさん
NGNG0202デフォルトの名無しさん
NGNG{
int i↓
for(i = 0→ i < 5→ ++i)
{
printf("%d\n", i)↓
}↓
(゚д゚)ウマー
}
0203デフォルトの名無しさん
NGNG何がおもしろいのか分からない。
0204vbMan
NGNG0205デフォルトの名無しさん
NGNGインタフェイスのみだと不便なこともあるよね。
Template Method パターンを2つ以上使う必要があるときとか。
多重継承をもっと簡単かつ安全に取り扱う文法ってできないかな?
もしくは、それに変わる新しい概念とか。
0206あぼーん
NGNG0207デフォルトの名無しさん
NGNG0208デフォルトの名無しさん
NGNGJavaのintarfaceの中でもメソッドが定義できると良いよね。
intarfaceのメソッドを継承先で、マクロ、テンプレートみたいに
コードを展開(コピペ)すれば、javaの構造を変えずに出来るのに・・・
0209デフォルトの名無しさん
NGNG"実装込みのインタフェース"って、あまり美しくないような気がします。
で、こういうのはどうだろう。
public interface I { // インタフェース
void foo();
}
public class A implements I { // デフォルト実装クラス
void foo() {
// : perform...
}
}
public class C implements I {
private A a = new A();
I implemented a; // ←これ!Iのメッセージは全部aに委譲
}
0210デフォルトの名無しさん
NGNGCOM っぽい。。。ATL なんかだとマクロでそういうのやってますよね。
インタフェイスを要求された時点でダイナミックに委譲先を生成したりも
できる。
0211205
NGNG一応 Mix-in は知ってるのですが、
本読んでもあまり継承との使い分け方が分かんなくて。
Mix-in の御利益とか教えていただけるとうれしいのですが。
0212デフォルトの名無しさん
NGNG(if (let loop ((i 0))
(cond ((< i 100) #t)
((eq? (func) 'NG) #f)
(else
(func2)
(func3)
(loop))))
(print "normal loop end")
(print "loop break"))
0213212
NGNG(if (let loop ((i 0))
(cond ((>= i 100) #t)
((eq? (func) 'NG) #f)
(else
(func2)
(func3)
(loop (+ i 1)))))
(print "normal loop end")
(print "loop break"))
0214デフォルトの名無しさん
NGNG//sexpr->mll(>>213);
if let loop(i = 0) in
if i >= 100 then
#t
else if eq?(func(), 'NG) then
#f
else
{
func2();
func3();
loop(i + 1);
} then
print("normal loop end")
else
print("loop break");
//mll->sexpr(↑);
(if (let loop ((i 0))
(if (>= i 100)
#t
(if (eq? (func) 'NG) #f (begin (func2) (func3) (loop (+ i 1))))))
(print "normal loop end")
(print "loop break"))
0215デフォルトの名無しさん
NGNG(if (memq (get-fruit) '(ringo banana orange mikan))
'fruit
'unko)
0216デフォルトの名無しさん
NGNG0217208
NGNGいや、単純に
intarface a {
void foo();
void bar(){ foo(); };
};
てな感じで関数barのようにテンプレートメソッドが
インターフェイスに作れること。
ほんとの所javaでは単一継承しか許していない。それをインターフェイス
というトリッキーな方法で多重継承もどきをやっている。
お陰でメソッドコールが早い。
0218デフォルトの名無しさん
NGNGインターフェイスの概念と
似てるけど
根底に流れる思想は
違うものなので
勘違いなさらない
0219デフォルトの名無しさん
NGNGmix-inで有名といえばruby
javaでmix-in?なMixJuce
ttp://staff.aist.go.jp/y-ichisugi/ja/mj/
ttp://cvs.m17n.org/~akr/mj/design-pattern/design-pattern.html
mix-inよりdelegete(C#)
ttp://www.asahi-net.or.jp/~dp8h-izn/delegate.html
intarfaceやmix-inでは無く集約を使おう?
ttp://www.skpl.com/or/vol3/no10/syuusyokurep1.html
0220デフォルトの名無しさん
NGNG思想が違うのは理解している。
大体別の思想を持っていなかれば別のプログラミング言語
なんて、でっち上げないよ。
でも思想に振り回されてはいけないね。
もちろん宗教にしてもいけない。
思想も所詮、生きるための道具だしね。
0221205
NGNGアリガ�。
Mix-in のこと、全然分かってませんでした。
やっぱ Ruby の本3日で読んで
そのまま貸しちゃったのがいけなかったか。
要するに、継承関係が2次元になったということでいいんでしょうか?
既存のクラス構造をそのままに、新しい機能を追加できる、と。
Ruby だと変数に固定された型がないので分からないのですが
(Mix-Juice の例では例が端折られ過ぎてて宣言がないですし)、
Mix-Juice では、モジュールを拡張した場合
その基底モジュールのクラスの変数に
拡張モジュールのクラスのインスタンスを入れて
ポリモーフィズムを実現することもできるのでしょうか?
module m {
define class c {
define void f() { ... }
}
}
module n extends m {
define class c {
define void f() { ... }
}
}
m.c v = n.c.new();
みたいな感じで。
0222デフォルトの名無しさん
NGNGttp://compsoc.dur.ac.uk/whitespace/
0223デフォルトの名無しさん
NGNGアホだ、すげえ笑った。
0224デフォルトの名無しさん
NGNG最高にワラタ
http://compsoc.dur.ac.uk/whitespace/count.ws
0225デフォルトの名無しさん
NGNG作る気にもならんが。
0226デフォルトの名無しさん
NGNGああ、なるほど。そういうものですか。
0227デフォルトの名無しさん
NGNG0228デフォルトの名無しさん
NGNGスペースと改行とタブ以外は無視。
0229205
NGNGいろいろ読んでると、
「今はできないが、将来やれるといいな」
みたいなことを書いてるようですね。
MixJuice は Java VM で読めるように変換してるから、
静的にじゃないとだめなんでしょか。
一方 Ruby だと動的にできるようですね。
>>222
Brainfuck スレにも出てきたアレですね。
スペースとタブと改行でプログラムするという
印刷できない言語。
0230デフォルトの名無しさん
NGNG0231訳してみた
NGNG最近のプログラミング言語の殆どは空白文字(スペース、タプ、改行)の文法的な意義を考慮しない。
さも、そこにはいなかったかのように単純に無視するだけである。
これは、キャラクタセットの中のとてもフレンドリーなメンバーに対して
ひどく不公平な仕打ちであると我々は考える。
果たして彼等が目に見えないという理由だけで単純に無視してしまって良いものだろうか?
「Whitespace」はこの不公平の是正を目指して作られた言語である。
空白文字以外の文字は全て無視される。
つまり「空白」、「タブ」、「改行」、これらだけが「Whitespace」の文法構成要素として認められる。
0232デフォルトの名無しさん
NGNGパーフェクトということでつか?
0233デフォルトの名無しさん
NGNG0234205
NGNGMixJuice でも多重継承は多重継承でやってますし。
MixJuice の Mix-in はどうも C++ の namespace や
Java の package の拡張に相当するような気がしますね。
もし、拡張したコードとの間にポリモーフィズムが成り立てば、
多次元継承のようなものができることになりますね。
Ruby だと変数が型付けされてないので実現できちゃいますね。
C++ だと fstream が ifstream/ofstream と直接の継承関係にないのですが、
多次元継承ができれば直接の継承関係を持てることになりますね。
base.istream ← base.iostream
↑ ↑
file.istream ← file.iostream
みたいに。
0235デフォルトの名無しさん
NGNG0236デフォルトの名無しさん
NGNGXSL
0237デフォルトの名無しさん
NGNGsexpr->XML
0238デフォルトの名無しさん
NGNG0239デフォルトの名無しさん
NGNGダイヤモンド継承問題って知ってる?
0240227
NGNGということは、>>225が言っているのはCのソースに同じように動くwhitespaceのプログラムを埋め込むということ?Cが空白をセパレータとしか見ないのをうまく利用して。
0242デフォルトの名無しさん
NGNGかえせる関数がほしいなぁ〜
こんな感じで
(x,y) = getPoint();
0243デフォルトの名無しさん
NGNG0244デフォルトの名無しさん
NGNG0245242
NGNGスマソ
0246デフォルトの名無しさん
NGNG0247デフォルトの名無しさん
NGNGIはプログラマ。使わない。
YOUはコンピュータ。your keyboardとか。
HEは通常のユーザ。
You show Word "Hello World" by your display.
mustは必ず実行。canは気分で変わる。
0248デフォルトの名無しさん
NGNG男尊女卑だとの苦情がくる。it にすべき。
> You show Word "Hello World" by your display.
syntax error.
0249デフォルトの名無しさん
NGNG私はソケットです{
public ソケットは"google"と通信します。
public ソケットは"string"を公開します。
}
私はソケット.new
0250デフォルトの名無しさん
NGNGit だと物みたいだな。
he/she とか they(たとえ単数でも)とかにしる。
0251デフォルトの名無しさん
NGNG0252デフォルトの名無しさん
NGNGI, youとしている以上、代名詞で揃えたいんじゃないか?
0253デフォルトの名無しさん
NGNG0254デフォルトの名無しさん
NGNG0255デフォルトの名無しさん
NGNGどっちかというと古い文法だ
0256デフォルトの名無しさん
NGNG0257239
NGNGダイヤモンド型からW型に変えれば?
結構知られているネタだと思うけど。
一様の説明
javaのintarface見たいな感じでstreamとinputableとoutputabe見たいに分けて
istream = stream + inputable
ostream = stream + outputable
iostream = stream + inputable + outputable
という風に継承すればよい。
0258デフォルトの名無しさん
NGNG○ 一応
0259デフォルトの名無しさん
NGNGまいなーチェンジばっかり
こんなのどう???
ファイルのオープンもクローズもいらん言語
いちいち、めんどくさい
#include <system.h>
を自動でやるオプション
if( x== ( 1 | 2 | a+3 ) ){
...
}
0260デフォルトの名無しさん
NGNG???
0261205
NGNG実装を多重継承することはもう諦めるしかないんでしょうか。
アレは ios があるからダイアモンド継承が起こるわけですが、
アレは iostream で istream からも ostream からも
同じバッファを操作するために
ios にバッファを置いておく必要があるというわけですよね。
もちろん実装を継承しなければそういうことをする必要もないわけですが、
istream で実装したことと同じことを
iostream ででも実装しないといけないのは
あまりエレガントじゃないなぁ、と。
って、あ!
もしかして、そこで Mix-in が活躍するのでしょうか?
同じ実装を include する形にすれば、
実装を継承せず、かつ2度書く必要も無い、と。
これが >>207 の言いたかったことなんでしょうか?
これは感動!
ファーストクラスを持つ言語では、
多重継承をしたら必ずダイアモンド継承問題が起こるんですよね。
だからこんなにこだわってるわけで。
ファーストクラスが欲しい。でも、多重継承もしたい。
でも、Mix-in で多重継承をエレガントに回避できるのであれば、
多重継承を諦めても問題ありませんね。
0262205
NGNGファーストクラスってのは違うかも。
まぁ、とにかく、
暗黙的に与えられるあらゆるクラスの基底クラスのこと。
0263デフォルトの名無しさん
NGNG0264デフォルトの名無しさん
NGNGif( x in { 1, 2, a+3 } ){
...
}
みたく書ける言語なら、あったんじゃない?
0265デフォルトの名無しさん
NGNG0266デフォルトの名無しさん
NGNG0267デフォルトの名無しさん
NGNGbegin
元
for i := 0 to 99 do a[i] := a[i] + b[i];
新命令「全部やれ命令」
a[0..99] + b[0..99]; //0から順にb加算
a[0..50] * 100://a全部に100を掛ける
0268デフォルトの名無しさん
NGNG0269デフォルトの名無しさん
NGNG0270デフォルトの名無しさん
NGNG0271デフォルトの名無しさん
NGNG0272bloom
NGNG0273デフォルトの名無しさん
NGNG0274デフォルトの名無しさん
NGNG0275デフォルトの名無しさん
NGNGいや、申し訳ないんだけどね。
0276デフォルトの名無しさん
NGNG0277デフォルトの名無しさん
NGNGlisp自慢房>>>>>>>>>>lispシラン房>>>>>>>>>>「lisp自慢房発生」とかサブイこと言う奴
ちなみに俺はlispマタ-クシラン房
>>271
>縦書きとか、右から左に書くとか
文法とは言わない。
奇抜でもない。
メリット皆無。
そんなあなたも>>270に比べれば全然素敵です。
0278デフォルトの名無しさん
NGNG0279デフォルトの名無しさん
NGNGsyntax {
expr := op expr expr
-> eval_expr(op, value_of(expr), value_of(expr))
| '(' expr ')'
-> expr
;
op := '+' -> ...
| '*' -> ...
;
:
};
* (+ 1 2) (+ 3 4)
0280デフォルトの名無しさん
NGNGメタ言語の文法はどうするのか?
lisp のマクロと、どう違うのか?
0281あんまりマジレスされても困るが
NGNG>メタ言語
適当に作って定義を自己記述できるようにしといて
それを変更することによってメタ言語も変更可能にする。
(ことが可能かどうかは俺は知らん。)
>Lispのマクロ
よく知らんが、LispマクロはあくまでS式から離れられないんじゃ?
0282デフォルトの名無しさん
NGNG4月1日 int funca(int a)
{
a = a*2;
return a;
}
4月2日 int funca(int a)
{
a = a*3;
return a;
}
4月3日 int funcb(void)
{
int b=funca(5);//昨日のものが適用される
int c=昨日のfunca(3)*一昨日のfunca(4);
return c;
}
※ちかい日付のものは多少スペルが違ってもOK.あらかじめ納期をメモできる
0283デフォルトの名無しさん
NGNG0284デフォルトの名無しさん
NGNGノイローゼですか?
0285デフォルトの名無しさん
NGNG>じゃ、逆斜め書きで
文法とは言わない。
奇抜でもない。
メリット皆無。
そんなあなたもノイローゼ。
0286デフォルトの名無しさん
NGNG0287山崎渉
NGNG0288山崎渉
NGNG( ^^ )< ぬるぽ(^^)
0289デフォルトの名無しさん
NGNGタイピングのしやすさを考えると、"[", "]"の方がよいのではないでしょうか?
エディタの補完を使うので括弧は直接打たない、というのであれば、
なおさら、"(", ")"である必要性もないと思うのですが。
0290デフォルトの名無しさん
NGNG0291デフォルトの名無しさん
NGNG[]でプログラミングして置換しろ
0292デフォルトの名無しさん
NGNGカッコが多重ネストして見難い時は混ぜたりするし。
0293デフォルトの名無しさん
NGNG([(((((((((])
は
((((((((((()))))))))))
と同じ。
0294デフォルトの名無しさん
NGNGオーバーライドしてもそのまま引き継がせることが出来たらなと思う。
自由に変更できてしまうのが気持ち悪くてどうにも。
class Base {
protected:
virtual void hidden_impl() = 0; // 公開すべきではない
};
class Derive : public Base {
protected:
virtual void hidden_impl(); // OK
public:
virtual void hidden_impl(); // NG: Base::hidden_impl() は protected
};
これなら、継承クラスでうっかり public に書き間違えたままという
ことも無くなっていいな。
0295デフォルトの名無しさん
NGNGキーワードを使う。例えば __force public: は、public ではない仮想
関数のアクセス修飾を強制的に変更する。そうでなければ public: と
同義、ということにする…
class Derive : public Base {
__force public:
virtual void hidden_impl(); // OK: private から public
virtual void done(); // OK: done を公開する
};
class Derive : Base { // 非公開継承
virtual void hidden_impl(); // OK
protected:
virtual void hidden_impl(); // NG: Base::hidden_impl() は private
};
0296デフォルトの名無しさん
NGNG0297デフォルトの名無しさん
NGNGそういって増やす代わりに既存のキーワードに複数の意味を持たせて分かりづらくなった言語があります
0298デフォルトの名無しさん
NGNG言わんとすることは分かるが、このスレ的には面白くないな。
目新しさがない。
0299デフォルトの名無しさん
NGNG"(",")" である必要がないというのはもっともです。
CommonLispでは reader-macro という機構によって
"(",")" のような記号もプログラマが自由に再定義
できるようになっているところをみると、昔の人も
そう思ったのでしょうね。
ただエディタで閉じ括弧を補完することは現代の科
学力ではまだ無理だと思います。
0300デフォルトの名無しさん
NGNGキーワードやキーワードに持たせる意味を増やさなければいいのでは?
そういうのは極力少ないほうが言語が長持ちするとポールも言ってます。
それよりも syntax-sugar を自由に定義できるような機能を言語に備え
ておけばすむ話でしょう。
0301デフォルトの名無しさん
NGNGC++とかもtemplateを構文に対して行える様にすればよかったのにね。
ていうかなんてこんな下なんだろ。
0302デフォルトの名無しさん
NGNG#define loop for(;;)
0303デフォルトの名無しさん
NGNGループ場所指定の中断再開
while( label: a != b )
{
while( c != d )
{
break label ; // ループ指定break/continue
}
}
最初とか最後とかの判定手段
foreachは最初の時と最後の時に特別な処理が多いから
せっかくの糖衣構文が使いにくくて・・・
foreach( label: object cur in dataSet )
{
if( label.isFirst )
{
これは最初要素のときだけ実行
}
}
無名メソッド、クラス、その他
リテラル定数ならぬリテラル関数が欲しい
delegate double funcdDlegate( double x ) ;
....
{
funcDelegate a = { double ( double x ) { return x * x ; } }
}
0304デフォルトの名無しさん
NGNG> リテラル定数ならぬリテラル関数が欲しい
で、前半との関連は不明ながら、結論はこれ?
0305デフォルトの名無しさん
NGNGラムダ式ね。
「全ての関数はメソッドでなければならない」言語では
あまり導入したがらないのかもね。
まぁ、LISP でもやっとけってことかな?
Ruby でも近いことできるけど。
l = Proc.new{ |x| x * x }
p l.call(9) # 81
0306デフォルトの名無しさん
NGNGブロック内で生成されたオブジェクトを、
ブロックから抜けた時点で確実に開放するという機能が欲しいです。
ブロックGCの例
blockgc: {
new hoge,hage,mage;
return hage; //
}
//hoge,mageはこの時点で必ず開放される。
//hageはreturnされるので参照が切れない。
0307デフォルトの名無しさん
NGNG0308デフォルトの名無しさん
NGNGfreeのある環境ならそうしてますが。
0309デフォルトの名無しさん
NGNGほしい理由は判るけど、もうちょっと
カッコいい構文にならんか?
>while( a != b ) label {
>#once{この中のコードは1度しか実行されない}
onceのアイデアは、Eiffelの構文より導入
最後の例は、いかにもラムダっていう感じだが
メソッド内で関数が定義できれば良いんじゃないんかな?
class foo {
public method:void bar ( ) {
function:double squea ( x:double ) { return x*x; }
funcDelegate a = new funcdDlegate(squea);
}
}
0310デフォルトの名無しさん
NGNG0311デフォルトの名無しさん
NGNGでも、変なタイミングでGC呼ばれると困るかも・・?
と解決できない不安要素を抱えるのも禿げる原因になるのでは?
時間コスト掛かっても良いから、
一定のタイミングを保証したい場合とか。
ちなみに俺は禿げてませんよ。
0312デフォルトの名無しさん
NGNG0313デフォルトの名無しさん
NGNGそじゃないでしょ。
開放するタイミングをコントロールしたいというのが
導入の動機でしょ?C++では良く使われている手だし。
でもGCが働いてほしいときに「ゴミ収集.回収開始();」
と書ければ良いんじゃない?
0314デフォルトの名無しさん
NGNGつーか俺のプロバイダじゃ何故か立てられないから、誰かたのむわ。
0315デフォルトの名無しさん
NGNGC#スレにいって愚痴れ。
0316デフォルトの名無しさん
NGNG最初の内容をここに書いてみて
0317デフォルトの名無しさん
NGNG世界にはハゲの侵攻を司る何らかの律、
運命というものが存在するのだろうか。
少なくとも人は自分の頭髪さえも自由にはできない。
0318デフォルトの名無しさん
NGNGあんまり制御構文を複雑にするな
どうしてもというならPython使え
Pythonの制御構文はスゴイぜ
0319デフォルトの名無しさん
NGNGマ板に立ててきたから逝って濃い
http://pc.2ch.net/test/read.cgi/prog/1051029981/
0320デフォルトの名無しさん
NGNGメモリはともかく、ファイルやソケットは自動的に閉じて欲しいよね。
まぁ、C++ とかで出来るのでこのスレでこれ以上話しても仕方が無いが。
0321デフォルトの名無しさん
NGNGありがとう
0322デフォルトの名無しさん
NGNGガベージコレクションに利点は無いでしょ?
で、本題
個人的にはオブジェクト定義言語とか欲しいね
VC++にある機能ではあるけどコード補完が簡単にできるような仕組み
各エディタに標準装備されたら楽でいいなぁとか思う
0323デフォルトの名無しさん
NGNG短いメソッドが多めになって、もはや何メソッド宣言書いているのかプログラムを書いているのかわからないし
メソッド名がめんどくさくなって
void m000()
void m001()
...
void m218()
なんかアホ臭くなって、で
delegateHoge a = {
{ void () { 処理いろいろ } } ,
{ void () { 処理いろいろ } } ,
{ void () { 処理いろいろ } } ,
...
}
とメソッドの配列を作りたくなってしまったんでつ
0324デフォルトの名無しさん
NGNG実はそれも考えたんですけれど
C系の言語は、文法が "while( 式 ) 文" だから、
for( 色々 ; 色々 ; 色々 ) label ;
例えばラベル付きで空のfor文、要するに
for( 色々 ; 色々 ; 色々 ) ;
のラベル付きを考えると気持ちの悪いことになるなと思って、括弧の中に入れてしまいました。
0325デフォルトの名無しさん
NGNG0326デフォルトの名無しさん
NGNG{
while( c != d )
{
break label ;
}
} : label;
breakってループの最後に跳ぶわけだから、
ラベルはブロックの最後についた方がいいんじゃないかと
考えているのはオレだけ?
C系の構文に追加するのは無理があるとは思うが…
0327デフォルトの名無しさん
NGNG0328309
NGNGCのfor文て、好き&良いと思っていますか?
漏れは、ダサい&嫌いです。
いっそBASIC見たいにの"FOR()TO()STEP(){}"としたほうが
解析&理解しやすいと漏れは思う。
でもラベルはfunction,method,classなどの名前付けの構文と
統一できたほうがさらにカッコよさげな言語になりそうな予感。
だから326さんの案も好きじゃない。
>>327
判ってると思うけど"continue label;"でイイでしょ?
while( a != b ) {
while( c != d ) {
continue label; /* a!=b に飛ぶ */
}
} : label;
0329デフォルトの名無しさん
NGNG0330デフォルトの名無しさん
NGNG「制御構文オブジェクト」があればいいんだと思う。
break も contine も foreach の最初や最後も、全部その「制御構文オブジェクト」にメッセージを
送るという形式で、for の中身や while の中身は、そのオブジェクトのメソッド定義の糖衣構文。
そうなれば統一されててよいと思う。
0331デフォルトの名無しさん
NGNG>開放するタイミングをコントロールしたいというのが
なぜ開放タイミングをコントロールしたいのか、が気になるね。
でも>>320の言うように、一時的なオブジェクトのファイナライザ(デストラクタ)の
呼び忘れを防止するような機構が欲しいね。
{
temporary Hoge hoge = new Hoge() finalize hoge.finalize();
temporary File file = new File('hoge.txt') finalize file.close();
while (!file.eof()) {
:
}
// ブロックの終わりで、hoge.finalize()とfile.close()が呼ばれる。
}
とか。
0332デフォルトの名無しさん
NGNG0333デフォルトの名無しさん
NGNG0334デフォルトの名無しさん
NGNG0335デフォルトの名無しさん
NGNGスコープ脱出時での各種自働処理っていうのは確かに欲しいんですが、
エグイのはそのオブジェクトをスコープ外の超寿命なオブジェクトが参照してしまったときです。
まさか勝手に消えてなくなられては困るし・・・
object に寿命に関わるなんだかの属性をつけて、特定の属性からは参照しようとするとエラーとすれぱ上手くいくかちょっと興味深深。
それができれば、ついでにガベージコレクタのオプティマイズもかなり良くなりそうな気がする。
0336デフォルトの名無しさん
NGNGGenerational GCみたいなもんか?
0337デフォルトの名無しさん
NGNG目的がスコープ脱出お知らせシステムだから、もうちっと積極的。
自動的にGenerational GCインサイドになるでしょうね。
0338デフォルトの名無しさん
NGNGいや、ファイナライズメソッドを呼ぶだけで消さない、というほうが現実的じゃない?
Javaは、ごみあつめされたときにfinalize()が呼ばれるわけだけど、それを
もうちょっとコントロールしたい、と。gcを直接実行するよりコストが低い方法で。
で、スコープ外の超寿命なオブジェクトは、参照したオブジェクトがファイナライズ
されたあとのオブジェクトなのか、まだ使えるのかをチェックしながら使う、と。
(この辺の注意事項は、スコープ脱出時の自動処理があろうが無かろうが同じだよね)
0339デフォルトの名無しさん
NGNG簡易な方法もいいのですが、この手の問題は結構多い気がします。
とりあえずgcがメモリーしか見ていないのが原因の問題は多いですね、
一般的なオブジェクトはデータのようなメモリーさえあれば良いものばかりでなく、
I/Oその他のリソース量・質がメモリーと違う物を参照している物があって、それに合わせたガベコレも必要です。
この辺は考えればかなり面白い物ができそうな気はなんとなくするんですが・・・
それもかなり一般化された形でできそうな気がします。
現状でも頑張れば何とかなりますが、この辺りはまとめてシステム側が面倒みてくれれば楽チン。
ユーザーによる機能拡張可能な総合リソース管理システムみたいなのができると面白いかと。
0340デフォルトの名無しさん
NGNG0341デフォルトの名無しさん
NGNGvoid func( double a )
{
double b = 5 ;
System.Console.Write( hoge( 2 ) ) ;
void hoge( double x )
{
return x * a + b ; // a b はともにこの関数のスコープ
}
}
見たいに書けたら便利
0342デフォルトの名無しさん
NGNG0343デフォルトの名無しさん
NGNGもっとLisp系やProlog系にも触れた方がいいよ。
0344デフォルトの名無しさん
NGNGLisp系、Prolog系の特徴を教えてください
殆どの型は知らないのですよ、そういうの。
いや煽りでなくて。
0345デフォルトの名無しさん
NGNGおれもそう思う。
>>344
そんなの検索しろよ。
0346デフォルトの名無しさん
NGNG何でこっちで調べんといかんのよw
このスレの発展のために言ってるんだろ?
0347デフォルトの名無しさん
NGNGスレの発展の話なんてしてないだろ。
0348デフォルトの名無しさん
NGNGPrologやHaskelとか出てこないのは使ってる人が少ないというだけ?
それとも、文法的な不満は無いということかな?
0349デフォルトの名無しさん
NGNGLISP を勉強した時は結構感動したな。
Prolog も勉強しようと思いつつ暇が無くてできない。
本は買ってるんだが。
0350デフォルトの名無しさん
NGNGいまどきの言語に取り込んで欲しいネタなら山程あるって感じだね。
0351デフォルトの名無しさん
NGNGdie(X) :- man(X). // 規則:
man(ソクラテス). // 事実:
?- die(ソクラテス). // 問い(実行開始)
> yes. // 結果
0352デフォルトの名無しさん
NGNGうぉ、何か面白い。Prolog触ってみよっかな
0353デフォルトの名無しさん
NGNGPrologは知らんがHaskellは知っているヨ!
ttp://www.sampou.org/haskell/
で見てみ。
手続き型言語しか知らんものから見ると、まさに新次元新発想
0354デフォルトの名無しさん
NGNGこちら側もやり始めるととてつもない深さがあんるんだけど・・・
非正格関数、正格関数がいまどきの言語に欲しい今日この頃、C#つけて欲しい、template とセットで。
0355デフォルトの名無しさん
NGNGD言語のドラフトにはテンプレートがあるらしいよ
OOPだけどw
0356デフォルトの名無しさん
NGNG> モナド I/O システム
ワロタ
0357デフォルトの名無しさん
NGNGF#は遅延評価はできるみたいよ。つーか見た感じ関数型といえる部分はそれだけのような…
(使ってはいないので、間違ってるかも。)
0358デフォルトの名無しさん
NGNGたとえばMath.Sin() とか Math.Cos() とかを正格関数、計算コスト少々大とかに設定しておいて
while( hogehoge )
{
y += Math.Sin( x ) * Math.Sin( x ) ;
}
このとき最初のMath.Sin( x )は実行する必要があるが、
プロシージャーではなく関数であれは一度目の実行だけで、二つ目はキャッシュしておけば良い。
可読性を上げたときにパフォーマンス低下防止に役に立つと思う。
0359デフォルトの名無しさん
NGNG関数型言語を知らないようだな。
同じ入力に対する同じ関数の出力は同一というのが普通。
0360デフォルトの名無しさん
NGNG358がいいたいのは
Math.sin(x) の計算コストが高いときは
y += Math.sin(x) * Math.sin(x); と書いても
実行時には自動的に
double sinx = Math.sin(x); y += sinx * sinx;
に置き換えてほしいという風に見えるが。
> 可読性を上げたときにパフォーマンス低下防止の役に立つと思う。
というのもパフォーマンスをあげるためにキャッシュ代わりに
一時変数をたくさん使う必要がなくなるという意味だろうし。
なぜ関数型言語を持ち出すのかがわからん。
0361デフォルトの名無しさん
NGNG型推論持ってる関数型言語だとその場合、
Mathに副作用がないことが証明されてれば
自動的にやってくれると思う。
実行時じゃなくて、コンパイル時だけど。
0362デフォルトの名無しさん
NGNG0363デフォルトの名無しさん
NGNG全てに対して値のキャッシュをすると、それはそれで問題もあるので、有効なものだけチョイスして欲しいと思ったんです。
それにしても、なんか妙に関数型に反応する人がいますね(藁
0364デフォルトの名無しさん
NGNG関数型は関数型、これはこれで便利。
もしもそれがあるならば、「計算コスト少々大」とかといった情報を付加すると
効率的にパフォーマンス制御が可能になるねといいたかったんです。
パフォーマンスをあげるために関数型ではないです。
0365デフォルトの名無しさん
NGNGスマソ
0366デフォルトの名無しさん
NGNGMathって特別扱いしてそうだし。
0367デフォルトの名無しさん
NGNG0368デフォルトの名無しさん
NGNG0369デフォルトの名無しさん
NGNG使い方
try_lock(obj){
//ロックできた!
}else{
//ロックされてたのでロック出来なかった!
}
0370デフォルトの名無しさん
NGNGLISP/Scheme, Haskell, Ruby, Python, C#, Java, C++, Delphi, Prolog
漏れは...まだまだだな...。
0371デフォルトの名無しさん
NGNGそんなに沢山憶えると、新しい文法を考えて実装する前に、実装できるパワーがなくなってしまう年になりそうです。
文法の構築は、見掛けよりもその背景にある思想が重要と思う。
大きく別ければ、によって駆動されももの、関数型、論理型の三つ。
さらに、プロシージャー型には、構造化プログラミング型とオブジェクト指向型が
関数型には非正格関数、正格関数があるわけですが。
この中から代表的なものだけチョイスしておけば十分と思うのですがどうでしょ。
それ以外では、
アセンブラとyacc/lexまたはJavaCC
これは判らないと、文法矛盾その他実装不可能が見えなくなって、論外の言語クレクレ小僧になってしまう。
ちなみに自分は論理型が弱いです、何とかしないと・・・
0372デフォルトの名無しさん
NGNG大きく別ければ、手続きによって駆動されももの、関数型、論理型の三つ
のミスでした。
0373デフォルトの名無しさん
NGNG需要の少ない理論手法を持ち込んだところでそんなものは流行らない。
0374デフォルトの名無しさん
NGNG> そんなに沢山憶えると、新しい文法を考えて実装する前に、実装できるパワーがなくなってしまう年になりそうです。
まぁ、20代の中頃から後半くらいにはなるでしょな。
ただ、いろいろ知らないと「そんなん既にあるやん」ってことになるし、
既存の文法を知らないとその発展もできないわけで...。
LISP, Ruby, C#, Java, C++ は達成してるので、
あと最低でも Haskell, Prolog くらいは知りたいと思う所存。
Python と Delphi は時間があれば...。
> アセンブラとyacc/lexまたはJavaCC
確かに。新しい文法を考えてる時、こいつらの知識はフル稼働してますね。
0375デフォルトの名無しさん
NGNG> 文法の構築は、見掛けよりもその背景にある思想が重要と思う。
思想重視だと、好きじゃない機能を入れた方が良かったり、
なかなかストレスが…
> これは判らないと、文法矛盾その他実装不可能が見えなくなって、論外の言語クレクレ小僧になってしまう。
最近、意味解析で解決するような文法が多くなってる気がする。
書き易さ重視ってことなんだろうけど。
> ちなみに自分は論理型が弱いです、何とかしないと・・
論理型は正直捨ててる。
Lispはかじった程度なので、一度本格的にCommon LispというかCLOSを。
あとはEiffel。
0376デフォルトの名無しさん
NGNG22歳だけど
>LISP/Scheme, Haskell, Ruby, Python, C#, Java, C++, Delphi, Prolog
のDelphi以外は勉強したよ?
0377デフォルトの名無しさん
NGNG別にそれで実装してる必要はないものな
概念が分ればそれでよしみたいな
どうでもいいがD言語ドラフトを日本語訳してくれないかね
個人的にOOPの最終形態だと期待してるのだが
0378デフォルトの名無しさん
NGNGHaskell,C++ を難なくこなせるとしたら、それは大した物だと思います。
0379デフォルトの名無しさん
NGNG0380デフォルトの名無しさん
NGNG0381デフォルトの名無しさん
NGNGまぁ、文法自体はね。
その意義とか理念とか理解して、さらに発展させるだけの状態になるのは
もうちょい時間がかかるのではないかと。
でもまぁ、正直
>実装できるパワーがなくなってしまう年
になるまでには十分達成できると思うけどね。
早ければ24〜25歳程度で大丈夫っしょ。
0382デフォルトの名無しさん
NGNGこれを拡張してwifeやhusband, father, mother, brother, sister..を作る!
ドイツ語やフランス語に男性名詞・女性名詞があるように
int や longを拡張して male int や female long を作る!!
そんな文化人類学的プログラミング!!!
0383デフォルトの名無しさん
NGNG0384デフォルトの名無しさん
NGNGwhy (?) {
...
}
0385デフォルトの名無しさん
NGNGhuh (?) {
...
}
0386デフォルトの名無しさん
NGNG間違って破棄しちゃったオブジェクトが復活。
Object o = old Object();
0387デフォルトの名無しさん
NGNGmother fucker() {
return >>384;
}
0388デフォルトの名無しさん
NGNG他に usually, often, sometimes, seldom, never 構文も。
0389デフォルトの名無しさん
NGNG0390デフォルトの名無しさん
NGNGって感じ?
0391デフォルトの名無しさん
NGNGMLやHaskellをやれば論理型プログラミングを多少は学べるし
新しい言語を作るには最低でも各言語で中級(イディオム&パターン)程度の腕が居るだろうし
そうするには2,3年程度はかかるだろうねー
それからとなると年いくつになっているだろう?
>>373
ニーズとは?やっぱ大規模開発?
他の言語でもいけるのでは?
>>375
LispよりScheme。CLOSもあるし。
継続は覚えた方が方が良いでしょう。
CPSは言語制作者になりたければ覚えている方が吉
0392デフォルトの名無しさん
NGNGは?
>LispよりScheme。CLOSもあるし。
>継続は覚えた方が方が良いでしょう。
なんかおかしい。
0393デフォルトの名無しさん
NGNGマスターしてしまえば能動的に組めると言う利点がある
文系プログラマにとってこれほど喜ばしい手法はなかろうて
0394デフォルトの名無しさん
NGNGこれはオブジェクト指向言語を導入するよりも極端に影響する。
0395デフォルトの名無しさん
NGNGフルCLOSがあるのはCommonLispでっせ。
Schemeのはそれと比べてしまうとエセっぽい。
それでも実用上十分だけど。
0397デフォルトの名無しさん
NGNG0398デフォルトの名無しさん
NGNG>これはオブジェクト指向言語を導入するよりも極端に影響する。
関数型言語で減るバグっていうのは
副作用の無い関数にバグがでにくいからだよね?
OOによって減るバグっていうのは
全然違うタイプのバグでしょ。
0399デフォルトの名無しさん
NGNG0400デフォルトの名無しさん
NGNG0401デフォルトの名無しさん
NGNG0402デフォルトの名無しさん
NGNGMLやHaskellを論理型と言ってるのは
型推論とかパターンマッチとかそういう奴のことを指してるの?
0403デフォルトの名無しさん
NGNGただ言語のエッセンスを知りたいと言うだけなのにCLOS
のフルセットって要るん?
0404デフォルトの名無しさん
NGNGでも関数型言語を使っている例は少ない。
なぜ?
0405391
NGNG402さんは、どう思う?
0406デフォルトの名無しさん
NGNGMS が処理系を提供してないから。
悲しいけど、これ現実なのよね。
>>405
引数のパターンマッチも結局は型推論なんで
型推論と言えばそれでよかったですね。
0408デフォルトの名無しさん
NGNGただ、MS も F# とか言うのを出すみたいなんで、
これからどうなるかは分かりませんな。
ML/Caml + .NET とのたまってるようだけど、どうなんでしょな。
0410デフォルトの名無しさん
NGNGLazyの方が楽しいのに
CallbyNameでもいいのに・・・
0411デフォルトの名無しさん
NGNGサンプルコード、チラッと見て勝手にlazyだと思い込んでた。
確かにそれだとあんま面白くないなあ。
0412デフォルトの名無しさん
NGNGCamlって先行評価じゃなかったっけ。
0413デフォルトの名無しさん
NGNGメリットが無かったんでしょ
0414名無し@沢村
NGNGcaseは「〜の場合〜の処理をする」
forとwhileは「〜の間中〜の処理をする」
という意味だよな。
要するに「もし〜なら、〜の場合、〜の間中」の発想から離れればいいわけだ。
だが「〜の処理をする」は不可欠だよ。処理をしないとプログラムにならんからな。
つまり「〜の処理をする」の前提の部分を他の言葉に置き換えれば新しい文法になるわけだよ。わかるかな?
たとえばnot ifというのはどうだ?
「もし〜でなかったら〜の処理をする」という新しい文法だよ!
またif andやif orというのも考えられるぞ。
「もし〜かつ〜だったら〜の処理をする」「もし〜または〜だったら〜の処理をする」という新しい文法だよ。
またnot caseは「〜でない場合〜の処理をする」
while selectA,B,Cは
「〜の間中、AとBとCの中から適当に処理を選んで実行する」だ。
これだと人口知能向きの言語だね。
おまいらよ、新しい発想というものはこうやって考えるものだよ!!
0415デフォルトの名無しさん
NGNGネタにもならない長文書くな
0416デフォルトの名無しさん
NGNGif の中の論理式に not 付けろ、switch の中に乱数入れろ。
そんな物は新しくならなくてもいい。
専用言語ならお砂糖構文で十分。
この種の問題は前提とかではなく、選択と繰り返しが肝、従来の文法の殻を破るならこの部分だよ。
数学が得意なら、集合論とか圏論とかにネタがあるだろうに、詰め込んだそれは使用不能かよ。
0417デフォルトの名無しさん
NGNG0418デフォルトの名無しさん
NGNG0419デフォルトの名無しさん
NGNGはぁ?
Lazyのメリットはいっぱいあるよ
長さが無限の配列を使えたりとか
if文がパターンマッチで表現できたりとか
0420デフォルトの名無しさん
NGNG人口無能さん、氏ね。
0421デフォルトの名無しさん
NGNG413じゃないけどLazyのメリットって
>長さが無限の配列を使えたりとか
>if文がパターンマッチで表現できたりとか
これだけですか?
これら2つは全体をLazyにする程の問題とは思えませんが。
0422デフォルトの名無しさん
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1047970129/l50
「バカめ」と言ってやれ、って感じ。
こんなことは言語製作者たちは既に考えていて、実装している。
しかも、さらにその先まで考えている。
多分C/C++プログラマは画期的な文法を提言しているつもりなのだろうが、とっくに時代遅れだ。
だから、最近のプログラマは勉強不足だっつーんだよ。
ブックフェアに行ってこい。もっと言語を覚えろ。文法を見ろ。
プログラマを名乗っていたいのならば、
C/C++以外の言語も勉強しないとダメなんじゃないの。
0423デフォルトの名無しさん
NGNGLazy ねぇ。
別に無くても似たことできるしねぇ。
無限リストは別に普通に再帰で実現できるし、
if 文もどきも
(* O'Caml *)
let if_org(b, th, el) = if b then th() else el();;
let rec pow n x =
if_org(n = 0, (fun () -> 1.), (fun () -> x *. (pow (n - 1) x)));;
pow 2 3.;;
ってやればできるしなぁ。
まぁ、わざわざλ式使わなあかんのがかっこ悪いけどな。
引数使わないときに速いとかいうのも、
どこまで効いてくるのやら。
0424デフォルトの名無しさん
NGNG「竹内関数」+「たらいまわし」でぐぐると出てくるよ
0425デフォルトの名無しさん
NGNGまぁ、たらいまわし関数以外でも速くなることもあるんだろうけど。
0426デフォルトの名無しさん
NGNGわざとらしくRubyと比較させてるところがなんとも(w
今のところ非正格が有利に働くのはごく一部の計算についてだけです。
http://www.bagley.org/~doug/shootout/lang/ocaml/
http://www.bagley.org/~doug/shootout/lang/ghc/
http://www.bagley.org/~doug/shootout/lang/ruby/
0427デフォルトの名無しさん
NGNG0428デフォルトの名無しさん
NGNG遅延評価できて随分速くなるぜよ。
不恰好だけどね。
まぁ、それでも Haskell (Hugs)より遅いけど、
それはインタプリタの性能とかも効いてくるしねぇ
(Ruby のインタプリタはそんなに速くない)。
def tarai( x, y, z )
xval = x.call
yval = y.call
if x.call <= yval
then yval
else zval = z.call
tarai(Proc.new{tarai(Proc.new{xval-1}, Proc.new{yval}, Proc.new{zval})},
Proc.new{tarai(Proc.new{yval-1}, Proc.new{zval}, Proc.new{xval})},
Proc.new{tarai(Proc.new{zval-1}, Proc.new{xval}, Proc.new{yval})})
end
end
puts tarai(Proc.new{12}, Proc.new{6}, Proc.new{0})
0429デフォルトの名無しさん
NGNGx.call を2度書いちゃってる。
if 文の x.call は xval にしてね。
0430デフォルトの名無しさん
NGNG0431デフォルトの名無しさん
NGNGというのも、文法がややこしくなるなぁ。
かといって、特別な文法を用意しないと
上のコードみたいに不恰好になってしまう。
ならば、特別な文法を用意せずとも
不恰好にならない文法ならいいわけか?
0432デフォルトの名無しさん
NGNGインタプリタなんでどこまで比較できるのか知らんが。
Cygwin/Windows XP
CPU Mobile Pentium III 1.13GHz
メモリ 256MB
Haskell(runhugs:>>424のコード)
real 0m0.445s
user 0m0.220s
sys 0m0.200s
Ruby(>>424のコード)
real 0m23.077s
user 0m19.878s
sys 0m0.040s
Ruby(>>428-429のコード)
real 0m0.099s
user 0m0.060s
sys 0m0.030s
0433デフォルトの名無しさん
NGNGttp://www.loveruby.net/~aamine/ja/tdiary/20030425.html#p08
好きなだけまわせ
0434デフォルトの名無しさん
NGNG確かにコンパイルした Haskell は速いですな。
ただ、うちは GHC を入れてないので、
うちでは比較できませんな...。
ところで、先に比較するのは反則なんでしょうかね?
随分速くなりますけど。
#include <stdio.h>
int tarai(int x, int y, int z) {
int nextx, nexty;
nextx = (--x <= y) ? y : tarai(x, y, z); ++x;
nexty = (--y <= z) ? z : tarai(y, z, x);
return (nextx <= nexty) ? nexty :
tarai(nextx, nexty, (--z <= x) ? x : tarai(z, x, ++y));
}
int main() {
printf("%d\n", tarai(768, 384, 0));
return 0;
}
0435デフォルトの名無しさん
NGNG別の言語を使う、作るというのは別の発想をしたいからでしょ?
あんたたちが考えているより、遙かに人間の思考は言語によって左右される。
言語っていうのは、もっとスゲエもんなんだよ。
0436デフォルトの名無しさん
NGNGCで普通に組むより速いから、こうして話題になってるわけで。
既存の言語にももっと目を向けなさいってこった。
0438デフォルトの名無しさん
NGNG0439デフォルトの名無しさん
NGNG非正格が作る文法は、無限サイズのデータを取り扱うと他の言語では到達不能なまでにシンプルになんるだよ。
シンプルという事は、開発速度に効果するということなんだよ。
実行速度の特殊性だけが特徴じゃないんだ。
0440デフォルトの名無しさん
NGNGまちがえた、非正格は文法じゃないな・・・なんていえばいいんだろう?
0441デフォルトの名無しさん
NGNG簡約戦略(実行方法)かな?
0442デフォルトの名無しさん
NGNG0443デフォルトの名無しさん
NGNG意味論semantics
0444デフォルトの名無しさん
NGNGtype 'a seq = SeqCons of 'a * (unit -> 'a seq);;
let rec (&~) n step = SeqCons (n, (fun () -> (n + step) &~ step));;
let sqcar (SeqCons (a, _)) = a;;
let sqcdr (SeqCons (_, a)) = a ();;
let rec sum_to n sq =
let n' = sqcar sq in
if n' > n then 0
else n' + (sum_to n (sqcdr sq));;
sum_to 6 (1 &~ 1);;
十分シンプルじゃね?
0445デフォルトの名無しさん
NGNG0446デフォルトの名無しさん
NGNGtype 'a seq = SeqNil | Cons of 'a * (unit -> 'a seq);;
let rec ( &~ ) n step = Cons (n, (fun () -> (n + step) &~ step));;
let rec ( ~: ) = function
[] -> SeqNil
| (n :: rest) -> Cons (n, (fun () -> ~:rest));;
let sqcar = function
Cons (a, _) -> a;;
let sqcdr = function
SeqNil -> SeqNil
| Cons (_, a) -> a ();;
let null = function
SeqNil -> true
| _ -> false;;
let rec sum_to n sq =
if null sq then 0
else let a = sqcar sq in
if a > n then 0
else a + (sum_to n (sqcdr sq));;
sum_to 6 (1 &~ 1);;
sum_to 6 ~:[1;2;3;4;5;6;7;8;9];;
0447デフォルトの名無しさん
NGNG馬鹿には、それがわからんのです。
少しの記憶力と抽象化する能力、論理的思考の持ち荷主で
あれば、オブジェクト志向が流行ったり始めた時と
幾つかの共通点(パターン)を発見できるはず。
MLに限らずLisp(delay)でも悪名高きC言語(関数ポインター)でも
遅延評価できますって。
0448デフォルトの名無しさん
NGNGLazy にする必要のないところでも Lazy になった場合にも、
効率はいいの?
0449デフォルトの名無しさん
NGNG逆に、 lazy にしない理由って効率だけ?
lazy の問題は副作用をどうするかってほうじゃないかと思う。
0450デフォルトの名無しさん
NGNG> MLに限らずLisp(delay)でも悪名高きC言語(関数ポインター)でも
> 遅延評価できますって。
例えば、Cだとどんな風になるの?
頭の悪い俺にもわかるようにサンプルきぼんぬ。
0451デフォルトの名無しさん
NGNGlazy の式でも実行時はlazy で無くてよい式と判別可能な式は結構あるし、
全部lazyでOKではと思うこともあるね。
ガベコレのようにこなれるといい方法も出てくるかも知れない。
0452デフォルトの名無しさん
NGNG副作用が必要なら、それは手続きにした方が素直じゃないかな。
関数型が効率よい理由の一つは、関数の中に全ての処理が閉じ込められていて
他に影響を与えないことが明白であると言うことだと思う。
lazy であるかどうかに関わらず、関数なら副作用は禁止したほうがよいのではと感じます。
0453デフォルトの名無しさん
NGNG副作用の無い関数の定義はfunction hoge{}で、
副作用の有る手続きの定義はprocedure hoge{}にしよう、
ってのを提案してる香具師が居たが、
Haskellだとモナドが副作用の有る手続きで、それ以外は
全部副作用が無いってことで、既に分離が実現してるんだよ、ね?
0454デフォルトの名無しさん
NGNGとりあえず二行目撤回。
素直に書いてもそれなりに効率よく動くって、大きいと思う。
>>452-453
その場で評価される手続きと、必要になるまで評価が遅延される関数とを分離する、って形になるのかな。
lambda 式みたいなのの手続き版があると便利そう… monad がそんな感じなのかな?
副作用が多く使われそうな局面って、 I/O とかだろうけど…
手続き導入するのと、関数の枠組みで対処する方法用意するのと、どっちが使いやすいんだろ。
関数だけにしちゃうほうが言語仕様はきれいになりそうだけど、 code は似たような感じになるのかな…
それとも、手続きがあると、関数に渡した手続きが評価される時期とかで悩んだりするのかな…
0455デフォルトの名無しさん
NGNG447 じゃないけど、ちょっと思いついたので、
まず、関数型に手続型プログラムをトランスレートする。
トランスレートした先はlazy関数型である。
それをコンパイル実行する。
チューリングマシン万歳ってなところで。
実際C等のコンパイラのコードオプティマイズ手段として一旦関数型に落として計算の依存関係を調べて
パイプラインストール防止のための命令スケジューリングを行うというのは有りです。
これを一歩進めた形で実現可能か?
部分的ならokは間違いないと思うが全体的にはどうだ?
Cでいうところの関数越えのオプティマイズはかなり無茶があるぞ?
そもそもトランスレート先はlazyが効かない書き方にならないか?
とかとか、問題も結構多そうな予感。
やってみないことには謎ですね。
>>447
かなり興味深深です、実際の所どんな風になっているんですか?
0456デフォルトの名無しさん
NGNGLispでもLazyをやるときは,lambda関数でLazyにしたい処理を
くるんで後の関数に渡す。後の関数は、それを受け取って
適切な時に実行する。ある種の意味でパターンだと思う。
delayとforceを使って遅延評価するのは、あくまでlambdaより簡単に
遅延評価使えるからだと思う。
lambdaでLazyが出来るんだから関数ポインター"typedef void* (*lambda)(void*);"でも
理屈上できる。関数型言語になれている人でないと考えずらいですし、めんどくさいで
しょうでしょうがね。
そういうことです。呆れたかな?
0457デフォルトの名無しさん
NGNGC++ だと operator() を持ったクラスを作って渡すのがパターンだな。
0458デフォルトの名無しさん
NGNG0459デフォルトの名無しさん
NGNGよくわからんので実際にコード書いてくれ。
0460デフォルトの名無しさん
NGNGy = f(x)
のことを表す。
0461デフォルトの名無しさん
NGNGSTL のアルゴリズムとか使った事無い?
まぁ、個人的には作業量多くて確かにあまり使いたくないのだが。
0462デフォルトの名無しさん
NGNGSTLの場合は限定的な使い方しかしてないから十分実用範囲じゃない?
遅延評価用に関数オブジェクトなんて使ったら気絶しそうだ
0463デフォルトの名無しさん
NGNG0464デフォルトの名無しさん
NGNG関数オブジェクト?使えば良いじゃん。
なんで嫌なの?
効率?(Pool使えば良いよね?)
変?(一種のCallbalckだと思えば?)
0465デフォルトの名無しさん
NGNG故にクソだ。
0466デフォルトの名無しさん
NGNG0467デフォルトの名無しさん
NGNG∧_∧
( ´∀`)< Helo World
0468デフォルトの名無しさん
NGNGまぁ、C++だとそれで仕方が無いけど、
ラムダ式のある言語を知ってると、
やっぱそれと比べちゃうんだよね。
boost::lambda とか使った事無いけど
どんなもんなんでしょ?
使える?
0469デフォルトの名無しさん
NGNGありゃ冗談にしか使えねーよ。
0470デフォルトの名無しさん
NGNGそういう問題ではなく、一体何百個クラス作るつもりですか?
といいたかったのですが
0471デフォルトの名無しさん
NGNG必要なだけ。
0472デフォルトの名無しさん
NGNG0473デフォルトの名無しさん
NGNG0474デフォルトの名無しさん
NGNG#include <vector>
#include <string>
int main(){
std::vector<std::string> c;
c.push_back("Hello, ");
c.push_back("world!");
std::for_each(
c.begin(),
c.end(),
lambda<void>(int x){ std::cout << x << std::endl; });
}
$ icl --enable-lambda lambdatest.cpp
$ ./lambdatest.exe
Hello, world!
0475デフォルトの名無しさん
NGNGstd::string x じゃなくって?
0476デフォルトの名無しさん
NGNG何言語ですか?
0477デフォルトの名無しさん
NGNG0478bloom
NGNG0479デフォルトの名無しさん
NGNG0480デフォルトの名無しさん
NGNGという時点でおかしいとは思わんのか。
0481デフォルトの名無しさん
NGNG新しい文法です。
つか、それがこのスレの趣旨じゃねーのかよ
0482デフォルトの名無しさん
NGNG一般的に見れば別に新しくも無いわけだが。
0483デフォルトの名無しさん
NGNGあとは知らん。
#include <iostream>
#include <vector>
using namespace std;
#define LAMBDA_NAME2(line) labmda##line
#define LAMBDA_NAME(line) LAMBDA_NAME2(line)
#define LAMBDA(algo, b, e, ret_t, param, body) \
class LAMBDA_NAME(__LINE__) { \
public: \
static ret_t labmda param { body; } \
}; \
algo(b, e, LAMBDA_NAME(__LINE__)::labmda);
main()
{
vector <int> x;
x.push_back(1);
x.push_back(1);
x.push_back(2);
x.push_back(3);
x.push_back(5);
x.push_back(8);
LAMBDA(for_each, x.begin(), x.end(), void, (int i), cout << i << endl);
}
0484デフォルトの名無しさん
NGNG0485デフォルトの名無しさん
NGNG#include <iostream>
#include <vector>
using namespace std;
#define LAMBDA_NAME2(line) labmda##line
#define LAMBDA_NAME(line) LAMBDA_NAME2(line)
#define LAMBDA(algo, b, e, ret_t, param_body) \
class LAMBDA_NAME(__LINE__) { \
public: \
static ret_t lambda param_body \
}; \
algo(b, e, LAMBDA_NAME(__LINE__)::lambda);
main()
{
vector <int> x;
x.push_back(1);
x.push_back(1);
LAMBDA(for_each, x.begin(), x.end(),
void, (int i) { cout << i << endl; });
}
0486デフォルトの名無しさん
NGNG新でもなんでもない。
ttp://www.kmonos.net/alang/boost/classes/lambda.html
もっと時代は、進んでるぞ。せめてネタとして、この本でも読んどけ。
ttp://www.biwa.ne.jp/~mmura/ModernC++Design/
0487デフォルトの名無しさん
NGNGソコダメ b
z = a + b
print z
実行結果
妊娠しますた
0488デフォルトの名無しさん
NGNG0489デフォルトの名無しさん
NGNGz = a + b;
print z;
実行結果
最近つぶやきシロー見ないぞ
0490玄人
NGNG0491デフォルトの名無しさん
NGNG何を今さら。
0492デフォルトの名無しさん
NGNGそんな穴は自分で埋めればいい。そんなん誰でも、できるでしょ?
だいたい関数型言語や論理学や数学から見れば
手続き型言語は穴だらけ。それをみんなが避けているだけー。
0493デフォルトの名無しさん
NGNG0494デフォルトの名無しさん
NGNG0495デフォルトの名無しさん
NGNG?
0496デフォルトの名無しさん
NGNG0497デフォルトの名無しさん
NGNG玄人ならば、ダメだダメだと言う前に使いこなして見せましょう
穴があるから使えないは素人の言い訳
0498デフォルトの名無しさん
NGNGそういう発想がデザインを腐ったまんまにしてしまう要因だと
ノーマン氏が言ってたス。
0499デフォルトの名無しさん
NGNG腐敗したまんまということにはならんでし?
これだけプログラミング言語が豊かなのに・・・
0500デフォルトの名無しさん
NGNG/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| やはりC++はくさっていると・・・
\
 ̄ ̄ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ・∀・) ∧ ∧ < ・・・
( ⊃ ) (゚Д゚;) \____________
 ̄ ̄ ̄ ̄ ̄ (つ_つ__
 ̄ ̄ ̄日∇ ̄\| BIBLO |\
 ̄ ======= \
0501デフォルトの名無しさん
NGNGhttp://www.namazu.org/~satoru/misc/bad-knowhow.html
0502デフォルトの名無しさん
NGNGバッドノウハウっつーか
「穴があることが利用される理由」の言語に「穴をなくせ」とは何だよと思うがね。
穴が有るのが困るなら、穴を潰したC++であるJavaやC#が有るのだから、素直にそれを選べば済む話。
JavaやC#だと予定の仕様が実現不可能なときには積極的にC++を使うんだよ。
それ以外には、もうすでにあるプログラムの保守、保守で利用するならこれもまた、穴も含めて上位互換でなければ意味が無い。
歴史のある言語は、その歴史を無視して言語仕様を拡張すると、ただの妄想言語となる。
それでも嫌なら新規言語にするべき。
>「奥が深い」といって喜びを見出す「奥が深い症候群」
この問題については同意したいが、「奥が深い」と感じるときには必ずその裏に重要なヒントが隠されている事が多いから
言語を作ろうっちゅー人間がバッドノウハウだから勉強不要というのはどうかね、賛成しかねるね。
これは、作る側の話ではなく使う側の話だね。
0503デフォルトの名無しさん
NGNG>バッドノウハウは、ソフトウェアの複雑怪奇な仕様が歴史的に引きずられ
>根本的な改善は行われないまま、そのノウハウが文書によって受け継がれ
>ることによって蓄積が進行する。Unix 上で広く使われているツールとして
>はTeX, Emacs, sendmail, bind, perl, gnuplot, procmail などは、役に
>立つツールであると同時に、その複雑怪奇な仕様によって長年に渡って
>ユーザを苦しめ続け、バッドノウハウの温床として悪名が名高い。
sendmail bind の部分では納得するが(一度デファクトスタンダードになってしまうとなー)
emacs perlは思想的にバッドノウハウがあることを前提に作っている。
そしてTexが挙げられているのは納得できない。
この文章を書いた人自身のセンスを疑う。
>「奥が深い」といって喜びを見出す「奥が深い症候群」
Schemeの継続もこの一部か?
>>502
>この問題については同意したいが、「奥が深い」と感じるときには
>必ずその裏に重要なヒントが隠されている事が多いから
禿銅
0504デフォルトの名無しさん
NGNG>複雑怪奇な仕様が歴史的に引きずられ
と
>emacs perlは思想的にバッドノウハウがあることを前提に作っている。
は同じ意味じゃん。
0505デフォルトの名無しさん
NGNG0506デフォルトの名無しさん
NGNG> そしてTexが挙げられているのは納得できない。
> この文章を書いた人自身のセンスを疑う。
TeXの文法は相当変態的だと思うがな。
少なくとも俺の周りの人間はだいたい同じように思ってる。
0507デフォルトの名無しさん
NGNGこれ、定説。
0508デフォルトの名無しさん
NGNG> そしてTexが挙げられているのは納得できない。
> この文章を書いた人自身のセンスを疑う。
キミのセンスを疑う。
何故 TeX を wrap する LaTeX が存在するのか?
LaTeX でも十分変態的だが。
> >「奥が深い」といって喜びを見出す「奥が深い症候群」
> Schemeの継続もこの一部か?
「概念そのものが (一見) 分かりにくい」と「複雑奇怪で分かりにくい」とは全くの別物。
文法が複雑奇怪であるのには何の技術的意味も無い。
0509503
NGNG>>複雑怪奇な仕様が歴史的に引きずられ
>と
>>emacs perlは思想的にバッドノウハウがあることを前提に作っている。
>は同じ意味じゃん。
歴史的は外的要因。前提に作っているのは内的要因(主体的)。
>>507,508
どこが汚いの?漏れには綺麗に見える。
具体的に言って?
>>508
>>>「奥が深い」といって喜びを見出す「奥が深い症候群」
>> Schemeの継続もこの一部か?
>
>「概念そのものが (一見) 分かりにくい」と「複雑奇怪で分かりにくい」とは全くの別物。
漏れは継続自体に価値が無いとは思っていない。CPSなんて括弧イイと思う。
でも通称のcall-returnと継続を比べるとcall-returnの方が圧倒的に勝つともう。
0510デフォルトの名無しさん
NGNG> TeX
読みやすいようにと空白や改行入れるとたまに変な空白が表示されたり。
特に命令をいくつも使う場合や
マクロでいろいろプログラムしてる時に。
そのプログラムもまたシンタックスシュガーが殆どないので汚い。
スタイルファイルで使われる @ の入った命令名も分かりにくい。
引数を通し番号を使って参照しないといけないのは極悪。
...
0511デフォルトの名無しさん
NGNG0512509=503
NGNG>読みやすいようにと空白や改行入れるとたまに変な空白が表示されたり。
>スタイルファイルで使われる @ の入った命令名も分かりにくい。
>引数を通し番号を使って参照しないといけないのは極悪。
この部分は同意する。Texの悪い点だと漏れも思う。
>そのプログラムもまたシンタックスシュガーが殆どないので汚い。
この部分は漏れは好きだ、無いのにも理由がある。
紙一重だとも思う。
0513デフォルトの名無しさん
NGNG> でも通称のcall-returnと継続を比べるとcall-returnの方が圧倒的に勝つともう。
「勝つ」って、いつのまに競争なんかしてたんですか?
0514デフォルトの名無しさん
NGNGTexなんて書いてる輩がどれだけTeXについて知っているのか甚だ疑問
0515デフォルトの名無しさん
NGNG>新しい文法を作るスレ
新しい文法に何を採用するかという競争
>>514
何度か使ったときがあるだけです。Tex自体は、たいして知りません。
でも良い物だと思うんだけどなー。
0516デフォルトの名無しさん
NGNG> 競争
別に競争してる訳じゃないがな。
勝手に競争と後ろに付けるな、と。
> Tex/TeX
突っ込まれても気付いてないし。
というか、大して知りませんの状態で
なぜそこまで TeX が奇麗だと強く主張できるのだろうか...。
あと、別に TeX が悪い物だとも言ってないし。
文法が汚いといっただけで、利用価値は高い。
0517デフォルトの名無しさん
NGNG>歴史的は外的要因。前提に作っているのは内的要因(主体的)。
糞とわかってる仕様を採用するのは歴史に引きずられてる
以外の何者でもないよ。
0518デフォルトの名無しさん
NGNG0519490
NGNG0520デフォルトの名無しさん
NGNG0521デフォルトの名無しさん
NGNG0522デフォルトの名無しさん
NGNGcontinuation
http://www.sra.co.jp/people/aoki/SmalltalkTextbookJ/textbook27.html
0523デフォルトの名無しさん
NGNGまず行を節約できる。インデントを使わない。
0524デフォルトの名無しさん
NGNG0525デフォルトの名無しさん
NGNGPerlかLisp系が既に。
0526デフォルトの名無しさん
NGNGLispやPerlをインデント無しで書いて、読める?
0527デフォルトの名無しさん
NGNG0528デフォルトの名無しさん
NGNG0529デフォルトの名無しさん
NGNG0530デフォルトの名無しさん
NGNG特に意識する必要がないって事では。
処理系に読みこませれば勝手に折り曲げるし。
0531デフォルトの名無しさん
NGNG俺は Python と ABC しか知らないなぁ。
Haskell は必須ではないけど、
シンタックスシュガーとしてインデントが使えるね。
0532sage
NGNGってのを、
e(f) and c(d,it) and b(it) and a(it);
って書くのはどう? シェルのパイプみたいな感じで。
手続き型言語の中でつかうなら、
右結合よりこっちのほうが分かりやすいと思うんだけど。
あまり記号の種類が多いのは変態チックでイヤ。
0533デフォルトの名無しさん
NGNGというか、そんなに見づらくなるほどネストするかな?
0534デフォルトの名無しさん
NGNGつーかカリー使えば必要無い罠。
0535デフォルトの名無しさん
NGNG0536デフォルトの名無しさん
NGNGmethod1(method2(method3(var1, method4(var2))))を
method1
method2
method3
var1
method4
var2
0537デフォルトの名無しさん
NGNG(method2
(method3
var1
(method4
var2))))
0538r
NGNG自分が保守することになったコードがインデント無しでも
会社辞めたくなったりしないんでしょうか。
2chで、プログラムについて議論する時、
CやLispのコードをインデント無しでうpされても、
いやになったりしないんでしょうか。
>>523
そういうことですよね。
0539デフォルトの名無しさん
NGNGまるでガキの発想だな。
>自分が保守することになったコードがインデント無しでも
>会社辞めたくなったりしないんでしょうか。
インデントすりゃいいだろ。アホか。
0540デフォルトの名無しさん
NGNGと
「インデントが必須でない」
とは全く意味違うんだが
0541デフォルトの名無しさん
NGNG宗教論争が起こらなくてよい。
0542デフォルトの名無しさん
NGNG0543デフォルトの名無しさん
NGNGOccam
0544デフォルトの名無しさん
NGNG結論:無い。
0545デフォルトの名無しさん
NGNG0546デフォルトの名無しさん
NGNG0547デフォルトの名無しさん
NGNGhttp://slashdot.jp/article.pl?sid=03/04/08/0529232&topic=58&mode=thread
0548デフォルトの名無しさん
NGNG0549デフォルトの名無しさん
NGNG0550デフォルトの名無しさん
NGNG0551デフォルトの名無しさん
NGNGそんな自虐的にならなくても
0552デフォルトの名無しさん
NGNG0553デフォルトの名無しさん
NGNG0554デフォルトの名無しさん
NGNG0555デフォルトの名無しさん
NGNG変に制限してなきゃ使えるだろ
0556デフォルトの名無しさん
NGNG0557デフォルトの名無しさん
NGNGそれは無理だな
0558デフォルトの名無しさん
NGNG0559デフォルトの名無しさん
NGNGLispとかいうんだろ?
0560デフォルトの名無しさん
NGNGLisp とか言ってるね。自分で。
0561デフォルトの名無しさん
NGNG0562デフォルトの名無しさん
NGNG0563デフォルトの名無しさん
NGNG0564名無し@沢村
NGNG出発点 (0,0,…,0), 吸収点 (1,1,…,1) の
n次元超立方体上の対称量子ウォークの
吸収時間は Tr Xn - 1 で与えられるんだよ。
ここで Xnは方程式の解となるんだよ。わかるか?
おれはいまそういう簡単な研究に取り組んでいるんだよ!!!
0566デフォルトの名無しさん
NGNGそれだけじゃあ、簡単すぎるのでやはり
>>565に禿同
0567デフォルトの名無しさん
NGNG0568デフォルトの名無しさん
NGNG0569デフォルトの名無しさん
NGNGワラタ
0570デフォルトの名無しさん
NGNG2方向量子1カウンタオートマトンと
量子ウォークの話が混ざってるぞ。
0571デフォルトの名無しさん
NGNG{
while(true);
{
//2階層一気に抜ける
break(2);
}
}
0572デフォルトの名無しさん
NGNGどっちかのwhileがなくなった時点でbreakも修正が必要な罠。
しかも例の通りの2重ループならいいが、3重だったりしたら、
breakに気付かずに修正して不具合を引き起こす多重トラップ。
もうちょっと良く考えろたわけが。
0573デフォルトの名無しさん
NGNG0574デフォルトの名無しさん
NGNG(lambda(break)
(while true
(while true
(break)))))
0575デフォルトの名無しさん
NGNG0576デフォルトの名無しさん
NGNGダサっ
0577デフォルトの名無しさん
NGNG0578デフォルトの名無しさん
NGNG結構多くの言語に存在しますが何か。
0579デフォルトの名無しさん
NGNG2種類以上書いてくれ
0580名無し@沢村
NGNGふつーの言語では演算によって結果を求めるが、量子指向言語ではすべての結果は重ねあわせの状態でそでに存在しているから、その中から求める結果を選ぶだけよ。
求める結果は重ねあわせの係数で決まるのよ。
このあたりがいままでの言語と大きく文法が異なるところだな。
つまり画期的よ!!!
おまいらよ、これからの言語といったら量子指向言語しかないぞ!!量子でない言語なんてザコだぞ!!
0581デフォルトの名無しさん
NGNG1982年発行の教科書にも解説載ってるけど
これとは別物でつか?
0582デフォルトの名無しさん
NGNGBourne shell
0583山崎渉
NGNGピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
0584名無し@沢村
NGNG0585デフォルトの名無しさん
NGNGhttp://yahooo.s2.x-beat.com/linkvp/linkvp.html
0586578ではないが
NGNGAdaの名前付きループ脱出
Search: -- ループに名前をつける
for i in 1..n loop
for j in 1..m loop --2重ループ
if d(i,j) = key then
found := true;
locX := i;
locY := j;
exit Search; -- exit文の後にラベルを書ける
end if;
end loop;
end loop Search;
--exit後の制御はここに移る
0587デフォルトの名無しさん
NGNG0588デフォルトの名無しさん
NGNGその教科書に載ってるほうの言語の概略キボンヌ。
いや漏れもパソコンgoogleが壊れてて....(←謎)
0589デフォルトの名無しさん
NGNG0590デフォルトの名無しさん
NGNG0591デフォルトの名無しさん
NGNG0592デフォルトの名無しさん
NGNGラベルが付いてないgotoでもあるのか?
0593デフォルトの名無しさん
NGNG昔のベーシックは行番号で指定していたよ
0594デフォルトの名無しさん
NGNG不慮の事態で途中から始まってもある程度制御できるようなシステムが望まれると思うぞ。
りんごは半分に切ってもりんごなのにビットマップはヘッダの1ビット壊れたら何かわからなくなるのは大きな欠点だ。
0595デフォルトの名無しさん
NGNG0596デフォルトの名無しさん
NGNG内部定義やnamed-letみたいな構文がないとしんどい
returnを明示的に書かせる言語だとさらにもしんどい
0597デフォルトの名無しさん
NGNGwhile(true)
{
while(true)
{
//ゴボウ抜きbreak;
unlimited break;
}
}
// ここまで一気に抜けてくる!
で、goto >>101;って言われる、と(w
0599デフォルトの名無しさん
NGNGreturnで済む罠。
0600デフォルトの名無しさん
NGNGそうなんだが、returnは関数で一個にしたいとか、whileの後にも処理したいとか
あるかな?って思ってサ。まぁ、基本的には要らん機能ではあるけどな(w
0601デフォルトの名無しさん
NGNGもちろん、そのように適切な基本的構文が備わっていることが前提だけどね
0602デフォルトの名無しさん
NGNG0603デフォルトの名無しさん
NGNG0604デフォルトの名無しさん
NGNGdouble break とかはいかが?
break(1);
break(2);
break(3);
で、
break == break(1);
0605デフォルトの名無しさん
NGNGそれは>>572で欠陥が指摘されたヨ。
0606デフォルトの名無しさん
NGNGCやその類似言語、Java、ましてや Delphi なんか使ってるとアホになるぞ
0607デフォルトの名無しさん
NGNGMLやその類似言語、Haskell、ましてや Lisp なんか使ってるとアホになるぞ
0608デフォルトの名無しさん
NGNGif( 0<val<10 )
みたいな判定式が書けると便利だろうな…。
0609デフォルトの名無しさん
NGNG(if (< 0 val 10)
...)
0610デフォルトの名無しさん
NGNGPython だと書けるよ。
0611デフォルトの名無しさん
NGNG}
Delphiでも似たようなことが出来るけれど、制限があって萎え(それでも使ってるけれど
0612デフォルトの名無しさん
NGNGval が実数でも大丈夫なの?
0613デフォルトの名無しさん
NGNGforじゃ無いの? どういう動作なの?
0614デフォルトの名無しさん
NGNGruby崩れ文法ですか?
0615デフォルトの名無しさん
NGNGこういう例を見てると、改めて関数型言語の偉大さがわかるな。
柔軟性が高い。
0616デフォルトの名無しさん
NGNGlisp (scheme) は関数型じゃないんだが
0617デフォルトの名無しさん
NGNGたまに「関数型とは認めない」という人が現れるのは確かだけど、
一般的には関数型とされているよ。
0618デフォルトの名無しさん
NGNG0619デフォルトの名無しさん
NGNG関数型言語の「特色」と関係があるかどうかはともかくとして、
Schemeが一般的に関数型とされていて、>>574はSchemeである以上、
関数型とは関係あるわけだが。
手続き型では一般的に値とならないもの(ここでは継続)まで値となっている、
lambdaが使われている、などは関数型っぽい特色だと思うがな。
0620デフォルトの名無しさん
NGNG> 手続き型では一般的に値とならないもの(ここでは継続)まで値となっている、
それは関数型/手続き型とは関係無いわけだが
> lambdaが使われている、などは関数型っぽい特色だと思うがな。
それは関数型/手続き型とは関係無いわけだが
0621デフォルトの名無しさん
NGNG0622デフォルトの名無しさん
NGNG>それは関数型/手続き型とは関係無いわけだが
関数型の大雑把な特徴としては、式を計算して値を返すことによって
プログラムが進む。ここでは、様々なものが値として表現される。
手続き型はの大雑把な特徴としては、繰り返し構造や条件分岐を用いて
手続きが適用される。ここでは、一般に繰り返し構造や条件分岐が
関数として表現されず、結果、値として表現されることも少ない。
まあ普通の言語にはこうした双方の大雑把な特徴が混じってるわけで、
このように綺麗に分かれてるわけではないが、俺としては、
関数型の特色と関係があると言いたい。
0623デフォルトの名無しさん
NGNGあなたの脳内定義なぞに興味はありません
0624デフォルトの名無しさん
NGNG0625デフォルトの名無しさん
NGNG論理的に反論してください。
定義が違うといいたいなら、あなたの思う定義と比較して
何がどのように違うのか、なぜその定義が一般的だと思うのか
そうしたことを言うのが筋だろう。
そうでなければ有効な反論にならない。
0626デフォルトの名無しさん
NGNG必死だな
0627デフォルトの名無しさん
NGNGシンタックスシュガーで表そうとするのが手続き型の特徴だよな。
そうしたものは、同等のものが関数で表せるし、さらにその関数が
値として扱えるから、関数型は柔軟なのだと思う。
0628デフォルトの名無しさん
NGNGなんか矛盾してないか?
0629デフォルトの名無しさん
NGNGこのスレがクソ文法養成所になってる事実からもそれがわかる。
0630デフォルトの名無しさん
NGNG端的にいうならば、「副作用」
0631デフォルトの名無しさん
NGNGまあ関数型言語にも一応シンタックスシュガーはあるけどね。
関数で代用することが多いな。
>>630
確かに副作用がないことは関数型の特徴の一つでもあると思うし、
その点では確かにSchemeは型に結構近い気がする。
しかし、やはり「値に関数を適用して計算する」というのも関数型の
大きな特徴であって、その意味でSchemeは関数型だと思うし、
>>574はその特徴が出ていると思う。
この後者があるからこそ前者が生きてくるという面もあるしな。
0632デフォルトの名無しさん
NGNG○ Schemeは手続き型に
0633デフォルトの名無しさん
NGNG副作用が無いもの(Haskell等):純粋な関数型言語
副作用があるもの(Scheme等):純粋でない関数型言語
と言われているんじゃないかと思う。
また脳内と言われてしまうかもしれないが。
0634デフォルトの名無しさん
NGNGなんで関数型とか手続き型とか出てくるわけ?
0635デフォルトの名無しさん
NGNG1 継続を値として扱い、関数の引数にしている。
2 call/ccの引数が無名関数である。
3 以上の二つの関数型に近いと思われる特徴により、機能が実現されている
4 したがって1、2により柔軟性が高まっていると考えられる
5 関数型の特徴は有用である
0636デフォルトの名無しさん
NGNG0637デフォルトの名無しさん
NGNGHaskell はよく知らないけど、
流石に入出力はできるっしょ?
再代入がない、というべきでは。
0638デフォルトの名無しさん
NGNG0639デフォルトの名無しさん
NGNGそうなのか。それは知らなかったな。
しかし、構文糖を使っていても、>>574の例が
関数型の特徴を使っていることにかわりはない
と思う。
ただ、下手に構文糖を乱用すると柔軟性が下がったり
仕様が肥大化する恐れがあるというだけだな。
>>637
入出力はあるけど、モナドという特徴によって実現されているため
副作用が出ないらしい。俺も詳しくは知らないが。
0640デフォルトの名無しさん
NGNG>>633
こういう見方もある。
副作用が無いもの(Haskell等):洗練された関数型言語
副作用があるもの(Scheme等):昔ながらの関数型言語
正確には副作用が無いわけじゃなくて、隔離してると言った方が正しい。
0641デフォルトの名無しさん
NGNG多分、それはあまり関係ないだろう。
ただ、継続が関数の引数に渡されているところが
関数型っぽい。
0642デフォルトの名無しさん
NGNG継続を保持するのは代入や「状態」を持つ事にならんの?
0643デフォルトの名無しさん
NGNG0644デフォルトの名無しさん
NGNG0645デフォルトの名無しさん
NGNG0646デフォルトの名無しさん
NGNG0647デフォルトの名無しさん
NGNG0648デフォルトの名無しさん
NGNG> ただ、下手に構文糖を乱用すると柔軟性が下がったり
> 仕様が肥大化する恐れがあるというだけだな。
構文糖衣は仕様を最小限にするためのものだよ
表現方法の多様性が増えるだけで柔軟性が下がるわけでもないし
0649デフォルトの名無しさん
NGNG0650デフォルトの名無しさん
NGNGそういう見方もあるね。
>正確には副作用が無いわけじゃなくて、隔離してると言った方が正しい。
よく見るHaskellの解説では、単なる隔離にとどまらず、
(少なくともHaskellの世界内では)完全に純粋な関数
であると主張してるように見えるが?
残念ながらこの点に関して詳しくは知らないので議論は
出来ないが。
あと、継続の中味自体が関数型であろうがなかろうが、他の部分(
継続が引数になってるところや、関数が関数の引数になってるところなど
)が関数型的だと思う。
0651デフォルトの名無しさん
NGNGいや、下手に乱用すると柔軟性がなくなったり、仕様が肥大化する。
今回のifやfor、switchなんかはその例。
おかげで、脱出が柔軟でなくなってるわけ。
0652デフォルトの名無しさん
NGNG帰ってくるし、値もあるよ
0653デフォルトの名無しさん
NGNG言語仕様を関数でなく構文糖に頼る→下手にやると柔軟性が失われる恐れがある
0654デフォルトの名無しさん
NGNG(break) という式に値はないだろ?
関数じゃないというのはそういう意味
0655デフォルトの名無しさん
NGNG純粋な関数型なら副作用がないから式があれば関数の実行順序によらず
結果は同じになるときいたけど。
でも継続は思いっきり実行の「手続き順序」を変える仕組みに見える。
0656デフォルトの名無しさん
NGNG関数への引数として関数を渡すことにこだわっているけど、
手続き型の権化ともいえる C 言語にも関数ポインタという形で関数を値として持てるよ。
正確には関数の場所を示す値だし、関数型でいうところの「関数」とは意味が違うが、
副作用をもたないような関数であれば、本質的には関数型でいう「関数」と違いはない。
0657デフォルトの名無しさん
NGNGでも、継続が関数の引数に渡せなかったら、もしくは、
call/ccの引数が関数じゃなかったら、ああいう
実現の仕方には少なくともならないわけで、確かに
そういった関数型の特徴を使ってると思うよ。
関数型で無い特徴も使っているかもしれないけどね。
0658デフォルトの名無しさん
NGNG状態の保持は副作用とは繋がらない
0659デフォルトの名無しさん
NGNGだから、C言語のそうした特長は関数型に近いと思うよ。
手続き型と言われている言語にも関数型の特徴はあるし、
Schemeにも手続き型の特徴はある。
ほとんどの言語は手続き型的な特徴と関数型的な特徴が
混じってる。
でも、高階関数はたしかに関数型的な特徴というべきだと思う。
一般的にはそういわれている。
0660デフォルトの名無しさん
NGNG(break)は空リストが返る
0661デフォルトの名無しさん
NGNG継続を関数の形として呼び出せる。
ゆえに関数型。
0662デフォルトの名無しさん
NGNG0663デフォルトの名無しさん
NGNGアドレスを関数の形として call できる。
ゆえに関数型。
0664デフォルトの名無しさん
NGNG0665デフォルトの名無しさん
NGNG0666デフォルトの名無しさん
NGNGただ、脱出プロシージャにパッケージ化されていて、
それは関数として扱える。
だから関数の形として呼べるし、値としても扱える。
0667デフォルトの名無しさん
NGNG良いだろう。
0668デフォルトの名無しさん
NGNG特にLispのように両者の特徴を兼ね備えた言語の場合は、どちらであるか、を議論することに意味はない。
0669デフォルトの名無しさん
NGNG関数型や手続き型という分類が今日まで生き残ってる
のは、この分類にそれなりに大きな使い出がある証拠だろう。
Lisp全体がどちらかというのは、幾分か意味が少ないかもしれないが、
Lispの個々の機能については、これは関数型的であってこれは手続き
型的だと分類するのは意味のあることだろう。
0670デフォルトの名無しさん
NGNG関数型、手続き型、オブジェクト指向、と入り乱れている。
歴史的理由と、保守してきた奴等のいいかげんな妥協の産物。
関数型の洗練度に順位を付けるなら、
ConcurrentCleanやHaskell>>>>ML>>Scheme>>LISP>>C
かな。
左に向かうにつれて、手続き型の考えが通用しなくなる。
0671デフォルトの名無しさん
NGNGそのぶん、複雑怪奇なソースになりやすいという副作用はある。
かわりにシンタックスシュガーを追加する方法も、その副作用を
防ぐ意味では悪くないと思う。
0672デフォルトの名無しさん
NGNG別に両方の性質を持っていても構わないようなものだと思う。
副作用を利用してでも手続き通りに命令を並べていくのが手続型言語で、
ラムダ式とかクロージャとか高階関数とかカリー化とか、
動的に関数を扱えて、その機能を容易かつ有効に利用できるのが関数型言語、
という分類でいいと思う。
副作用云々は確かに関数型にとって重要な話ではあるけど、
それは手続型言語か否かを測る目安であって、
関数型言語であるかを測る目安にはならないと思う。
だって、副作用云々は論理型言語にも重要だよ?
0673デフォルトの名無しさん
NGNG0674デフォルトの名無しさん
NGNG> それは手続型言語か否かを測る目安であって、
> 関数型言語であるかを測る目安にはならないと思う。
逆でしょ
副作用があると function はありえずに procedure となってしまうが、
副作用がないと function でも procedure でも好きに呼ぶことができる。
0675デフォルトの名無しさん
NGNG両方の性質を持ちうるけど、一方を追求すればもう一方は消えてくる、と。
関数型、という名前の持つ意味としては、
副作用よりも関数を動的に扱う事を強調してると思う。
もちろん、関数型である事を追求するためには
副作用は排除する方向に行くんだろうけど。
論理型言語も副作用はなるべく避けたいわけで、
副作用だけで関数型言語か否かを測ってたら、
論理型言語と関数型言語の区別が付かなくなる。
0676デフォルトの名無しさん
NGNG> 1 継続を値として扱い、関数の引数にしている。
全然関数型固有の特徴じゃない。
どんな構文でも値を持つってのは、FORTHとかBoune shellでもいえる。
0677デフォルトの名無しさん
NGNG副作用頼らずに組めるとか、そういう program 最適化するとかが、 FPL に要求される点、特微になる点だと思う。
関数呼び出しの形で記述すること自体は、手続き呼び出しの形と、あんまり区別つかなそうな気がする。
高階関数は重要だと思うけど、もう珍しい機能じゃないから、あんまり特微って感じがしない…
無名関数は、便利だし C とかにはないけど、むしろ動的にいろいろできる言語の特微な気がする。
perl でも無名手続き作ったりできるけど、あんまり関数型っぽくないし…
継続を副作用とかじゃなくて引数として渡してる、って点は関数型っぽいかな…
関数との interface は引数と返り値だけ、っていう点で。
継続を global variable に保持しとく…とかのやりかたも、手続き型なら選択肢の一つになりそうだし。
0678デフォルトの名無しさん
NGNGこういった、脂溶まっ節にうるさい奴で、いい言語書いた奴はいない。
問題は、論理的に綺麗かどうかではなく、マ達に使われるかどうかだ。
0679デフォルトの名無しさん
NGNGaction:
add.shine=1;
response:
obj shine;
}
class obj main(obj null){
obj unko();
obj kuso=950;
obj print(obj unko(kuso));
}
0680デフォルトの名無しさん
NGNGfor (;_;)//~~
{
}
0681デフォルトの名無しさん
NGNG関数型言語以外で任意の継続が値(関数オブジェクト)で
表せるものがあったら教えて欲しい。
>>677
それは、関数型プログラミングの有効性の一つではあるけれども、
一般的には関数型言語にそこまで要求されているわけではない。
言語仕様として副作用を備えている言語でも関数型言語と
呼ばれているのは事実。
だから、もっとゆるい条件であるのは確実だと思う。
やはり、高階関数や、カリー化などといったものも総合して
どれだけ関数型的な機能を備えているかだろう。
関数型的とは、究極的には「関数が式を計算して値を返す」
ということだと思う。
こうした側面を持つ言語は手続き型にも多いけど、それは、
「関数型的な側面もあわせ持っている」というだけのことだ
と思う。
FORTHは良く知らないが、あなたの言っていることから推測すると
関数型に近い側面を少しは持つ言語と思われる。
0682デフォルトの名無しさん
NGNG> >>676
> 関数型言語以外で任意の継続が値(関数オブジェクト)で
継続の話はしてない。
0683デフォルトの名無しさん
NGNG>>635は継続がファーストクラスオブジェクトであるという
話をしている。
>>676が継続の話をしていないというのであれば、>>676
の反論は的外れだと思う。
0684デフォルトの名無しさん
NGNGRubyにもあったぞ。
0685デフォルトの名無しさん
NGNGRubyは関数型の特徴を大幅に取り込んでる。
オブジェクト指向の特徴の方を強調したいから作者がオブジェクト
指向型と言ってるだけだろ。
第一、継続があれば関数型だという単純な話ではなくて、
継続がオブジェクトで、「関数が式を計算して値を返す」のプロセス
に取り込まれているところが関数型だという話だ。
0686デフォルトの名無しさん
NGNGgotoや、Cのsetjump/longjumpと本質は同じ。
インターフェースという表面的な部分だけ見て本質を考えずに
関数型に結び付けようとしているヒトがいるみたいだけど。
0687デフォルトの名無しさん
NGNGつうか、手続き型と関数型の違いって、インターフェイス(
プログラミングスタイルや、表現の仕方)の違いだと思うが?
むしろ、この違いを語るとき、インターフェイスが本質であって
実現している機能は本質ではない。
インターフェイスは本質かどうかはおいておいても、
関数型チックとも言うべきインターフェイスによって、
柔軟性がもたらされているのは事実だろう。
0688デフォルトの名無しさん
NGNG0689デフォルトの名無しさん
NGNG0690デフォルトの名無しさん
NGNG関数型の特徴はモノをいれると別のモノに変換する函を使ったプログラム、同じものを入れれば必ず同じものが出てくる、それ以外に機能が無いというのが特徴という普通の考え方が最もそれらしいと思う。
関数型等の非手続き型の言語は時系列が基本的に存在しない事(と思う)、少なくとも純粋に関数型を考えるならば、実行順所は決めるべきでないと思う、
当然手の込んだライブラリーを作ったりモナドとかで時系列を無理やり作り出さないと入出力等の時間的な順序が問題になる物が実現できない。
それが嫌なら、副作用を入れて妥協するしかないのだと思う。妥協しないとHaskellみたいになるんだと思う。
副作用等を持っていても、ポリシーが関数型でプログラムをしたいと考えて、その中での妥協なら
それは関数型言語といってもよいと思う。lispが関数型で無いという人はいないと思うし。
0691デフォルトの名無しさん
NGNG(1+1)*2と1+1*2の答えが違うように、関数型にも実行順序はあるでしょう。
0692デフォルトの名無しさん
NGNG実行順序どころか、それはすでに別の関数だとおもう。
0693デフォルトの名無しさん
NGNG計算の実行の順番が違うから別の関数なんでしょう?
0694デフォルトの名無しさん
NGNGちょっと絶句しそうです(汗
0695デフォルトの名無しさん
NGNG1*2 + 2*3は +の左右の順番は必要じゃない。
0696デフォルトの名無しさん
NGNGとりあえず、>>574 の while のところは関数型じゃないということでヨロシク
0697デフォルトの名無しさん
NGNG0698デフォルトの名無しさん
NGNG0699デフォルトの名無しさん
NGNGbegin (progn) も関数型でない。
0700デフォルトの名無しさん
NGNGConcurrent Cleanのwhileは関数型じゃないんだね?
0701デフォルトの名無しさん
NGNGwhile :: Monad m => m Bool -> m a -> m ()
while t s = do b <- t
if(b)
then do { s; while t s; return () }
else do { return () }
0702デフォルトの名無しさん
NGNGスマソ。知らネ。ref ぷりーづ。
0703デフォルトの名無しさん
NGNGwhile :: Monad m => m Bool -> m a -> m ()
while t s = do b <- t
if(b)
then do { s; while t s; return () }
else do { return () }
0704デフォルトの名無しさん
NGNGhttp://sky.zero.ad.jp/~zaa54437/programming/clean/CleanBook/appendices/appendix-B.html
>while :: !(a -> .Bool) (a -> a) a -> a // while (p x) f (f x)
0705デフォルトの名無しさん
NGNG(5+6)*(7+8)
これについて
15=(7+8)
11=(5+6)
26=15+11
でも
11=(5+6)
15=(7+8)
26=15+11
でもかまわないと言うこと、整数ではなく印刷入りの関数をいれてみろ、結果が変わるのが手続き型、変わらないのが関数型。
0706デフォルトの名無しさん
NGNG>>703 モナを使えば副作用も継続もなんもかんも表現できるので世界はすべて関数型ということで。
とりあえず関数型の定義まで戻ってその定義に従ってどうかというように論じないとなんとも。
0707デフォルトの名無しさん
NGNGだから、その場合、11と15のどちらを先に計算するかの順番はいらないが、
15+11の前に11を計算しておかないと計算できないから、そうの順番は
いる。
0708デフォルトの名無しさん
NGNG必死だな(w
whileは関数型
0709デフォルトの名無しさん
NGNG>>574のwhileが関数型だろうが、そうでなかろうが、
話の本質には関係ないと思うが。
0710デフォルトの名無しさん
NGNG例えば遅延評価で、11+15を使わないとしたら?
それは実行されないだろ。
無いんだよ。
0711デフォルトの名無しさん
NGNG>>574には副作用は出てこないが。
0712デフォルトの名無しさん
NGNGその時は順番は必要ないが、使うときは必要になる。
遅延評価は計算が必要になるまで計算しないというだけのことで、
計算が必要になる場合が存在する以上、順番は必要なんだよ。
0713デフォルトの名無しさん
NGNGそのかわり while には意味がない
0714デフォルトの名無しさん
NGNG0715デフォルトの名無しさん
NGNG0716デフォルトの名無しさん
NGNG気に入らないんだったら末尾再帰にでも置き換えて考えろ。
0717デフォルトの名無しさん
NGNGschemeでスマートに繰り返しを書くなら、
named-letなどを使う。
あそこでwhileを使ったのは>>571に対する説明としてわかりやすく
記述した程度の意味しかないと思う。
0718デフォルトの名無しさん
NGNG仮にあのwhileがschemeでmonadを巧妙にエミュレートして
作られたものだったら、副作用は無いと思うが、
後半は同意。
結局どうでもいい。
0719デフォルトの名無しさん
NGNG0720デフォルトの名無しさん
NGNG0721デフォルトの名無しさん
NGNG0722デフォルトの名無しさん
NGNG0723デフォルトの名無しさん
NGNGmonadによって副作用なしにエミュレートされた副作用は、関数型には
副作用がないというときの副作用とは一致しないが、意味的な概念は
同じであろう。
0724デフォルトの名無しさん
NGNG0725デフォルトの名無しさん
NGNG大域脱出は副作用じゃないよ
0726デフォルトの名無しさん
NGNG(define-macro (while test . body)
(let ((loop (gensym))) ;hygienic symbol
`(let ,loop ()
(cond
(,test ,@body (,loop))))))
0727デフォルトの名無しさん
NGNGならすべてのプログラム言語の機能は関数型の機能だな。
0728デフォルトの名無しさん
NGNGつーか、昔Churchが既に形式化してるわけで
0729デフォルトの名無しさん
NGNGというぐらいナンセンス。
0730デフォルトの名無しさん
NGNG0731デフォルトの名無しさん
NGNG注目はね。
実用上はどうだろう。
みんな使ってる?
0732デフォルトの名無しさん
NGNGところで話題を変えて、
自作関数型スクリプト言語を作るとして、関数型プログラミングに必要な
最小限度の機能とはなんでしょうか?
教えて下さいです……。
0733デフォルトの名無しさん
NGNGMLやSchemeみたいな正格言語なら、
レキシカルクロージャと末尾再帰のループ展開があれば
それっぽくなると思うよ。
0734デフォルトの名無しさん
NGNGやっぱりクロージャと末尾再帰最適化は必要ですか。
‥‥‥‥だよな(´・ω・`)。
0735デフォルトの名無しさん
NGNG最後はwhileにケチを付け出したか。(w
0736デフォルトの名無しさん
NGNG関数型でいう「関数」って、 C とかの関数より、数学の関数に近いと思うけどな。
結果は引数にのみ依存する、っていう。
>>734
あと遅延評価が入ると、ぐっと関数型っぽくなりそうな気がする。
>>735
だって、あれって FPL の柔軟性っていうより、 Lisp や Scheme の柔軟性っぽいんだもん。
0737デフォルトの名無しさん
NGNG確かに「純粋な」関数の定義はそうだが、その定義では
Schemeは関数型では無い。
しかし、実際はSchemeも関数型と呼ぶ。
まあ、君の脳内定義には興味ありません。(w
>>574の柔軟性の特徴は
継続 : Scheme、SML/NJ、Clean、(Ruby)
ラムダ抽象 : Scheme、Clean、Haskellほか多数
どちらもFPL的な特徴ですな。
他の関数型には無いSchemeやLispの柔軟性というと、
プログラムをデータのように扱ったものを思い浮か
べる。
(eval (list (car '(+ 1 2)) '1 '1))
0738デフォルトの名無しさん
NGNGことだと思うな。
関数型プログラムってのは数学的に純粋な関数だけで記述されたプログラムの
ことだと思うな。
だから、たとえ Scheme で書かれていても副作用を使っているプログラムを
関数型だと認めたくはないな。
そして、継続も while も数学的に純粋な関数ではないから、あのプログラムを
関数型だと認めたくはないな。
0739デフォルトの名無しさん
NGNG関数プログラミング的な概念でもあるが、「それがなければ
関数型言語と呼べない」というものでもないってことだな。
ある程度それに近ければ、すなわち、インターフェースが
似ているならば、関数型言語と呼んで構わない。
その周辺機能を関数型言語的な特徴と呼んで構わないって
ことだと思う。
0740デフォルトの名無しさん
NGNG認めたくないのは君の勝手だけど、他人とコミニュケーション
を取る場合は一般的な呼び方に従おうや。
それから、継続もwhileも数学的に純粋だが。(w
0741デフォルトの名無しさん
NGNG0742デフォルトの名無しさん
NGNG0743デフォルトの名無しさん
NGNG形になっているところなど、そうしたインターフェイスが
違うのが大きな原因かな。
おそらくラムダ抽象とかカリー化とかもないと思う。
pythonはlambdaがあったような気はするけど。
0744デフォルトの名無しさん
NGNG備えているかもしれないが、オブジェクト指向や
スクリプト言語であることのほうを強調したいようだ。
昔は違ったということで、歴史的な理由もあるかもしれない。
0745デフォルトの名無しさん
NGNGになってるな。
そういう議論はバッカスの論文くらい読んでからにしてほしい。
っていうかお前ら関数型言語スレに帰ってください。
0746デフォルトの名無しさん
NGNG0748デフォルトの名無しさん
NGNGこのスレに関数型言語スレの住人なんていないと思われ。
0749デフォルトの名無しさん
NGNGつっても欠陥だらけで終わってるからな。
実装して使ってから公開しろっての。
0750デフォルトの名無しさん
NGNGインターフェイスの意味にもよると思うな、
C言語は文法は関数みたいな形をしているがあれを関数型とかいったらどうかね、
これは違うよなって気がしないか?
0752デフォルトの名無しさん
NGNG継続が見当たりません。どこにのってるんでしょうか?
0753デフォルトの名無しさん
NGNGしかし、Schemeが関数型言語ではないと言ってくる奴には困ったな。
自己満足なら世間とずれた定義でも結構だが、その定義で他人の使い方に
文句言うなよ。
>>745
別に、バッカスの論文なんか読まなくても、一般に関数型言語と
呼ばれている言語が関数型言語だよ。(w
そうならない定義は少数派の定義だから、議論で使うべきでない。
>>752
Cleanに継続は無いかもしれないね。>>737は俺の勘違い。スマソ。
monadは副作用を隔離しただけで無くなっていないと言ってる人、
関数型には順番が一切無いと言ってる人、継続があると関数型
ではないと言ってる人など、間違えてる人は結構いたな。
まあ一人か二人の同一人物だろうけどな。
昔、Haskellスレにもこういう人はいた。
0754デフォルトの名無しさん
NGNG読んでないんだ‥‥‥‥。
0755デフォルトの名無しさん
NGNGnon-strict な言語で継続がどう動くのか興味があったのですが、残念です。
non-strict な言語で継続がどう動くのかまったく想像できないんですが、
どなたかご存知ありませんか?
0756デフォルトの名無しさん
NGNG0757デフォルトの名無しさん
NGNGこれじゃ、流行らん和なぁ〜(関数肩
0758753
NGNG読んでないよ。
>>755
継続というものをだいぶ誤解してるようだね。
たしか、「関数型プログラミング」という本では
Goferで継続がどう働くか解説していたはず。
0759753
NGNG記憶があやふやでスマソ。
0760デフォルトの名無しさん
NGNG脳内定義で話をしていることを自ら暴露してるYO
0761753
NGNG「世間に従った定義」という'脳内定義'を使ってるのは確かだ。(w
他人と話をするときは、「世間に従った定義」を使わなくてはいけない。
例えば、世間で言う「手」を、脳内では「足」と定義している人がいたと
する。
「人間は普通、足で歩く」と言っている人に向かって「人間は普通、手で
歩いているぞ」と文句を言うのは的外れだ。
「Schemeは関数型言語じゃないぞ」と文句を言うのもその類。
0762753
NGNG○ 世間で言う「足」を、脳内では「手」
0763デフォルトの名無しさん
NGNG面白くないから帰っていいよ。スレ違い。
0764デフォルトの名無しさん
NGNG0765デフォルトの名無しさん
NGNG似た題名として、「関数プログラミング」だと、
手元に2種類(武市先生の翻訳と萩谷先生の)あったのですが、
継続についての記述は見当たりません。探し方が悪いのかもしれませんが。
「プログラミング言語」は手元になく、調べられませんでした。
Web に解説はないものでしょうか?
0766デフォルトの名無しさん
NGNG数学の世界ではなく、国語の世界だから。
0767デフォルトの名無しさん
NGNG本になっているということはきっと元ネタの論文が
どこかにあるのだと思うのですが。
non-strict な言語における Scheme の call/cc のような継続について、
どなたかご存知でしたらご教示ください。
0768デフォルトの名無しさん
NGNG0769デフォルトの名無しさん
NGNGたぶんこの本じゃないの?
コンピュータ・サイエンス研究書シリーズ(17)
関数型プログラミング
PETER HENDERSON 著 杉藤芳雄・二木厚吉 訳
1985年 日本コンピュータ協会 出版
これの9章〜10章で継続使ってるみたいだけど。
0770デフォルトの名無しさん
NGNGStrachey, C. and Wadsworth, C. P. (1974),
Continuations, A Mathematical Semantics for Handling Full Jumps,
Technical Monograph PRG-11, Oxford Universuty Computing Laboratory.
Raynolds, J. C.(1972),
Definitional Interpreters for Higher-Order Programming Languages,
Proc. ACM Annual Conference.
0771753
NGNG「プログラミング言語 / 竹市正人」だったようだ。
goferはhaskellと非常に良く似ているので、読む価値はあると思う。
それから、monadによる実装でよければ
http://citeseer.nj.nec.com/wadler92comprehending.html
の7.4に書いてあるようだけど。
8.2にも例がある。
これは、見た感じ、ラムダ計算っぽいnon-strictな言語だと思うが
この論文は読んでないので、的外れなこと言っていたらスマソ。
0772753
NGNG数学の話でも(数学の話をする時の)世間一般の意味に従わなくては
ならないと思うが。
プログラミングの話でも(プログラミングの話をする時の)世間一般の意味に
従うのが常識だが。
そもそも、世間一般の意味に従ったであろう発言に対して、
少数派の定義に基づいて反論したところで、意味がない。
どちらの意見も、定義を変えれば正しいという状態になるだけ。
0773デフォルトの名無しさん
NGNG0774デフォルトの名無しさん
NGNGmonad による実装はその monad を使って記述された範囲内でしか使えないので
意図しているものとは違います。
monad をつかって副作用を実装しても本当は副作用が無いように、
monad をつかって継続を実装しても本当は継続ではないと理解しています。
私が意図しているのは、Scheme のようにいつでもどこでも使える
言語組み込みの本物の継続です。
Gofer というのはよく知らないのですが、
Haskell と違って言語に組み込みの継続があるのでしょうか?
あと、本のほうは手元に無いのですぐには参照できないのですが、
もし本に参考文献として論文があげられていたら教えていただけないでしょうか。
0775デフォルトの名無しさん
NGNG専門スレでしる!
0776直リン
NGNG0777デフォルトの名無しさん
NGNGschemeの継続呼び出し(call/cc)はCPSの構文糖
0778デフォルトの名無しさん
NGNGマクロで定義できるのならぜひやり方を教えてください。
0779デフォルトの名無しさん
NGNG継続についてはマクロみたいな局所的な変換じゃ無理。
継続適用部分全体をCPSへ置き換えないと。
0780753
NGNGいや、goferを使って、継続を実装しているだけ。
goferやhaskellはIOに継続のスタイルが使われていると
聞いたことがあるけど、これもあなたの意図したものとは
違うかもしれない。
ただ、調べてみる価値はあるかも。
それから、
>monad をつかって副作用を実装しても本当は副作用が無いように、
>monad をつかって継続を実装しても本当は継続ではないと理解しています。
上の論文は確かにmonadを使って継続を実装しているけど、
non-strictな言語の継続を実装していれば、もちろん
問題無いと思う。
読んでないから、その辺どうだかはわから無いけど。
あと、多分勘違いしてると思うけど、
monadをつかって副作用を実装しているように、
継続をつかって制御を実装しているわけ。
non-strictな言語の場合でも評価順序はあるわけで、
理屈としては継続があることになる。
0781デフォルトの名無しさん
NGNGgofer にも組み込みの継続はありませんか。残念です。
non-strict な言語の継続を実装していればというのですが、
その non-strict な言語の継続というもの自体を知りたいので、
monad ではなくて言語自体に入っているものが知りたいのです。
論文を読んでもそれが non-strict な言語の継続かどうか
わからないかもしれないですし。
理屈としては継続があるというのはそうかもしれないのですが、
私には想像できないので具体的な実装例を見たいのです。
Clean も Haskell も gofer もないということですが、
そういうものは存在しないのでしょうか?
0782753
NGNG今検索したら、
http://www.namikilab.tuat.ac.jp/~sasada/prog/rucheme.html
これが、その実装らしい。
4/30の日記に遅延評価にしたとの記述があるので。
0783デフォルトの名無しさん
NGNGttp://www.namikilab.tuat.ac.jp/~sasada/prog/rucheme003.lzh
というのをダウンロードしたのですが、遅延評価は入っていないようです。
あと、ドキュメントの continuation のところに
「できないかもしれません」と書いてあってぜんぜん信用できないのですが。
0784753
NGNG>遅延評価は入っていないようです。
ほんとに?何で断言できるの?
ていうか、4/30の日記をちゃんと見た?
まあ、Schemeはdelayとforceで遅延評価実現できるので、
全ての関数にdelayとforceが使われているSchemeを想像すれば
なんとなくわかるのではないかと思う。
0785デフォルトの名無しさん
NGNG一番新しいものでも 3月21日だったので。
0786デフォルトの名無しさん
NGNG0787デフォルトの名無しさん
NGNG0788デフォルトの名無しさん
NGNG0789デフォルトの名無しさん
NGNG0790デフォルトの名無しさん
NGNG大変だね頑張ってね(藁
0791デフォルトの名無しさん
NGNGこれはけっこう新しいと思うので、スレ違いというのはご容赦ください。
もし、そんなのはぜんぜん新しくないという方がいらっしゃいましたら、
ぜひ文献や実装を教えていただけるようお願いします。
0792デフォルトの名無しさん
NGNG評価順序というのは簡約戦略によって決まるわけですが、
たとえば、strict な言語ならだいたい最左最内戦略で、
これは内側から正規形にしていくわけです。
そうすると、ある時点の継続は処理が終わっていない外側の部分だと
いうのは納得できます。
でも、最左戦略で non-strict とすると、だいたい外側から試していくわけで、
継続という処理が終わっていない部分は内側のように思えますが、
そうなんでしょうか?
また、Scheme で継続を呼び出すときは値をひとつ渡すわけですが、
上記のように内側の部分を継続とすると、
継続を呼び出したときに与える値はどこにはまるんでしょうか?
Clean の簡約戦略は関数型簡約戦略だそうですが、これだとどうなんでしょう?
また、仮にランダムに redex を選ぶような戦略を想定するとどうなるんでしょう?
0793デフォルトの名無しさん
NGNG(仮に non-strict な言語でも継続は項の外側の部分を示すとして、
継続はひとつの値をわたして呼び出せると仮定します)
継続を呼び出すと、呼び出した側が与えた継続を破棄するわけです。
たとえば、771 に出ている論文の callcc の定義では受け取った k' を
呼び出すところがありません。
これを TRS で考えbトみると、ある血p続を呼び出しbス時点での暗黙bフ継続、
bツまり、redex bニして選ばれた血p続呼び出しの滑O側の部分を
いきなり消してしまうことに対応します。
でも、こんな操作は書き換え規則では単純にはかけませんし、
仮に無理に書いたとすると、合流性が崩れて、参照透明性が壊れるように思います。
たとえば、Scheme ですが、(call/cc (lambda (k) (cons (k 1) (k 2))))
というのを考えると、これは引数の評価順序によって結果が変わるのですが、
これは上記の合流性が成り立っていない例になっています。
784 によればすべての関数に delay と force を使った Scheme を
想像すればよいとのことですが、上の例に delay と force を入れると、
Haskell や Clean のように、
合流性や参照透明性が保たれるようになるんでしょうか?
0794753
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1047970129/317-318
こっちで答えておいた。
0795753
NGNG関数型言語Part3
http://pc2.2ch.net/test/read.cgi/tech/1037527388/317-318
0796デフォルトの名無しさん
NGNG> これはけっこう新しいと思うので、スレ違いというのはご容赦ください。
新しいと思うけど、文法じゃないんだけど。スレ違いだと分かってるんだったら
関数型言語のスレに帰ってください。ネタスレなのに…。
お帰りはこちら http://pc2.2ch.net/test/read.cgi/tech/1037527388/
なんで関数型言語使う人ってウンチク好きなの?場違いな場所でやるのウザイ。
0797デフォルトの名無しさん
NGNG関係演算子の数珠つなぎ a <= b < c == d
0798デフォルトの名無しさん
NGNG激しくガイシュツ。
0799デフォルトの名無しさん
NGNG>>608
0800デフォルトの名無しさん
NGNG0801デフォルトの名無しさん
NGNG>>574から関数型言語スレになりました
0802デフォルトの名無しさん
NGNGでも、 >>609 だと < と == みたいな、別の演算子の混在はできないよね。
こういうのも簡潔に書けたら便利かも。
0803デフォルトの名無しさん
NGNG>>610
$ python -c 'if 1<2<2: print("yes")'; python -c 'if 1<2<=2: print("YES")';
YES
$
0804デフォルトの名無しさん
NGNG頭悪そう。
0805デフォルトの名無しさん
NGNGなんか、こう、自然と顔がニヤけてくるような面白さ
0806デフォルトの名無しさん
NGNG0807デフォルトの名無しさん
NGNG記述がすっきりするというのはいい事だよね。
C の bool の式として簡潔かつあいまいさや矛盾なく綺麗に拡張できる方法はないもんですかね。
そこのところだけ文法を変えるというのをやっみたが、あんまり気持ちよくないので・・・
ちなみにこんな感じ
bool flag = bool_exp{ {a} < {b} == {c} } ;
bool_expの中では < その他は区切り文字として取り扱い。
が、しかし中に式が入らなくて、苦肉の策はものすごくかっこ悪い。
考えれば考えるほど自分用のトランスレータに入れたくなってきた。
0808デフォルトの名無しさん
NGNG(define-syntax and<
(syntax-rules ()
((_) #f)
((_ a) a)
((_ a b) (and (< a b) b))
((_ a b c) (and (< a b) (and< b c)))
((_ a b c ...) (and (< a b) (and< b c ...)))))
(define-syntax and<=
(syntax-rules ()
((_) #f)
((_ a) a)
((_ a b) (and (<= a b) b))
((_ a b c) (and (<= a b) (and<= b c)))
((_ a b c ...) (and (<= a b) (and<= b c ...)))))
(define-syntax and=
(syntax-rules ()
((_) #f)
((_ a) a)
((_ a b) (and (= a b) b))
((_ a b c) (and (= a b) (and= b c)))
((_ a b c ...) (and (= a b) (and= b c ...)))))
(and<= a (and< b (and= c d)))
0809デフォルトの名無しさん
NGNG0810デフォルトの名無しさん
NGNG(syntax-rules ()
((_ a x b) (x a b))
((_ a x1 b x2 c ...) (and (x1 a b) (: b x2 c ...)))))
(? a < b = c)
0811810
NGNG0812デフォルトの名無しさん
NGNG副作用無ければ問題無いけど
0813デフォルトの名無しさん
NGNG0814デフォルトの名無しさん
NGNGclass ___Comp
{
private:
const LEFT& left;
bool res;
public:
explicit ___Comp(const LEFT& left) :
left(left), res(static_cast<bool>(left)) { }
___Comp(const LEFT& left, bool res) :
left(left), res(res) { }
operator bool() {
return res;
}
template <typename RIGHT>
___Comp<RIGHT> operator==(const RIGHT& right) {
return ___Comp<RIGHT>(right, left == right);
}
template <typename RIGHT>
___Comp<RIGHT> operator!=(const RIGHT& right) {
return ___Comp<RIGHT>(right, left != right);
}
0815デフォルトの名無しさん
NGNGtemplate <typename RIGHT>
___Comp<RIGHT> operator<=(const RIGHT& right) {
return ___Comp<RIGHT>(right, left <= right);
}
template <typename RIGHT>
___Comp<RIGHT> operator>=(const RIGHT& right) {
return ___Comp<RIGHT>(right, left >= right);
}
template <typename RIGHT>
___Comp<RIGHT> operator<(const RIGHT& right) {
return ___Comp<RIGHT>(right, left < right);
}
template <typename RIGHT>
___Comp<RIGHT> operator>(const RIGHT& right) {
return ___Comp<RIGHT>(right, left > right);
}
};
template <typename TYPE>
___Comp<TYPE> Comp(const TYPE& value) {
return ___Comp<TYPE>(value);
}
0816デフォルトの名無しさん
NGNG#include "bool.h"
using namespace std;
int main()
{
if(Comp(1) < 3 < 3) {
cout << "1 < 3 < 3" << endl;
}
if(Comp(1) < 3 <= 3) {
cout << "1 < 3 <= 3" << endl;
}
}
まだショートサーキットを組み込んでないけど、とりあえず。
0817デフォルトの名無しさん
NGNGそして、それでショートサーキットも解決、と。
true の時だけ比較すればいい。
0818デフォルトの名無しさん
NGNGpython にはあったんだ…知らなかった。
>>810
あ、それいい…
中置記法そのまま持ってきちゃえばよかったんだね。
0819デフォルトの名無しさん
NGNG結構いい線いけますね、それでも最初の型変換と計算中だけ型違いというのはなんとも気持ちが悪い、
テンプレートだけだとこの辺が限界かとは思うけど、新規の文法導入でもうちょっとなんとかならないかな。
0820デフォルトの名無しさん
NGNG>>810で解決済
0821デフォルトの名無しさん
NGNGあっ、私は807=919です。
C の演算子ベースで矛盾や混乱の起こりにくい記述を追及したいです。
型での記述だと、今何型になっているのかを常に意識する必要があって結構混乱の元になる。
新規文法にしても単純に < == > 等ではさむと優先順位が変になったり、
そこだけが極端に風変わりな文法になるのを防いだ書き方を追求したいです。
0822デフォルトの名無しさん
NGNG==. !=. <. >. <=. >=.
といった演算子を低めの優先順位で新規に設けるとか・・・
0823デフォルトの名無しさん
NGNG演算子の打ち間違いの問題が発生しそうなヨカン。
0824デフォルトの名無しさん
NGNGこれ、マクロにする必要はないんでない?
=、 <、 <=、 >= も関数だし
0825817
NGNGいろいろ改造したけど、ここに載せるには長いし、
実のところスレ違いなので載せるのはやめとくけど。
0826821
NGNG糖衣にするのか、新規に作るのか、
例えばオーバーロードするときに新規に作った文法なら、これのオーバーロードはかなり頭が痛いです。
比較演算子を関数と考えて、比較要素オブジェクトと関数オブジェクトをリストにしてコンテナにいれて引き渡してみようかとか、
少なくとも僕は参考になることが多いから、スレ違いだと激しく言っている上にいる誰かの方がよっぽどウザイと感じるのは僕だけですかね。
0828デフォルトの名無しさん
NGNG0829デフォルトの名無しさん
NGNG0830デフォルトの名無しさん
NGNG0831デフォルトの名無しさん
NGNG多重継承のことだと言えば
貴方は嬉々として賛同するだろう。
0832デフォルトの名無しさん
NGNG無いと、必要なときに使えなくて困る
0833デフォルトの名無しさん
NGNG間違った使い方をしてはまるアフォ共のために、そんな自由はいらんと言うとる言語もあるが。
でも面白さが足りんよな、そういうのは。
0834デフォルトの名無しさん
NGNG0835デフォルトの名無しさん
NGNG0836デフォルトの名無しさん
NGNGa +{0} b *{2} c /{3} d -{1} e
-> ( a + b ) * c / ( d - e )
0837789
NGNG優先順位を指定できるのに結合性を指定できないのは
片手落ち。あとHaskellだと演算子ごとの指定はできるな。
infixr 5 ++ -- 右結合で優先順位5
こんな感じで。
しかしどっちにしてもいいアイデアだとは思わない。そもそも
「括弧を使う」という万能の優先順位変更策があるわけだから、
最低でもそれより読みやすくないとだめだろ。
0838デフォルトの名無しさん
NGNG優先順位も決めれるぞ。
0839デフォルトの名無しさん
NGNG0840デフォルトの名無しさん
NGNG0841デフォルトの名無しさん
NGNG0842デフォルトの名無しさん
NGNGおまいは「あるいは」の意味を知らんのか?
0843デフォルトの名無しさん
NGNG新しい文法考えました
>>1
で行番号1へ飛びます
0844デフォルトの名無しさん
NGNGtext=RED;
back=BLUE;
colors[]={ BLACK, WHITE, … };
if((text,back)⊂colors){ … } // text及びbackがcolorsに含まれるなら
0845デフォルトの名無しさん
NGNG0846デフォルトの名無しさん
NGNGprologみたいなのじゃなくて、Push-downもいけるようなやつ。
場当たり的な適当なコードを書くのの変わりに。
0847デフォルトの名無しさん
NGNG綺麗かつ便利になりそうな気がしています。
if((text,back)⊂colors){ … } なのですが、
とりわけ数学でよく考えられた記号は、そのまま持ってきたいが
実際には、そうは行かない
例えば行列計算で
D = A + B * C
とかする場合、OO系言語の場合
D.add( A , B.clone().mul( C ) ) ;
といったことにといった感じになりかねないもので、読みにくいこと極まりないです。
一部の人はこのほうが統一があって読みやすいなんていっていますが、あれは頭が変(←少し煽り)
統一されていることは正しいとは思うのですが(こうすることによる拡張性その他は捨てられない)
統一されている≠読みやすい
とも思うんですよね。
最近C#をやり始めて「同じ事をするのにやり方が複数個あるのは良くない」はウソだと感じる。
あくまで「統一されている」は拡張性の確保や読みやすさの確保のための手段であって目的ではないと思う。
基本的に糖衣構文を記述する構文のような物という事になるでしょうけれど、
template その他で進化した考え方で諸悪の根源とされていたプリプロセッサを再度見直したらもっと良いものになりそうな気がする。
さらに「書き方とプログラムを分離する」を一般化して考えれば、「オートマトンの絵でそのまま機械つくってくれるやつ」といった、
プリプロセッサの変換元がテキストである必要性も無いような気もします。
0848デフォルトの名無しさん
NGNGテキストを二次元的に取り扱う
このプログラムは func1 → func2 → .. func4 → func5 .. func7 → return
と処理が進む
void proc()
{
func1() ; %% label1:
func2() ; %% func5() ;
func3() ; %% func6() ;
func4() ; %% func7() ;
goto label1 ; %% return ;
}
このプログラム自体には意味はないのですが、たとえば処理が対になっている処理などでは、
ミスを減らす有力な手段として使えたりとかしないかなと思っています。
0849デフォルトの名無しさん
NGNG0850デフォルトの名無しさん
NGNGC# やってんなら、演算子のオーバーロードで
行列計算は D = A + B * C; って書けるっしょ?
まぁ、実行効率に目をつぶればね。
シンタックスシュガーを記述する構文は色んな言語に色んなものがある。
数学的な記法ということに関しては Haskell はなかなかすごい。
有名な Haskell のクイックソートプログラムを見れ。
ttp://www.teu.ac.jp/nsit/~tomoya/Prog/haskellq.html
0851デフォルトの名無しさん
NGNG一応知ってます、しかし今まである物のは全部場当たりなんですよね。
○○の記述方法で凄いのなら××言語って感じになってしまいます。
そうではなくて、一般的な方法が欲しいなと思ってます。
0852デフォルトの名無しさん
NGNG新しい文法は別途考えないといけないわけで。
0853デフォルトの名無しさん
NGNGおれは一仕事終わらせてきた。
0854デフォルトの名無しさん
NGNGあなたが知らないだけで、そんな言語は山ほどある
0855デフォルトの名無しさん
NGNGすみません、それを教えていただけますか?
少なくとも自分は今だに見たことがないです。
0856デフォルトの名無しさん
NGNG#define in(x,a,b) ((a)<(x) && (x)<(b))
#define and(a) a && a
if on(x, a, b){...}
if(a< and(x) <b){...}
禿しく下らんな、鬱。
0857山崎 渉
NGNG__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0858山崎 渉
NGNG__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0859デフォルトの名無しさん
NGNG書式
#let1 <sym> <bind> <body> ... end または
#let1 <sym> <bind> <body> ... #<EOF> または
(hoge #let1 <sym> <bind> <body> ... ) または
#let ((<sym> <bind>) ...) <body> ... end または
#let ((<sym> <bind>) ...) <body> ... #<EOF> または
(hoge #let ((<sym> <bind>) ...) <body> ... )
さらに、named-let
#let <loop-sym> ((<sym> <bind>) ...) ... 終端
束縛の有効範囲は終端記号まで。
終端記号はキーワードシンボルend、ファイルの末尾、
親関数/構文の閉じ括弧のどれか。
使い方
(pp #let1 a 1 #let1 b 2 (+ a b)) => 3
メリット:構文囲い込みの括弧を使わない。コードへの追加/削除が簡単。
昨日考えて、さっき作り終わった。想像通り便利。
この終端の判定方法は他の構文を作るときにも流用できる。
実装はreaderのsharp-hook拡張。
ppすると普通のletになる。
(pretty-print '(display #let1 a 1 #let1 b 2 (+ a b)))
==>(display (let ((a 1))(let ((b 2))(+ a b))))
0860デフォルトの名無しさん
NGNG書式 #n <num> [<sexpr> ...]
<num>で指定した回数だけ後続のS式を読み込み、
1つのリストとみなす。
;#nで記述したアッカーマン
#n3 define #n3 ack m n
#n4 if #n2 zero? m
#n3 + n 1
#n4 if #n2 zero? n
#n3 ack #n3 - m 1 1
#n3 ack #n3 - m 1 #n3 ack m #n3 - n 1
;↓と等価
(define (ack m n)
(if (zero? m) (+ n 1)
(if (zero? n) (ack (- m 1) 1)
(ack (- m 1) (ack m (- n 1))))))
#n3 ack 3 8
=>2045
見ての通り、括弧が全く無い。
そのかわり、アンカーを頭に書く必要がある。
・・・どうかなあ?
0861デフォルトの名無しさん
NGNG0862デフォルトの名無しさん
NGNGうーん… python 風?
indent を固定しちゃえば、慣れれば読めそうだけど…
でも、 >>861 に同意。
内包できる Sexp の数を前置すると、最初に書くのもちょっと大変だし、
変更するときとかも複雑になりそう。
数字がずれるとわかりにくい bug になるだろうし。
0863デフォルトの名無しさん
NGNG考え方は非常に原始的です。
最初に個数を置く関係上、
使う段階で数え終わっている必要があります。
まあ、>>860は極端な例です。
#n〜も1つのS式なので、
#n自身も>>860の様にネストできます。
例えば固定長のテーブルを書く場合に
>#n3 define data '
#n4 ; y
#n3 a b c ;x
#n3 d e f
#n3 g h i
#n3 j k l
=>data
>data
=>((a b c) (d e f) (g h i) (j k l))
というわけです。
メリットは、
括弧の閉じ忘れを気にしなくてよい、とか。
あと、リストの長さを限定したいときに
読み込み時チェックが掛かる。
0864デフォルトの名無しさん
NGNGちなみにインデントは関係ないです。
#n3 define #n3 ack m n #n4 if #n2 zero? m #n3 + n 1
#n4 if #n2 zero? n #n3 ack #n3 - m 1 1 #n3 ack #n3 - m 1 #n3 ack m #n3 - n 1
これでもちゃんとパースされます。
慣れると1行野郎が楽に書けるかも・・。
0865デフォルトの名無しさん
NGNG好きなところで長さ制限したい場合にでも使えそうです。
(そういう局面は少ないですが。)
#3 define data '
#n4
(a b c)
(d e f)
(g h i)
(j k l)
(m n o) ;←エラー
0866デフォルトの名無しさん
NGNG(define (fetch-sharp-nlist)
#let1 num (read)
(if (number? num) 'ok (error "Syntax Error : expect nuber. #n<num> [<sexpr> ...] ==>" num))
#let loop ((r '()) (n num))
(if (zero? n) (apply list (reverse r))
#let1 s (read)
(if (eof-object? s) (error "unterminated #n " num " " (reverse r)) 'ok)
(loop (cons s r) (- n 1))))
このfetch-sharp-nlistを#のディスパッチ関数から呼び出す。
readが再帰的に#フックを呼び出す仕様でないと使えません。
次の様にするとテストできます。
(fetch-sharp-nlist)3 define data '
(fetch-sharp-nlist)4
(a b c)
(d e f)
(g h i)
(j k l)
0867デフォルトの名無しさん
NGNG0868デフォルトの名無しさん
NGNG0869デフォルトの名無しさん
NGNG0870デフォルトの名無しさん
NGNG数を数えるなんていう機械がやるべき単純作業を何故人間様がわざわざやらにゃならんのか
0871デフォルトの名無しさん
NGNGソース見る限り<num>自体もS式だから、計算で求める事もできるよ。
なんつったりして。
0872デフォルトの名無しさん
NGNGそうだよ、リストの終りが分かるようになんかおきゃいいんだよ。
…閉じカッコとかどうよ?
0873デフォルトの名無しさん
NGNGさらに、関数によって異なるBOOL型を扱えるのって、どう?
int foo::bar(void)::BOOL FALSE[]={-1,0}
/* or TRUE[]={1} 等々TRUEかFALSEのどちらかを指定でき、配列は返り値と同じ型 */
{ … /* 関数の定義 */ }
使い方は
foo a,b ;
int i ;
if ( a.bar() == FALSE ) … /* 返り値が、-1か0ならば */ ;
i = b.bar() ;
if ( i == b::bar()::TRUE /* foo::bar()::TRUE 等も可 */ ) … /* iが -1及び0でなければ */ ;
0874デフォルトの名無しさん
NGNG0875名無し@沢森
NGNG俺が新文法を提示してやるよ。
・再帰用デフォルト引数
再帰関数でしか使えないデフォルト引数で、
外からはそのデフォルト引数しか使えず、
再帰呼び出しの時のみそれ以外の引数を指定できる。
例)
let pow x n (res := 1) =
if n = 0 then
res
else
pow x (n - 1) (res * x);; (* OK *)
pow 4 2;; (* OK *)
pow 4 2 5;; (* Irregal! *)
どうよ?
0876名無し@沢森
NGNG0877デフォルトの名無しさん
NGNGirregal リーガル(TM)でない
0878名無し@沢森
NGNG0879磯斡葦胃飲斡
NGNG0880デフォルトの名無しさん
NGNG再帰用関数が外から見えなきゃそれで済むやん
0881デフォルトの名無しさん
NGNGその場合はnumをevalに掛けないとS式そのものが渡される気がする
0882デフォルトの名無しさん
NGNGソレダ (・∀・)
0883デフォルトの名無しさん
NGNG#letは良い気がする。
一時変数作るだけで括弧のネストいるのは正直めんどいので。
0884名無し@沢森
NGNGヌヒよ。
いちいちインタフェイス関数と再帰用関数と
2つの関数を作るのは二度手間だと思わないのか?
あと、型に厳密な Objective Caml を例にしたのはまずかったやもしれんが、
再帰呼び出しだと引数を必ず指定することにすれば型推論できるな。
0885デフォルトの名無しさん
NGNG> いちいちインタフェイス関数と再帰用関数と
> 2つの関数を作るのは二度手間だと思わないのか?
いいえ
例えば named let とか
0886山崎 渉
NGNG0887山崎 渉
NGNG│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
0888デフォルトの名無しさん
NGNG884ではないんだが、schemeあんまり知らないんで教えてくれ。
named-let syntax sugarで、どうやって再帰関数を表に出さないで、
かつ2つの関数を作らないで記述するの?
0889デフォルトの名無しさん
NGNG以下の2つは等価
(let loop ((hoge foo)
(fuga bar))
...)
(letrec ((loop (lambda (hoge fuga)
...)))
(loop foo bar))
0890デフォルトの名無しさん
NGNG0891888
NGNGdefineだろうがletだろうがローカルか否かの違いはあっても
束縛じゃないの?
ocamlのletはLocalかどうかの区別がないだけだし。
named letであろうがなかろうが、インターフェースが必要でないの?
(define (pow x n)
(let loop (.....
と
(define (pow x n)
(letrec ((loop ...
と
let pow x n =
let loop =
....
とに関数の(束縛の)数に違いはないんじゃ?
lambda式だって名前なし関数だから、lambdaでくくれば
良いってものでもないし。
ローカル束縛のみで行うつーのがそもそも
理解できないんだけど。。。
ただ、>>875のはoptional labelつかえば
(checkはしてくれないけど)良いから
いらないと思う、すくなくともocamlには。
0892デフォルトの名無しさん
NGNGこの話題は簡便に書けるかどうかじゃないの?
束縛の数とかは裏の作りの問題の様な気もするし。
0893デフォルトの名無しさん
NGNG(define-macro (define-optional (name . arg)...)
`(define ,name (lambda ,(filter-not-optional arg)
(let ,name ,(filter-optional arg),...)))
みたいにして、
(define-optional (pow x n (&optional res 1))
(if(zero? n)res(pow x(1- n)(* res x))))
0894888
NGNG0895888
NGNG0896デフォルトの名無しさん
NGNG扱うことで、すっきりとしたモバイル計算が考えられそう、
ってたった今夢想してしまった。とっくに研究されているのだろうか?
0897デフォルトの名無しさん
NGNG継続とは違うの?
0898デフォルトの名無しさん
NGNGnamed let なら外部に内側の実装用引数を見せることなく、かつ
(見た目上) 内側に関数を入れ子にすることなく簡便に再帰を書ける、というだけのこと。
そんな深い話じゃない。
0899デフォルトの名無しさん
NGNG漏れの言った「スレッド」はあくまで計算の実行主体という意味で、
「継続」のような「計算の内容」とはちょっと異なるものを
想像してました。
なんていうか、、、
(let ((athread (make-thread) ; 別のスレッドを作って、
(alocation (bind-location "xxx.yyy.zzz.jp")) ; 場所をバインドして
(+ (+ 2 2) (eval-at alocation athread '(+ 1 1)))) ; (+ 1 1)はathreadが
; alocationにて実行
; (+ 2 2)とその後の
; 足し算は自分で実行
みたいなことができたらいいなとふと思った。研究レベルでなら山ほど
ありそうだが。。。
0900デフォルトの名無しさん
NGNG0901デフォルトの名無しさん
NGNG0902デフォルトの名無しさん
NGNGprocess migration っつーはなし?
0903デフォルトの名無しさん
NGNGある程度言語側で決めてもらったら楽だと思った。
0904デフォルトの名無しさん
NGNGobj1とobj2でデータを突き合わせてその結果を両方のobjに反映させる
0905デフォルトの名無しさん
NGNGimplicit のことかーーーーーっ!!!
0906デフォルトの名無しさん
NGNG0907デフォルトの名無しさん
NGNG0908デフォルトの名無しさん
NGNG弁償型言語 D・V・D!
hello world はこんな感じ
定義
helloworld.dvdの目的: D・V・D!と言われたら 割れたDVDを 弁償 する
->弁償 とは お金 が ある なら それを支払う
->弁償 とは お金 が ない なら 代償 を行う
->代償 とは hello world を 表示 する
helloworld.dvd> お金 は ない
helloworld.dvd> D・V・D!
hello world
以上でっす!!!
自殺してくる!!!!!
0909デフォルトの名無しさん
NGNGレス数が900を超えています。1000を超えると表示できなくなるよ。