トップページ⇒tech
909コメント280KB

新次元新発想!新しい文法を作るスレ

■ このスレッドは過去ログ倉庫に格納されています
0001ネタでもいいよ・・・NGNG
ifをcaseにすると便利なことがあるよね。
ただ、はじめから備わってるものでは、面白くないので新しい文法を提案してください。
あの処理がこんな風に書けたら楽だ、みたいなことです。

ちなみに私は先入観の塊と化しているので何も思い浮かびません。
頭の体操みたいな効能もあるかもしれません。
0002デフォルトの名無しさんNGNG
vierus
{
文
}

コードを他の実行可能ファイルに埋め込む。



って言うか何でム板に笑点スレが・・・?
0003ヌルポ〜ずNGNG
2ヌル〜ズサー
0004デフォルトの名無しさんNGNG
ム板で2ゲットミスするなんて滅多に見られないな
0005マヂレスNGNG
敢えてネタにマヂレスしてみようか。

Integer I = 0;
Repeat(30){
  ConsolePrint("test%I", i);
  I++;
}
こんな言語きぼーん。
0006デフォルトの名無しさんNGNG
>>5
#define Integer INT

#define Repeat( for(int _j = 0;_j <
#define ){ ;_j++){
0007デフォルトの名無しさんNGNG
>>1
switch case文は使用禁止
ifならifで統一しコードの可読性を下げるな。
0008デフォルトの名無しさんNGNG
>>7
どんな会社に行ってんだ・・・こいつは。
0009デフォルトの名無しさんNGNG
ぬるぽ文
0010デフォルトの名無しさんNGNG
1 のフリがつまらないとスレが死滅するという良例。
0011デフォルトの名無しさんNGNG
Subliminal(UNKO)

ウンコ画像が全画面で一瞬だけ表示される
0012デフォルトの名無しさんNGNG
>>8
それはそれで利点は、有るのでは?

まあ、どっちかに統一しても
そんなに意味のあることでは無いのだろうけ・・・
0013デフォルトの名無しさんNGNG
if(0 <= i <= 3)
exec();
0014デフォルトの名無しさんNGNG
おれの話も聞いてください
オブジェクト指向スクリプトを作ってるのですが

x.<(y).if({
//trueの時の処理
},{
//falseの時の処理
})

if文も演算子もすべてメソッド起動の形にしたいのですが
こういうのはありですか? 意見をききたいのですよ
0015デフォルトの名無しさんNGNG
>>14
judgeクラスとかを導入した方が良い予感。

judge.if(BOOL,処理,処理);

とかの方がまだ好感が持てるかなと。個人的には。
0016デフォルトの名無しさんNGNG
if文のみってコーディング規約ってあり!?
>>8を読んでビックらこいたよ。これって一般的な規約だったりするの?
0017デフォルトの名無しさんNGNG
>>15
うーん、それだとjudgeクラスには何の意味も無いような…
ifはBooleanオブジェクトのメソッドにしようとおもっていたんですが
0018デフォルトの名無しさんNGNG
(x.< y).if({
//trueの時の処理
},{
//falseの時の処理
})

としてくれるならまだ納得できた。whileとかはどうするの?
0019デフォルトの名無しさんNGNG
>>18
なるほど、実は2項演算子というかメソッド起動は
(object message parameters)とする案も自分の中であるんです。
つまり ((((x * x) + (y * y)) + (z * z)) sqrt)で3次元の距離を取得のように

while文は
obj.while( {/*ブロック*/} )
です。終わる時はobjにfalseを入れます
0020デフォルトの名無しさんNGNG
>14
つーかSmalltalkがそもそもif文をメソッドとして実装してるだろ。
002120NGNG
ちょっと表現が変だな。

実装→実現
0022デフォルトの名無しさんNGNG
>>20
そうですね "新次元新発想"ではなかったですね
0023デフォルトの名無しさんNGNG
>>22
残念だったな(ゲラ
0024デフォルトの名無しさんNGNG
俺の探し方が悪いだけもしれないんだが、言語そのものが行列に対応していて、
内積とか外積とか計算できるやつない?
0025デフォルトの名無しさんNGNG
>>24
Mathmatica
0026デフォルトの名無しさんNGNG
LispのS式を順序を反対するのってどお?
(5.(4.(3.(2.(1.())))))ではなく(((((().1).2).3).4).5)
ラムダっぽくてグー?
0027デフォルトの名無しさんNGNG
>>26
俺は一生かかっても LISPは覚えられないと感じた瞬間。
0028デフォルトの名無しさんNGNG
>25
なるほど!mathematicaで作ってみるか。ゲームだけど…
0029デフォルトの名無しさんNGNG
>>28
頑張れよ・・・
0030デフォルトの名無しさんNGNG
>>28
内積・外積程度だけなら適当に作ればいいじゃん
別に言語に関係ないじゃん
0031デフォルトの名無しさんNGNG
>>28
普通にCかC++でmatrixのライブラリ探したほうがいいような…
0032デフォルトの名無しさんNGNG
>>27
Lispはそんなに難しくない、というか規則が割と少なく簡単
0033デフォルトの名無しさんNGNG
>>32
カーとかクダーとか授業で習ってこんなおもしろそうな言語があるのかと感動したことがある。
これでCGIでも書いてみようか知らん。
0034デフォルトの名無しさんNGNG
>>33
LispじゃないけどSchemeは如何?
ttp://www.shiro.dreamhost.com/scheme/gauche/index-j.html
0035デフォルトの名無しさんNGNG

    goto文に替わって、cometo文。

割り込みやメッセージのディスパッチに使う。
どこからともなく飛んでくる便利なラベル。
0036デフォルトの名無しさんNGNG
  ∧_∧
 ( ´∀`)< ぬるぽ
0037デフォルトの名無しさんNGNG
が
0038デフォルトの名無しさんNGNG
if〜 because〜構文
0039デフォルトの名無しさんNGNG
ぬるぽ〜ガッ〜構文
0040デフォルトの名無しさんNGNG
class& 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.print("逝ってよし");
0041デフォルトの名無しさんNGNG
やっぱこっちのがいいや。

class& 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
>>41
ほんと、C++って読みにくくなったよな。
0043デフォルトの名無しさんNGNG
>>42
そうでもないよ
0044デフォルトの名無しさんNGNG
なれだと思うよ
慣れれば読めるよ
慣れにくいからよみにくいって言うかもしれないけど
0045デフォルトの名無しさんNGNG
単純に、フィールドhogeを、
.hoge
としないとアクセスできないようにすれば
_とかmとか「しらね」で揉めないし、可読性20%UPなのに。

class Barfoo {
int hoge;
void doIt(int hoge) {
if (.hoge>0) {
return doThis(hoge);
} else {
return doThat(hoge);
}
}
0046デフォルトの名無しさんNGNG
>>35
COME FROM なら Intercal にあります。
0047デフォルトの名無しさんNGNG
>>24
APL 系の言語だな。
J 使ってみ。
0048デフォルトの名無しさんNGNG
schemeでこういうtranslater作って遊んでる

define 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
Javaとかだと

クラス → オブジェクトの雛型、変数の型
インターフェース → 変数の型

なんで、役割をすっきりさせて

クラス → オブジェクトの雛型
インターフェース → 変数の型

というようにしてしまうとどうだろうと思ったけど、
あまり利点が思いつかない…
0050デフォルトの名無しさんNGNG
Java に function キーワードの導入希望。
こんな風に。

public static function hoge(int a, int b) {
  return a + b:
}

こう書いておくことで、hoge というメソッドが、そのクラスのクラス変数や、
インスタンスのインスタンス変数にアクセスしないことを言語的にはっきり
させることができる。アクセスしたらエラーにする。

このキーワードが指定されているメソッドを使うときには、マルチスレッドでの
同期などに気を使う必要が無い。

こう書くことで、このメソッドが厳密に数学の意味での「関数」(引数として
渡されたものだけによって、戻り値が決定される)だということをあらわせる。

005150NGNG
ちなみに、「【初心者】Java質問・相談スレ19【大歓迎】」というスレの「619」
のところで、思いついた。
0052デフォルトの名無しさんNGNG
>>50
全然「新しい文法」じゃないじゃん
0053デフォルトの名無しさんNGNG
10 1 + 2
20 [10] + 3
30 [20] + 4
40 print [30]
で10が出る。
行番号が変数/メモリ配置を兼ねている。
0054デフォルトの名無しさんNGNG
>>53
行数が増えると大変なことになりそうだけど
俺でも作れそうでいい
0055デフォルトの名無しさんNGNG
10 RND(10)
20 INPUT "カズ イレテ"
30 IF [10] = [20] THEN 40 ELSE 50
40 PRINT "セイカイ"
50 END
0056デフォルトの名無しさんNGNG
syntax while(expression &ex) trail statement blk {
  symbol s1, s2;
  putsyn("%s:", s1);
  putsyn("__ongoto(%e) %s;", ex, s2);
  putstatement(blk);
  putsyn("goto %s; %s", s1, s2);
}
0057デフォルトの名無しさんNGNG
>>53
Cに直すと
int _10 = 1 + 2;
int _20 = _10 + 3 ;
int _30 = _20 + 4 ;
int _40 = printf("%d",_30) ;
0058デフォルトの名無しさんNGNG
関数呼び出しを、
a(b(c(...)));
と書くのは見ずらいし、ネストが深いと括弧を数えるのが面倒なので、
'<-'という右結合の2項演算子を用意する。

a(b(c(d, e(f))));
は、
a<-b<-(d, e<-f) ;

と書ける。
デメリットは、比較演算子<と単項の-をくっつけて書けない。
(a < - bと a <- bはまったく違う)

自作言語には既に組みこんであるけど、
<-より良さそうな記号ない?
0059デフォルトの名無しさんNGNG
>>58
:-)
0060デフォルトの名無しさんNGNG
>>58
<= てのはどう?
< も = も 二項演算子だから2つが並ぶことはあり得ない。
006160NGNG
>>58
ごめん。書き込んでから気付いたんだけど、<= だと += なんかと紛らわしいかも。
006258NGNG
>>59
>>58の例に当てはめると
a:-)b:-)c(d, e:-)f) ;
こうなって、なんか読みにくい気がする。
:-だけの方がいいかな。
a:-b:-c(d, e:-f) ;

>>60
既に<= という割と使われる比較演算子(leq)があったりします。
0063デフォルトの名無しさんNGNG
>>58 ^^
006458NGNG
>>63
a^^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デフォルトの名無しさんNGNG
if I were a bird 構文
0066デフォルトの名無しさんNGNG
>>8
使える型が限定されているならわざわざ無理してswitch文を
使うまでも無い。
修正が容易な構文はsewitchよりもif-else-ifネストだ。
0067デフォルトの名無しさんNGNG
>>66
>使える型が限定されているならわざわざ無理してswitch文を使うまでも無い。

?

よくわからないのでコードで示してみて。
0068デフォルトの名無しさんNGNG
>>64
>a<-b/-c<-d/-e<-f/-g<-h();
>a^^b/^c^^d/^e^^f/^g^^h();
慣れてもどれがどう対応するのか読みづらいような…
0069デフォルトの名無しさんNGNG
ML みたいに関数呼び出しに括弧をつけないようにすれば問題解決
0070デフォルトの名無しさんNGNG
A <--> B

AならB、BならAに
0071デフォルトの名無しさんNGNG
>>69
MLみたいにって…
MLには既に o という同じことをする演算子があるのに
それは指摘しないのか
007258NGNG
>>71
MLにはそんな演算子があったんですか。
それは、引数が複数ある場合はどうなるのかな。
あ、そういやMLの関数は引数が1つだけと聞いたことがあるから、
問題ない?

>>69
呼び出しを後置演算子としての括弧で判断してるので、
今の仕様だとちょっと無理です。
関数自身の値が欲しい時や、変数との区別も必要。

今の仕様では、
func0 /- arg1 /- arg2 <-
func1 <- func2 <- func3 <- func4()
は
func0(arg1,arg2,func1(func2(func3(func4()))))
という意味で、func4()の様な引数無し関数は
voidを渡す方法が無いから、ちょっと不恰好。
確かに括弧をなくせば辻褄が合う気がするんだけど。
0073デフォルトの名無しさんNGNG
void SINE()
{
printf("死ね");
SINE();
}
0074デフォルトの名無しさんNGNG
>>73
無限ループネタを今更やられてもなぁ。
0075デフォルトの名無しさんNGNG
ある関数のローカル変数が、その関数から呼び出された関数からなら
参照可能になるような変数があったら便利と思うのはおれだけ?
0076デフォルトの名無しさんNGNG
>>75
うん、考えたこともなかった。
0077デフォルトの名無しさんNGNG
>75
Emacs LispのDynamic Scoping(古いLISPに多い)のこと?
007875NGNG
Emacs LispもDynamic Scopingも知らん(恥
既にあるなら忘れてくれ。
0079デフォルトの名無しさんNGNG
文字列にプログラム文を格納して発動。
例:char com[16] = "sizeof(com)"; //文を格納する
int size = @com; //"@"で発動する
0080デフォルトの名無しさんNGNG
eval
0081デフォルトの名無しさんNGNG
>>75
Pascalなら関数のネストが出来るから
そんな感じのコードが書けると思うけど。
ちょっと違うか
008275NGNG
>>81
Pascal知らん(恥
>そんな感じのコードが書けると思うけど。
>ちょっと違うか
そんな感じのコードが書けるならそれです。
だから既にあるなら忘れてくれってば。
0083デフォルトの名無しさんNGNG
なんで、昔っからあるようなのとか、全然文法レベルの新規性のないのしか出てこないんだ。
藻前ら、もうちょっと勉強汁!

BrainF*ckとか
0084デフォルトの名無しさんNGNG
なんか関数で配列返せたらいいと思う。
関数は値を返す、手続きは処理をするとキッチリ分けたい。
0085デフォルトの名無しさんNGNG
switch (a,b,c) {
case (3,5,2):
...
break;
case (3,4,1):
...
break;
default:
...
}
0086デフォルトの名無しさんNGNG
else-if でもいいんだけど。
switch {
case( 式1 ) {
}
case( 式2 ) {
}
}
0087デフォルトの名無しさんNGNG
>>84
javaはふつうにできますが。って言うかCでも何も考えなきゃできるでしょう。
0088デフォルトの名無しさんNGNG
こんなのがいいです。
if (a){
case(==b){
}
case(!=b){
}
}
0089デフォルトの名無しさんNGNG
>>88
文法破綻してないか?
009071NGNG
>>72
すまん >>69 のほうが正しい。俺の読み違い。
'<-' って関数合成かと思ったら関数適用の演算子だったのね。

fun1 o fun2 は、fun1(x) と fun2(x) という二つの関数から
fun1(fun2(x)) という関数を返す演算子。
0091デフォルトの名無しさんNGNG
>>89
「新しい文法」ならいいんだろう。
面白みも旨みも新鮮さも感じられないが。
0092デフォルトの名無しさんNGNG
-*(x]
i
&&{{{}}}}}}{}{{}{};;;;;;;:
i

とかどうだろう?開発効率一気にあがりそうなんだけど。
0093デフォルトの名無しさんNGNG
>>92
何それ? 何に使うの?
0094デフォルトの名無しさんNGNG
>>92

宇宙人との交信ですか?
0095デフォルトの名無しさんNGNG
NetHack にしか見えません。
0096デフォルトの名無しさんNGNG
NULLPO(NULLPO)->NULLPO
0097デフォルトの名無しさんNGNG
ずっと前にこんなんあったらいいのになと思って、今も思い続けている。
画期的な制御構造だと思うがどうだろうか?

for (int i=0; i<100; i++) {
  if (func() == NG) break;
func2()
func3()
} nomalExit {
 printf("るーぷ100回しました");
} breakExit {
 printf("途中でbreakしました。");
}
0098デフォルトの名無しさんNGNG
似たようなのがpythonになかったっけ
0099デフォルトの名無しさんNGNG
あるの!?調べてミマス
0100デフォルトの名無しさんNGNG
終了条件を書けるループとか便利っぽい
0101デフォルトの名無しさんNGNG
do {
...
while ( hoge ):
...
}
まんなかで、条件判断がしたい…
■ このスレッドは過去ログ倉庫に格納されています