新次元新発想!新しい文法を作るスレ
■ このスレッドは過去ログ倉庫に格納されています
0001ネタでもいいよ・・・
NGNGただ、はじめから備わってるものでは、面白くないので新しい文法を提案してください。
あの処理がこんな風に書けたら楽だ、みたいなことです。
ちなみに私は先入観の塊と化しているので何も思い浮かびません。
頭の体操みたいな効能もあるかもしれません。
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としている以上、代名詞で揃えたいんじゃないか?
■ このスレッドは過去ログ倉庫に格納されています