@http://blog.goo.ne.jp/bonsai-chat/e/fc972b51960c340d5c418bf964c01114
=WILDの紹介
/
2004/01/26
2003/10/10
/*孵化..1980年代;:脱皮..2回*/
WILD..Wildly Imitated Languge with Danger of misuse
WOS ..WILD Operating System
ドキュメント用小文字表示/*Ver. 3: 2000 年代*/
$Memo(OutlookExpress)/*Ver. 5.5*/.same,.do:(
if:WantHelpAbout,"メール先頭のアイコン"..do:(
Menu("ヘルプ(H)"; "目次とキーワード(C)[F1]");
WaitHelp/*andMoveCursor*/; Folder,"ヒントとテクニック";
Page,"メッセージ一覧に表示されるアイコン"; Continue);
if:WantTo,"サーバにメッセージのコピーを置く"..do:(
Menu("ツール(T)"; "アカウント(A)"); Tab,"メール";
Btn,"プロパティ(P)"; Tab,"詳細設定"; Chk,{L}; Continue);
if:WantTo,"保存フォルダの変更"..do:(
Menu("ツール(T)"; "オプション(O)"); Tab,"メンテナンス";
Btn,"保存フォルダ(F)"; Btn,"変更(C)"; Folder,YouWant;
if:WantTo,"終了時に[削除済みアイテム]を空にする"
..Chk,{E}/*;:1..Clr,{E}*/; Continue)
);
X.StrCmp,Y; F_,X_0; &123.45; 003.14; Hex{C3
0001}Hex/*="C3\0D\0A0001"*/
X.STR&CMP&,Y; F&&,X&0; 123.45; ' 3.14'; %HEX[C3%,
0001]HEX%"[=%(C3%,%0A0001%)]"
"ABC\08\09\7F\\\"]%DE\0AxyZ"/*%[%,\0A%09]%:MORE]%*/
%[ABC%%5C"%)%:DE%,%-XY%+Z]%"[%:%(%:,%0A%:09%)%::MORE%)%]"
本来のソース表示/*Ver. 1: 1980 年代*/
$MY&PROG.SAME,.LET:(
WITH,.$TEST&SQ; $GEN&SQ"[(N; C)]".BY,.TEST&SQ;
$I&.SAME,.00000; $C&.SAME,.[ ]; $A&.SAME,.A
"[LINK,.$SYSTEM; $I&.$C&.$A&.BY,.SYSTEM;]"
$I.$X.$Y.LIKE,.I&; $C.LIKE,.C&; $P.LIKE,.A&;
$RETURN.SAME,.DO:(DO:(HERE:03); JUMP:03);
$CALC.SAME,.DO:(JUMP:C-[+].AND,3+4;
HERE:04; X.=$+Y; RETURN;
HERE:05; X.=$-Y; RETURN;
HERE:06; X.=$*Y; RETURN;
HERE:07; CHECK:Y=0..[X/0]; X.=$/Y);
$Z&10.LIKE,.DATA:(COPY:10..DATA:(I&; 00));
$A&Z.SAME,.Z&10#&; $Z(I).SAME,.I&@(I.SHIFT,2+A&Z);
$LD(P; X).SAME,.A&.(DO:(I&@P.=X); P.=$+4);
$SAMPLE.SAME,.DO:(LET:($BF.LIKE,.GEN&SQ(20; 0));
LOOP:1..READ,.(X; C)"[0:BEGIN(10);SAMPLE;READ,.C]"
;:NOT,(C=[%:])..DO:(READ,.Y; CALC; WRITE,.(X; [%,]);
LD(A&Z; 1; 23; -4)"[=LD(LD(LD(A&Z; 1); 23); -4)]";
WRITE,.(Z(0)+Z(1)+Z(2); [%,]; BF"[AS&,TEXT]"))
)"[MY&PROG]"
$TEST&SQ.SAME,.LET:(
$N.$I.$J.LIKE,.00; $C.LIKE,.[ ]; $KEY(C).SAME,.C;
$S.LIKE,.DATA:(COPY:20..%[ ]%);
$SHOWN(S).SAME,.DATA:(C>[1];
DO:(I.=1+4?; J.=1+3?; N.=$-1; IF:N=0..I.=2));
$WANT(S).SAME,.DATA:(DO:(I.=$-1); I=0);
$MOVE&TO(S).SAME,.DATA:(DO:(J.=$-1); J=0);
$INS&STRING.SAME,.DATA:(COPY:1+7?..73?; [%,]);
$GEN&SQ(N; C).SAME,.DATA:(
LOOP:SHOWN&,%[MENU]%..DATA:(
IF:WANT&,%[HELP]%..KEY&,[0]
;:WANT&,%[END]%..KEY&,[1]
;:WANT&,%[MOVE]%..DATA:(
IF:MOVE&TO&,%[UP]%..KEY&,[2]
;:MOVE&TO&,%[DOWN]%..KEY&,[3]
;:MOVE&TO&,%[LEFT]%..KEY&,[4]
;:MOVE&TO&,%[RIGHT]%..KEY&,[5])
;:WANT&,%[INSERT]%..DATA:(KEY&,[6]; INS&STRING)
;:WANT&,%[DELETE]%..KEY&,[7])
)"[GEN&SQ]"
)"[TEST&SQ]"
(孤立無援の)アルファベット
40 48 50 58 20 28 30 38
00 10 20 30 40 50 60 70
0 H P X $ " 0 8
1 A I Q Y = ' 1 9
2 B J R Z < ( 2 [ .. [%(] {[}
3 C K S & > ) 3 ] .. [%)] {]}
4 D L T @ + ; 4 % .. [%:] {%}
5 E M U # - : 5 LF .. [%,] {\}
6 F N V ? * , 6 BS .. [%7]
7 G O W ! / . 7 DL .. [%>] {_}
(予約語のない)トークン
00 10 20 30 40 50 60
00 & &, .AND, PUSH,. TAG,. HERE: (
01 $ CUT, .OR, POP,. PORT,. JUMP: .(
02 . NOT, .XOR, WRITE,. LINK,. CHECK: (
03 @ - .SHIFT, READ,. WITH,. COPY: DATA:(
04 @ . + .@ .LIKE,. IF: DO:(
05 # = - .= .SIZE,. LOOP: LET:(
06 # < * .< .SAME,. .. ;
07 ? > / .> .BY,. ;: )
(原始的な)コンソール
[1:BEGIN(10);]--------------------------------------------[002]
)"[TEST&SQ]"
*>CHOOSE
10..$MY&PROG.SAME,.LET:(
11..$TEST&SQ.SAME,.LET:(
12..&
*<BEGIN(10)
* PI*8*8=' 201.0624'
* 3; [*]; 4
* 00014
*<
[0]HELP-[1]END--[2]UP---[3]DOWN-[4]STOP-[5]RUN--[6]WAIT-[7]QUIT-
HELP HOME BLOCK EDIT LOAD BEGIN common
0..HELP 0..HELP 0..HELP 0..HELP 0..HELP 0..HELP 8..repeat
1..END 1..END 1..END 1..END 1..END 1..END 9..macro
2..UP 2..UP 2..FROM 2..UP 2..UP 2..UP
3..DOWN 3..DOWN 3..TO 3..DOWN 3..DOWN 3..DOWN
4..LEFT 4..PUT 4..OLD 4..LEFT 4..LESS 4..STOP
5..RIGHT 5..GET 5..NEW 5..RIGHT 5..MORE 5..RUN
6..BACK 6..LOAD 6..TAKE 6..BLOCK 6..EDIT 6..WAIT
7..GO 7..BEGIN 7..BRING 7..INPUT 7..SAVE 7..QUIT
(数字と点だけの)テンキー入力
%[nihongo de aisatsu]%"[..99 95186595735 6 722 6 3185375854]"
ni ho n go de ai sa t su
%[This is a sample.]%"[..98 7586185 6 185 6 3 6 8539474902 03]"
T hi s i s a sa m p le .
%[X.=$+1.2;\0D]%"[..97 83 03 95 71 93 01. 3 02. 5 .79]"
X . = $ + 1 . 2 ; CR
%[IF:1?..P;:1..Q;]%"[..97 184 02 01. 79 33 .74 052 01. 33 .80 05]"
I F : 1 ? .. P ;: 1 .. Q ;
BS HT CR SU S1 SL T S N
P T K F S H M N R U O SP
B D G V Z X Y J W I E A
C A Q A L A ; A
! ~ ? ; ; ; ^ | _ \ % = 7 8 9
{ \ } [ % ] < = > ( ; ) 4 5 6
$ @ # ' ` " * - + , : . 1 2 3
& ; ; ; / ; 0 A 0 ;
(多モードの)中間コード
$CODE&OF(C; J; L; K&M; N#; V#).SAME,.DATA:(
IF:C=0"[PRIMARY; 0<J=LNG,L<4]"..DATA:(
IF:K&M=71..USE,CODE&OF(1; 1; 1; 71; N#; &)
;:L ;:L ;:L ;:C=1"[STANDARD]"..DATA:(
IF:K&M=71..DATA:(1&00+N)"[N<70]"
;:L ;:1..DATA:(1&70+J; L; K&M; N; V)
;:C=2"[NAME&TB; STACK]"..DATA:(
IF:N<70..DATA:(2&00+N;
IF:N=00"[&]"..DATA:(00; Z8; Z8)"[EMPTY]"
;:N=04"[@]"..DATA:(K&M; L8; A8REF)
"[@A8REF=DATA:(1&70+J; L; 20; V)]"
;:N=60"[(]"..DATA:(
IF:1?..DATA:(TAG&ID; A8NEXT; A8EXEC)
;:1..DATA:(00; Z8; A8EXEC))
;:N=66"[;]"..DATA:(64; Z8; A8REF)"[PARAM]"
;:1..DATA:(00; Z8; A8NAME)"[N=40+7?]")
;:1..DATA:(2&70+L; K&M; N8; V8)"[0<L<10]")
;:C=3"[BIN]"..DATA:(3&00+K&M; N8)"[L=M]"
)"[M=LNG,N; L=(LNG,N+LNG,V)]";
補足
・スコープは次の同名の宣言/定義まで.
・文字列も実数値で扱う.
[ABC]=001.0203; %[DE]%=104.212(octal)
・真理値は整数部最下位ビットで判定.
(NOT,NOT,X)=X
・関数は値呼びのみ.仮引数は一般の変数(共用可).
・引数不足時は放置(非クリア).引数過剰時は反復.
[F2(A; B; C; D)].EQ&,[F2(F2(F2(A; B); C); D)]
[F3(A; B; C; D)].EQ&,[F3(F3(A; B; C); C; D)]"[≦]"
・関数に対する括弧の省略.
[X.F1].EQ&,[F1(X)]; [F1&,X].EQ&,[F1(X)]
[X.F2(Y)].EQ&,[F2(X; Y)]; [X.F2&,Y].EQ&,[F2(X; Y)]
・インデントは行頭レベル対応.
行頭,行末のレベル差は1以下.
・簡易アウトライン表示
行頭のレベルで改行/非改行を制御.
蛇足 (オブジェクトもどき)/*Ver. 2: 1990 年代*/
TAG,.$T&SHAPE; $T0.LIKE,.T&SHAPE;
$X0.$Y0.LIKE,.R&; $VISIBLE0.LIKE,.I&; $P.LIKE,.A&;
$TMP.LIKE,.DATA:(COPY:77..0);
$SHAPE(T0).SAME,.DATA:(T0; X0; Y0; VISIBLE0.=0);
$T(P).SAME,.A&@P;
$X(P).SAME,.R&@(P+04);
$Y(P).SAME,.R&@(P+13);
$V(P).SAME,.I&@(P+22);
TAG,.$T&POINT;
$POINT(X0; Y0).SAME,.SHAPE(T&POINT);
$HIDE&(T&POINT; P).SAME,.DO:(
DRAW&POINT(P.X; P.Y; 0); VISIBLE0.=0);
TAG,.$T&CIRCLE; $R0.LIKE,.R&;
$S0.LIKE,.SHAPE"[(T)]";
$R(P).SAME,.R&@(P#S0);
$CIRCLE(X0; Y0; R0).SAME,.DATA:(
SHAPE(T&CIRCLE); R0);
$HIDE&(T&CIRCLE; P).SAME,.DO:(
DRAW&CIRCLE(P.X; P.Y; P.R; 0); VISIBLE=0);
$NEW(T&CIRCLE; X0; Y0; R0).SAME,.A&.(
DP; DO:(TMP.=CIRCLE(X0; Y0; R0); TMP.@DP));
$P1.LIKE,.POINT(10; 20);
$C1.LIKE,.CIRCLE(20; 30; 5);
$P&C2.LIKE,.A&; P&C2.=NEW(T&CIRCLE; 30; 40);
$HIDE(P).SAME,.HIDE&(P.T; P);
$NEW&X.LIKE,.X0; $NEW&Y.LIKE,.Y0;
$MOVE&TO(P; NEW&X; NEW&Y).SAME,.DO:(
P.HIDE; P.X.=NEW&X; P.Y.=NEW&Y; P.SHOW);
C1#.MOVE&TO(40; 50); P&C2.MOVE&TO(50; 60);
IF:P&C2.IS&VISIBLE..P&C2.HIDE;
以上