|
あくつです。
既にこの話題の関心を失ってると思いますが。(^^;)
● (1) 引用
hidesoft.4:03341| RE 03340 うまく変換できるようになりました。
>前のはうっかり行頭に全角スペースを入れてしまったのでエラーになるはずです。
● (2) 引用
hidesoft.4:03370| RE 03369 構文エラーの件
>この2行、行頭の空白が全角スペースです。
>半角スペースにしたら通ります。
>
>ブランクが長くて昔からこうだったか思い出せません。(^^;
>ヘルプに書いてあるかな?
● (3) 引用
hidesoft.4:03372| RE 03371 構文エラーの件
>※でも変数名、インスタンス名に漢字は使わない。ちなみにJavaでも全角空白は
>特別扱い。スペースや水平タブとも違うし、普通の文字とも違う。そもそも全角
>空白が文字定数やコメント以外の場所にあると、特別なエラーが出る。
● (4)
すごーく昔は知りませんが。
空白文字を許す場所に、全角空白があってもマクロは動きました。
これは確かです。
行頭のインデントを全部全角空白にして実験したことがあります。
v 3.00 以降です。
● (5)
//それと、変数名に漢字が使えます。
$$へんすう="hoge";
##数値=123;
message "hello world";
endmacro;
● (6)
//ただし、それを参照することはできません。#意味無いじゃん。
$$へんすう="hoge";
message $$へんすう;
endmacro;
● (7)
//ラベルは日本語で平気です。
call らべる;
endmacro;
らべる:
message "hello world";
return;
● (8) ラベル考( サブルーチン内サブルーチン 1 )
//メニューなどで使う内部サブルーチン。
//この場合、外側のサブルーチンとローカル変数は同じ。
main:
// 初期化。
showmenu:
menuarray $$menu, ##size;
##i = result;
if( ##i == -1 ){
}else if( ##i == 0 ){
goto showmenu;
}
● (9) ラベル考( サブルーチン内サブルーチン 2 )
// hidemaru
// scheme の名前つき let 風に、秀丸ラベルを使う。
call hanoi 3;
endmacro;
hanoi:
##2 = 'a'; ##3 = 'b'; ##4 = 'c';
hanoi_iter:
if( ##1 > 0 ){
call hanoi_iter ##1 - 1, ##2, ##4, ##3;
insert str(##1) + " 番の円盤を " + char(##2) + " 柱から " +
char(##3) + " 柱へ移動。\n";
call hanoi_iter ##1 - 1, ##4, ##3, ##2;
}
return;
$ gosh -V
Gauche scheme interpreter, version 0.6.1 [sjis]
$ cat h.scm
(define (hanoi n)
(let hanoi-iter ((i n) (a 'a) (b 'b) (c 'c))
(if (> i 0)
(begin
(hanoi-iter (- i 1) a c b)
(format #t "~a 番の円盤を ~a 柱から ~a 柱へ移動。~%" i a b)
(hanoi-iter (- i 1) c b a)))))
$ gosh -l ./h.scm -e '(hanoi 3)' -e '(exit)'
● (10) スコープ
//外側のサブルーチンと異なるスコープを作るのでは無い。
call fib 8;
message str(##return);
endmacro;
// #_N はグローバル。
fib:
if( ##1 <= 2 ) return 1;
#_N = ##1; ##1 = 3; ##2 = 1; ##3 = 1;
fib_iter:
if( ##1 == #_N ){
return ##2 + ##3;
}else{
call fib_iter ##1 + 1, ##3, ##2 + ##3;
}
return ##return;
;; n は関数ローカル。
(define (fib n)
(if (<= n 2)
1
(let fib-iter ((i 3) (n2 1) (n1 1))
(if (= i n)
(+ n2 n1)
(fib-iter (+ i 1) n1 (+ n2 n1))))))
● (11) 上記をふまえた上での利用法
// カーソル位置のスタイルシートを得る。
call getCSS colorcode & 0x1f;
message $$return;
endmacro;
// ラベルにマルチバイト文字を使う。
getCSS:
if( 0 ){
// 他から使われることの無いサブルーチン。
前景色ちょうだい:
call RGBちょうだい ##1, 0;
return $$return;
背景色ちょうだい:
call RGBちょうだい ##1, 1;
return $$return;
RGBちょうだい:
##bgr = getconfigcolor(##1, ##2);
##r = (##bgr & 0x0000ff) * 0x010000;
##g = (##bgr & 0x00ff00);
##b = (##bgr & 0xff0000) / 0x010000;
##rgb = ##r + ##g + ##b;
$$rgb = rightstr("000000" + hex(##rgb), 6);
return $$rgb;
}
call 前景色ちょうだい ##1; $$fg = $$return;
call 背景色ちょうだい ##1; $$bg = $$return;
$$css = "{ color=#" + $$fg + "; background=#" + $$bg;
##st = getconfigcolor(##1,2);
if( ##st >= 8 ) ##st = 1;
if( ##st & 0x01 ) $$css = $$css + "; font-weight:bold";
if( ##st & 0x02 ) $$css = $$css + "; text-decoration:underline";
if( ##st & 0x04 ) $$css = $$css + "; font-style:italic";
$$css = $$css + " }";
return $$css;
|
|