: ex
.
.
.
ex
.
;
ã®ãããªååž°åŒã³åºãã®ç¡éã«ãŒããæžããŸãããã
ãã®ãããªæžãæ¹ã¯ãŸããã®ã§ããããïŒ
ïŒãªã¿ãŒã³ã¹ã¿ãã¯ããªãŒããŒãããŒãããšãïŒïŒ
ã¡ã¢ãªã®å°ãªããUNIXã§ãªããã·ã³ã§ãã
å çšã®æçš¿ãããåŸãããæ€èšŒããŠã¿ãŸããã
: ex ex ;
ãã® ex åŒã³åºãã£ãŠããã ã®ãžã£ã³ããªã®ïŒ
ke...@pp.iij4u.or.jpãã:
> ååž°åŒã³åºãã§ãã以äžãã©ããã§åŒã³åºãããããªããšãããªãã®
> ã¯ãFORTHã§ãããªãã§ããåãã ãšæããŸããååž°ãšã«ãŒãã¯å¥ç©
> ã§ãã
ããâŠforthææã¯ç¥ããŸãããã©ãLispãšãMLãšã系統ã®å€ãã®èš
èªåŠçç³»ã¯tail recursive optimizationãšããŠæ«å°Ÿååž°ãåãªãå
é
ãžã®ãžã£ã³ãã«å€æããŸããããããŠããã°ã©ãããã®ããšãåæãšã
ãŠããã°ã©ã ãæžããŸããããããææãããããã
ã§ãããå°ããšãããªãã§ãããã¯éããã§ã¯ã ä¹ é
P.S. ç°¡åã«æ€åºã§ããŠå®å
šãªæé©åãªãã ããCãšãã§ããã£ãŠæ¬²ãã
ãããªæ°ãããâŠèŠæ Œã§ã§ããªãã®ãããã?
In article <8f4393$1p...@utogw.gssm.otsuka.tsukuba.ac.jp> ,
ku...@gssm.otsuka.tsukuba.ac.jp writes
>P.S. ç°¡åã«æ€åºã§ããŠå®å
šãªæé©åãªãã ããCãšãã§ããã£ãŠæ¬²ãã
> ãããªæ°ãããâŠèŠæ Œã§ã§ããªãã®ãããã?
ããã€ããããããã³ã³ãã€ã©ã¯ãããŸãããããªãã·ã§ã³ã§æå®
ããæ¹ãæ®éã®ããã§ãã
int fact(int i,int j)
{
if (i<=0) return j;
else return fact(i-1,j*i);
}
ã -O ã§ã³ã³ãã€ã«ãããšã
fact:
pushl %ebp
movl %esp,%ebp
movl 8(%ebp),%edx
movl 12(%ebp),%eax
.L8:
testl %edx,%edx
jle .L6
imull %edx,%eax
decl %edx
jmp .L8
.align 4
.L6:
leave
ret
ãšãªããŸãã
> ããâŠforthææã¯ç¥ããŸãããã©ãLispãšãMLãšã系統ã®å€ãã®èš
>èªåŠçç³»ã¯tail recursive optimizationãšããŠæ«å°Ÿååž°ãåãªãå
é
>ãžã®ãžã£ã³ãã«å€æããŸããããããŠããã°ã©ãããã®ããšãåæãšã
>ãŠããã°ã©ã ãæžããŸããããããææãããããã
ãšãããããããããªããšå®çšçãªã³ã³ãã€ã©ãšèšãããªãã§ããã
stack ãççºããŠãGC ããŸããã®ã§...
---
Shinji KONO @ Information Engineering, University of the Ryukyus
æ²³éçæ²» @ çç倧åŠå·¥åŠéšæ
å ±å·¥åŠç§
ãååž°åŒã³åºãã§ãã以äžãã©ããã§åŒã³åºãããããªããšãããªãã®ã¯ã
FORTHã§ãããªãã§ããåãã ãšæããŸãã
ãååž°ãšã«ãŒãã¯å¥ç©ã§ãã
ãããã«ååž°ã®ãµã³ãã«ããããŸããã
http://lab.ee.uec.ac.jp/text/forth/prog/recursion.txt
Yohichi OHTSUKAããã¯<8f308a$h0e$1...@nn-tk104.ocn.ad.jp>ã§ãããã£ããã
ãŸããã
ããªã¿ãŒã³ã¹ã¿ãã¯ã«ã¢ãã¬ã¹ãç©ãã§ããã®ã§ããã ã®ãžã£ã³ãã§ã¯ãããŸ
ãããïŒãµãã«ãŒãã³ïŒã³ãŒã«ã®æ¹ãè¿ããšæããŸãã
--
/*******************************
Majima Kenichi
ke...@pp.iij4u.or.jp
*******************************/
In article <8f41ak$bd$1...@news00.iij4u.or.jp>
Majima Kenichi <ke...@pp.iij4u.or.jp> writes:
> >
> >: ex ex ;
> >
> >ãã® ex åŒã³åºãã£ãŠããã ã®ãžã£ã³ããªã®ïŒ
>
> ããªã¿ãŒã³ã¹ã¿ãã¯ã«ã¢ãã¬ã¹ãç©ãã§ããã®ã§ããã ã®ãžã£ã³ãã§ã¯ãããŸ
> ãããïŒãµãã«ãŒãã³ïŒã³ãŒã«ã®æ¹ãè¿ããšæããŸãã
>
å®éã«ã³ã³ãã€ã«ãããã³ãŒãã調ã¹ãŠã¿ããã
ãªã¿ãŒã³ã¢ãã¬ã¹ãã¹ã¿ãã¯ã«ç©ãã³ãŒã«ã®ç¡éã«ãŒãã«ãªã£ãŠããŸããã
ã¡ãã£ãšèšèã®ä¿®æ£ãã
ç§> å®éã«ã³ã³ãã€ã«ãããã³ãŒãã調ã¹ãŠã¿ããã
ç§> ãªã¿ãŒã³ã¢ãã¬ã¹ãã¹ã¿ãã¯ã«ç©ãã³ãŒã«ã®ç¡éã«ãŒãã«ãªã£ãŠããŸããã
ã³ãŒã«ã®ç¹°ãè¿ãã§ãããéããŠããªãã®ã§ã«ãŒãã§ã¯ãªãã§ããïŒ
ãžã£ã³ããªãã«ãŒããã
ke...@pp.iij4u.or.jpãã:
> 1) tail recursive optimization
> 2) æ«å°Ÿååž°
> ã«ã€ããŠãæãé¡ããªãã§ããããã
ã©ãã説æäžè¶³ã§ãããŸãããForthãæžããªãã®ã§Cã§äŸãæžããŸã
ãã©ã
int lookup(char *s, char c) {
if(*s == '\0')
return 0;
else if(*s == c)
return 1;
else
return lookup(s+1, c); /**/
}
ã€ãŸãæååsã®äžã«æåcããããã©ãã調ã¹ããšããååž°é¢æ°ãäœã£
ããšããŸãã/**/ã®lookupã®åŒã³åºãã¯
(1) èªåèªèº«ãžã®åŒã³åºãã§ããã
(2) æ»ã£ãŠããåŸããããšã¯è¿å€ããã®ãŸãŸèªåã®è¿å€ãšããŠ
returnããã ãã
ã§ãããã®ãããªæ§è³ªãæã€ååž°åŒã³åºãããæ«å°Ÿååž°ã(tail
recursion)ãšåŒã³ãŸããtail recursion optimizationãšããã®ã¯ã
æ«å°Ÿååž°ãåŒã³åºãã®ãããã«åŒæ°ã®çœ®ãæã+å
é ãžã®ãžã£ã³ãã«
æžãæãããšããæé©åãèšããŸããäžã®äŸãªã次ã®ããã«ãªããŸãã
int lookup(char *s, char c) {
top:
if(*s == '\0')
return 0;
else if(*s == c)
return 1;
else {
s = s + 1; c = c; goto top; }
}
ãã®ãããªæé©åã¯ããã°ã©ã ã®æå³ã倿Žããããªããã€é¢æ°åŒã³åº
ã/æ»ãã®ãªãŒãããããåæžã§ãããã倧å€å¹æçã§ãããŸããèŠã
ç®ã¯ååž°ã§ãããªããã«ãŒãã«ãªã£ã¡ããã®ã§ããã倿°ååã£ãŠãã¹
ã¿ãã¯ãããµããããšããããŸããâ»ã
ã§ãLispç³»ãMLç³»ã®èšèªã§ã¯â»ãåæãšããŠæ«å°Ÿååž°ãªã³ãŒããæžã
ã®ã¯ãããããŸããã®ã¹ã¿ã€ã«ã ããšãã話ã§ããã
ããã«ããŸãã§ãããäžã®æ¡ä»¶(1)ãåé€ããŠã(2)ãæºããå Žåã¯åŒ
æ°ãæž¡ããäžã§ãã®é¢æ°ã®å
é ã«çŽæ¥ãžã£ã³ããããšããæé©åããã
ã§ããããã¯äœãšèšãååã§åŒã¶ãã ã£ãããªã
> ç°¡åãããªãã£ããããã ããç¥ããªããŠãçããŠã¯ãããããã§ããã
ã§ãç°¡åã ã£ãã§ãããã? :-) ä¹ é
Yohichi OHTSUKA wrote:
> ããã«ã¡ã¯ã倧å¡ïŒ forthå
¥éè
ã§ãã
>
> : ex
> ex
> .
> ;
>
> ã®ãããªååž°åŒã³åºãã®ç¡éã«ãŒããæžããŸãããã
> ãã®ãããªæžãæ¹ã¯ãŸããã®ã§ããããïŒ
> ïŒãªã¿ãŒã³ã¹ã¿ãã¯ããªãŒããŒãããŒãããšãïŒïŒ
> ã¡ã¢ãªã®å°ãªããUNIXã§ãªããã·ã³ã§ãã
äœã æšã§ãã
æšæºçãªFORTHã§ã¯ã
: ex ... ex ;
ãšããŠããååž°ã«ã¯ãªããŸããã
以åã«ãâexâãå®çŸ©ãããŠããã°ããããåŒã³åºãã³ãŒãã«ãªãã®ã§ã
ç¡éã«ãŒãã«ã¯ãªããŸããã
å®çŸ©ãããŠããªããã°ãæªå®çŸ©ãåå ã§ãšã©ãŒã«ãªããŸãã
FORTH ã§ååž°åŒã³åºããããã«ã¯ãâRECURSEâ ã䜿çšããŸãã
ååž°ã§ç¡éã«ãŒãã«ãªããšããªã¿ãŒã³ã¹ã¿ãã¯ããªãŒããŒãããŒ
ããŸãã
ããããããªãã§ããããšé©ãããã£ãã®ã§ãããèå¿ãªããŒã¯ãŒããïŒã€ãš
ãããããããŸããã§ããã
ãååž°ããæããã³ãŒããæç€ºçã«èšè¿°ããªããŠãããèšèªä»æ§ã«ãªã£ãŠã
ãããšããããšãããããšã¯æšæž¬ã§ããã®ã§ããã
ãããç°¡åã«èª¬æã§ããã®ã§ããã°ã
1) tail recursive optimization
2) æ«å°Ÿååž°
ã«ã€ããŠãæãé¡ããªãã§ããããã
ãç°¡åãããªãã£ããããã
ããç¥ããªããŠãçããŠã¯ãããããã§ããã
# è»åŒ±è ã§ãã¿ãŸããã
In article <18644.9...@rananim.ie.u-ryukyu.ac.jp>
ko...@ie.u-ryukyu.ac.jp (Shinji KONO) writes:
> ããã€ããããããã³ã³ãã€ã©ã¯ãããŸãããããªãã·ã§ã³ã§æå®
> ããæ¹ãæ®éã®ããã§ãã
gcc ãªã©ã« -O ãã€ããªããšããæé©åã¯äžåãããªããšãã
æç€ºã«ãªããŸãã(ããïŒ)
ã§ãç¹å®ã®æé©åã«é¢ããŠãããªãã·ã§ã³ã§æå®...ããšããã®ã¯ã
ãã®æé©åå°çšã®ãªãã·ã§ã³ãæå®ããå¿
èŠãããããšãããµãã«
è§£éããã®ããµã€ãŒã ãšæãã®ã§ãã...
ã»ã
ho...@sra.co.jpãã:
> ã§ãç¹å®ã®æé©åã«é¢ããŠãããªãã·ã§ã³ã§æå®...ããšããã®ã¯ã
> ãã®æé©åå°çšã®ãªãã·ã§ã³ãæå®ããå¿
èŠãããããšãããµãã«
> è§£éããã®ããµã€ãŒã ãšæãã®ã§ãã...
æ²³éãããããããæå³ã§æžããããããªãã®ããªãããã§ãããŠãŠ
gccã®manããŒãžãèŠãã
-mtail-call
ãšãããªãã·ã§ã³ãæå®ãããšãã ãæ«å°Ÿååž°ã®æé©åããããšæžããŠ
ãããŸãããããã§çåãªãã§ãããããã®æé©åãæ£ãããªãå Žåã®
æ€åºã¯å®å
šã§ã¯ãªã(ãããã®ãªãã·ã§ã³ã¯ããã©ã«ãã§ã¯ãªã)ããšã
ããã§ããããã
ã©ãããé£ããããããã§ãããã? ä¹ é
ç§:
> -mtail-call
ããã¯i960çšã®ã³ãŒãçæã§ã®ã¿å©çšããããšæžããŠãããŸããã§ã
ããã¥ã¢ã«ã®èšè¿°ã¯ãã·ã³ç¬ç«æé©åéšåã§ãåæ§ã®æé©åããããã
ã«èªããã®ã§ãããã©ããªãã§ãããã?
ã¡ãªã¿ã«gcc 2.7.xã®manããŒãžã§ãã ä¹ é
In article <8f7n0n$2e...@utogw.gssm.otsuka.tsukuba.ac.jp> ,
ku...@gssm.otsuka.tsukuba.ac.jp writes
> æ²³éãããããããæå³ã§æžããããããªãã®ããªãããã§ãããŠãŠ
>gccã®manããŒãžãèŠãã
ãšæã£ããã ãã©ãfactorial ãããã ãš -O ã§æ«å°Ÿæé©åããã
ã¿ããã§ããã
> ã©ãããé£ããããããã§ãããã? ä¹ é
return recursive(....) ã§ãæ¬åœã«åŠçãçµããã©ãããæ€åºã
ãã®ãããã©ããšã? alloca() ãšããauto_ptr ãšãã¯ã¡ãã£ãšå°
ããŸããããéã«ã
recursive(....);
break;
...
}
if() ....;
...
return();
ãšããã£ãæã«ãæ¬åœã«çµäºããã®ãã©ããè¯ãåãããªããšã...
ïŒ x86 ã® gcc-2.7.2.3 ã§è©Šãããšãããæ²³éããã®ãã£ããã
ïŒ éããgcc -O ã§ tail recursion ã®æé©åãè¡ãªãããŸããã
ïŒ ãŸãã-mtail-call 㯠Invalid option ã«ãªããŸããã
In article <8f7n76$2e...@utogw.gssm.otsuka.tsukuba.ac.jp>
ku...@gssm.otsuka.tsukuba.ac.jp writes:
> ããã¯i960çšã®ã³ãŒãçæã§ã®ã¿å©çšããããšæžããŠãããŸããã§ã
> ããã¥ã¢ã«ã®èšè¿°ã¯ãã·ã³ç¬ç«æé©åéšåã§ãåæ§ã®æé©åããããã
> ã«èªããã®ã§ãããã©ããªãã§ãããã?
>
> ã¡ãªã¿ã«gcc 2.7.xã®manããŒãžã§ãã ä¹
é
gcc ã® info (Node: Passes) ã«ãããšãRTL generation ã®æ®µéã§
tail recursion ãæ€åºãããããã§ããããã«ãtail-recursive
ãªé¢æ°ã¯ inline å±éãå¯èœ (ïŒ) ã ããã§ãã
ã§ã-mtail-call ã§ãããgcc ã®å Žåã-m ã§å§ãŸããªãã·ã§ã³ã¯
å cpu ã«ç¹åãããã®ãªã®ã§ãi960 åºæã®åé¡ããããšããããš
ã§ã¯ãªãã§ããããïŒ
ã»ã
In article <8f4393$1p...@utogw.gssm.otsuka.tsukuba.ac.jp>
ku...@gssm.otsuka.tsukuba.ac.jp writes:
| P.S. ç°¡åã«æ€åºã§ããŠå®å
šãªæé©åãªãã ããCãšãã§ããã£ãŠæ¬²ãã
| ãããªæ°ãããâŠèŠæ Œã§ã§ããªãã®ãããã?
ããŒã«ãªã«ãŒã·ãã³ãŒã«ã«ããã«ãŒãã«å¯ŸããŠãã«ãŒãã¢ã³ããŒãªã³ã°ããã¯
ãã«åãªã©ã®æé©åãæœãã®ãåŠãããšããåé¡ããããŸãããããããè¡ã
å Žåã颿°éããŸããã£ãæé©åãåæã«ãªãã®ã§ããããããå®è£
ãšãããª
ãå®è£
ãåºãŠãããã§ãããããªã£ãå Žåãäžè¬ã«ã¯ã«ãŒãã¯ã«ãŒãæ§æã§ãã£
ãã»ããããæé©åãæåŸ
ã§ããããšããäžæåŸãæ®åãããã§ãããããªã£
ãå Žåã«ãç§»æ€ãæé»ã«ã»æç€ºçã«åæãšããéçºã§ããŒã«ãªã«ãŒã·ãã³ãŒã«
ãç©æ¥µçã«äœ¿ããããã©ããçåã§ãããããè£ã£ãŠããŸãããã¡ãªãããããŒ
ã«ãªã«ãŒã·ãã³ãŒã«ã§æžãããšã«ã€ããŠããã°ããã®ã§ããããŠããããå¯èª
æ§ã»çè§£æ§ã®èгç¹ããã¯ã©ããªãã§ããããéã«é¢æ°åŒã³åºãã§æžãããšã§ã
ãã£ãŠãããã«ãããªã£ããã¯ããŸããã§ããããïŒé¢æ°åãèããã®ãé¢åã ã..ã
# ãã¯ãlambdaãå°å ¥ãã鹿..ã
--
§NTTSâFT æè¡éçºéšãšã¬ã¯ããããã¯ã³ããŒã¹æè¡ã»ã³ã¿ãŒ äžå æœ€äº Â§
PGP Key fingerprint = B7 C0 CB 1F 1C 88 69 2A 25 36 8A EE 93 A3 61 72
In article <8f7k4q$2e...@utogw.gssm.otsuka.tsukuba.ac.jp> ku...@gssm.otsuka.tsukuba.ac.jp writes:
| ããã«ããŸãã§ãããäžã®æ¡ä»¶(1)ãåé€ããŠã(2)ãæºããå Žåã¯åŒ
| æ°ãæž¡ããäžã§ãã®é¢æ°ã®å
é ã«çŽæ¥ãžã£ã³ããããšããæé©åããã
| ã§ããããã¯äœãšèšãååã§åŒã¶ãã ã£ãããªã
äžè¬ã«ã颿°èªåèªèº«ãä»ã®é¢æ°ãåããã(2)ãæºããå Žåãæ«å°Ÿååž°çåŒ
ã³åºããšåŒã³ãŸããç¹ã«(1)ãæºããå Žåãèªå·±æ«å°Ÿååž°çåŒã³åºããšåŒã³ãŸ
ããèªå·±æ«å°Ÿååž°çåŒã³åºããæ«å°Ÿååž°çåŒã³åºããšèšãããšããããŸãã
ãšãã説æãäœãã®æç§æžã«æžããŠãããŸããã
ãRevised(5) Report on the Algorithmic Languageãã§ã¯ãProper tail
recursionããšããçšèªã䜿ã£ãŠããŸãã
# ãtail mergeããšããèšèãã©ã£ãã§èŠãããšããããããªã
--
é è€ æž
äž <su...@ks-and-ks.ne.jp>
http://pub.ks-and-ks.ne.jp/pgp-public-key.html
(ãšããã§jlug.*ãç¥ã£ãŠããŸããïŒ)
In article <8f7n0n$2e...@utogw.gssm.otsuka.tsukuba.ac.jp>
ku...@gssm.otsuka.tsukuba.ac.jp writes:
> -mtail-call
ãã, i960 çšã®ãªãã·ã§ã³ã§ãã. ãšããããšã§
> ã©ãããé£ããããããã§ãããã?
ã¢ãŒããã¯ãã£ã«äŸåããéšåã§ã¯ãªãããšæ³åããŸã (-mtail-call ã«ã€ã
ãŠã¯).
ããš,
| This man page is not kept up to date except when volun-
| teers want to maintain it.
ãšããããšã§ãã®ã§ãªãã¹ã info ã«é Œãã®ãããããã§ããã.
--
Kazuo Fox Dohzono / doh...@hf.rim.or.jp
[12],(6,9),0,0,2
ueh...@po.ntts.co.jpãã:
> ããŒã«ãªã«ãŒã·ãã³ãŒã«ã«ããã«ãŒãã«å¯ŸããŠãã«ãŒãã¢ã³ããŒãªã³ã°ããã¯
> ãã«åãªã©ã®æé©åãæœãã®ãåŠãããšããåé¡ããããŸãããã
æœãã°ãããšæããã©ãªãŒã
> ãããè¡ãå Žåã颿°éããŸããã£ãæé©åãåæã«ãªãã®ã§ããã
> ãããå®è£
ãšãããªãå®è£
ãåºãŠãããã§ãã
ãããæé©åã¯åŠçç³»ã«ãã£ãŠéãã§ãããã
ç§ãæåã«èšãããã£ãã®ã¯LispææãMLææã§ã¯tail recursive
optiomizationã¯åœç¶ãšèããããŠãããšãã話ã§ããŠâŠ
> ãããè£ã£ãŠããŸãããã¡ãªãããããŒã«ãªã«ãŒã·ãã³ãŒã«ã§æžãã
> ãšã«ã€ããŠããã°ããã®ã§ããããŠããããå¯èªæ§ã»çè§£æ§ã®èгç¹ã
> ãã¯ã©ããªãã§ããããéã«é¢æ°åŒã³åºãã§æžãããšã§ããã£ãŠãã
> ãã«ãããªã£ããã¯ããŸããã§ããããïŒé¢æ°åãèããã®ãé¢åã
> ã..ã
ã ããèšèªã«ã«ãŒãæ§æããªããšããã£ãŠãå
šè¬ã«ååž°é¢æ°äœ¿ããŸã
ãã ããããã«åãããããšãâŠãããæ°åã®åé¡ã§ã¯ãããŸãã
> # ãã¯ãlambdaãå°å ¥ãã鹿..ã
ããã¯éЬããªãããã..ã ä¹ é
P.S. Cã§ãã§ãããããz = (int x){ return x+1 }(3);ããšã?
In article <8f85cn$2i...@utogw.gssm.otsuka.tsukuba.ac.jp> ku...@gssm.otsuka.tsukuba.ac.jp writes:
| ã ããèšèªã«ã«ãŒãæ§æããªããšããã£ãŠãå
šè¬ã«ååž°é¢æ°äœ¿ããŸã
| ãã ããããã«åãããããšãâŠãããæ°åã®åé¡ã§ã¯ãããŸãã
| > # ãã¯ãlambdaãå°å
¥ãã鹿..ã
|
| ããã¯éЬããªãããã..ã ä¹
é
|
| P.S. Cã§ãã§ãããããz = (int x){ return x+1 }(3);ããšã?
ãã§ãããã«ãŒãæ§æã¯lambdaã䜿ã£ã#defineãã¯ãã§å®çŸ©ãé±ã
ãšæã£ãããç¡å颿°ãååž°åŒã³åºããããããããå¿ããŠããŸã£ãã
äžåç¹é¢æ°ã䜿ããã§ããã£ãã
ueh...@po.ntts.co.jpãã:
> ãã§ãããã«ãŒãæ§æã¯lambdaã䜿ã£ã#defineãã¯ãã§å®çŸ©ãé±ã
> ãšæã£ãããç¡å颿°ãååž°åŒã³åºããããããããå¿ããŠããŸã£ãã
> äžåç¹é¢æ°ã䜿ããã§ããã£ãã
ããã¯label/labelsã®ããšéŽšã
(labels ((foo (x) .... (bar ...))
(bar (y) .... (foo ...)))
(foo 3))
ããããããŸã§ããŠç¡åã«ããªããŠãâŠ ä¹ é
> ããã«ããŸãã§ãããäžã®æ¡ä»¶(1)ãåé€ããŠã(2)ãæºããå Žåã¯åŒ
>æ°ãæž¡ããäžã§ãã®é¢æ°ã®å
é ã«çŽæ¥ãžã£ã³ããããšããæé©åããã
>ã§ããããã¯äœãšèšãååã§åŒã¶ãã ã£ãããªã
ã¢ã¡ãªã«äººã®ã³ã³ãã€ã©ãŒã®ã³ã³ãµã«ã¿ã³ã㯠tail transfer ãšåŒã
ã§ããŸããã
--
çå±±ïŒ ïŒ°ïŒŠïŒµ
In article <HOSHI.00M...@srapc332.sra.co.jp>
ho...@sra.co.jp (Hoshi Takanori) writes:
> gcc ã® info (Node: Passes) ã«ãããšãRTL generation ã®æ®µéã§
> tail recursion ãæ€åºãããããã§ãã
ã§ã, ã¡ãã£ãš buggy ã§ã :-)
int
ipow (int *p, int i, int j)
{
if (i <= 0) return *p = j;
else return ipow (p, i-1, i*j);
}
ã ãšæ€åºããŠãããŸãã,
void
ipow (int *p, int i, int j)
{
if (i <= 0) *p = j;
else ipow (p, i-1, i*j);
}
ã ãšé§ç®ã§ã.
doh...@hf.rim.or.jpãã:
> ã§ã, ã¡ãã£ãš buggy ã§ã :-)
...
> ã ãšæ€åºããŠãããŸãã,
...
> ã ãšé§ç®ã§ã.
ãªãã»ã©é¢çœããç§ã説æãããšãreturnããäŸãåºããŠããŸããŸã
ãããGCCã§ãããå®è£
ãã人ããã£ã¡ãé ã«ãã£ããã§ããããã?
ç§ã®èª¬æãæçŽããã¹ããªã®ãâŠ ä¹ é
In article <8f9qs5$djl$1...@netnews.rim.or.jp> ,
doh...@hf.rim.or.jp (Kazuo Fox Dohzono) writes
>ã§ã, ã¡ãã£ãš buggy ã§ã :-)
ãŸããã³ã³ãã€ã©ã¯å®å šåŽã«æã£ãŠãããã®ã ãã...
>void
>ipow (int *p, int i, int j)
>{
> if (i <= 0) *p = j;
> else ipow (p, i-1, i*j);
>}
>ã ãšé§ç®ã§ã.
ãããäžæè°ã ãreturn å€ããªããšæé©åããªããšããåçŽãª
ããšãªã®ããªã
ããããMLãªããŠååããç¥ããªãèšèªã§æžããããå°ã£ã¡ãããŸããã
ããããããé¡ãããŸãã
ããªãã»ã©ããããã«åŒã³åºãã¯åçŽãªãžã£ã³ãã«ãªãããã¹ã¿ãã¯ã䜿ããª
ãããã©ããªã«æ·±ãåŒã³åºããŠããŠãæ»ããšãã¯ãžã£ã³ãïŒåã§ãã¿ãŸããã
ãè³¢ã人ããããã®ã§ãã
# æåŸã® 'c = c' ã¯ã説æã®ããã«ãããŠæžããŠãã ãã£ããã§ãããã
> ã§ãLispç³»ãMLç³»ã®èšèªã§ã¯â»ãåæãšããŠæ«å°Ÿååž°ãªã³ãŒããæžã
>ã®ã¯ãããããŸããã®ã¹ã¿ã€ã«ã ããšãã話ã§ããã
ããšããã§ã倧å¡ããã®æåã®è³ªåã«å¯ŸããŠããããããã©ããã§åŒã³åºãã
ãããªããšãããªãã®ã¯ãFORTHã§ãããªãã§ããåãããšçããããšããã®
ã¹ã¬ããã®çºç«¯ã ãšæãã®ã§ãããäžã®Cã®äŸã§èŠããšãifæã§ååž°åŒã³åºã
ããããŠããŸãããã
ãlispãMLã ãšããã®ifæçžåœã®èšè¿°ãäžèŠã«ãªããšããããšã§ããïŒ
ãããšããã®æ«å°Ÿååž°ã®æé©åã¯ãã€ã³ã¿ããªã¿ã§ãå®è£
å¯èœãªã®ã§ããïŒ
ãã³ã³ãã€ã©ãªãæ³åã§ããã®ã§ãããã€ã³ã¿ããªã¿ã§ãã®ãããªæé©åãã©
ããã£ãŠããã°ããã®ããããããããŸããã
ãlispã£ãŠã€ã³ã¿ããªã¿ãå€ãããªæ°ãããã®ã§ãã¡ãã£ãšæ°ã«ãªããŸããã
> ã§ãç°¡åã ã£ãã§ãããã? :-) ä¹
é
ã説æã¯å€§å€ããããããã£ãã§ããããããšãããããŸãã
In article <8fbt0m$sdu$1...@news00.iij4u.or.jp> ,
Majima Kenichi <ke...@pp.iij4u.or.jp> writes
>ãlispãMLã ãšããã®ifæçžåœã®èšè¿°ãäžèŠã«ãªããšããããšã§ããïŒ
ããã§ã!
>ãããšããã®æ«å°Ÿååž°ã®æé©åã¯ãã€ã³ã¿ããªã¿ã§ãå®è£
å¯èœãªã®ã§ããïŒ
>ãã³ã³ãã€ã©ãªãæ³åã§ããã®ã§ãããã€ã³ã¿ããªã¿ã§ãã®ãããªæé©åãã©
>ããã£ãŠããã°ããã®ããããããããŸããã
>ãlispã£ãŠã€ã³ã¿ããªã¿ãå€ãããªæ°ãããã®ã§ãã¡ãã£ãšæ°ã«ãªããŸããã
å¯èœã§ããLISP ã¯ç¹ã«é¢æ°åŒåºããéãã®ãå€ãã£ãããstack
ã®æ¶è²»ãæŒããã®ãéèŠã ã£ãã®ã§ãã€ã³ã¿ããªã¿ã§ãéèŠãªæè¡
ã§ããã
ã€ã³ã¿ããªã¿ã§ãã颿°åŒåºãæã«ã¹ã¿ãã¯ã®æäœã¯ãããªãã®ã§ã
æ«å°Ÿååž°æé©åã¯ããã®æäœãçç¥ããããšã«çžåœããŸãã
Sparc ã® UTI-LISP ã§ã¯ãregister window ã®æäœãéãã®ã§ã(åããªã
æã¯è¯ãã®ã ããåãã㊠register window ãoverflow ãããšã²ã©ãç®ã«
ãã)ããªãã¹ããregister window ã®æäœãããããããªããŠããšã
ããŠããããã§ããåç°è±äžå
çã¯ãLISP ã¯ã€ã³ã¿ããªã¿ãé«éã§ãã
å¿
èŠããããšèããŠããããã§ããã
ke...@pp.iij4u.or.jpãã:
> ãšããã§ã倧å¡ããã®æåã®è³ªåã«å¯ŸããŠããããããã©ããã§åŒã³åºãã
> ãããªããšãããªãã®ã¯ãFORTHã§ãããªãã§ããåãããšçããããšããã®
> ã¹ã¬ããã®çºç«¯ã ãšæãã®ã§ãããäžã®Cã®äŸã§èŠããšãifæã§ååž°åŒã³åºã
> ããããŠããŸãããã
ãããããã§ãã
> lispãMLã ãšããã®ifæçžåœã®èšè¿°ãäžèŠã«ãªããšããããšã§ããïŒ
ãããããããããªãã§ãããããããããåãããŸãããã€ãŸãã
ãŸããŸããã®çåã¯ãã®ifæãäžèŠã«ãªãããšãã質åã ã£ãã®ã«ãç§
ã¯ã¹ã¿ãã¯ããµããªãã«äœåã§ãåŒã¹ããšãã説æãããŠããã®ã§é£ã
éã£ãŠããã®ã§ããã倧å€å€±ç€ŒããŸããã
> ããšããã®æ«å°Ÿååž°ã®æé©åã¯ãã€ã³ã¿ããªã¿ã§ãå®è£
å¯èœãªã®ã§ã
> ãïŒã³ã³ãã€ã©ãªãæ³åã§ããã®ã§ãããã€ã³ã¿ããªã¿ã§ãã®ãããª
> æé©åãã©ããã£ãŠããã°ããã®ããããããããŸããã
åŒã¶ç¬éã«ããã¯çŸåšå®è¡ããŠãããã®ãšåããã©ããåãããŸãã
ãããŸãããã®åŒã³åºããreturnã®äžãªããé æ¬¡å®è¡ã®æ«å°Ÿã«ããããš
ãåãããŸããããã ããå¯èœã ãšæããŸãã
ããããã€ã³ã¿ããªã¿ã§ã¯ãã®æé©åããã£ãŠããªããã³ã³ãã€ã©ã
ãšãã£ãŠããããšããåŠçç³»ã¯ãããããªæ°ãããŠããŸããã
ããŒããç¥ã£ãŠã人ããŸã? ä¹ é
ko...@ie.u-ryukyu.ac.jpãã:
> ããã§ã!
æ²³éããŒããååž°ãããããªããã®ifæã¯å¿ èŠã§ããã
ã§ãªããšååž°ãæ¢ãŸããªãâŠ ä¹ é
> ããããã€ã³ã¿ããªã¿ã§ã¯ãã®æé©åããã£ãŠããªããã³ã³ãã€ã©ã
> ãšãã£ãŠããããšããåŠçç³»ã¯ãããããªæ°ãããŠããŸããã
>
> ããŒããç¥ã£ãŠã人ããŸã? ä¹
é
ãããã®äœ¿ã£ãããšã®ããLucid Common LispãšAllegro Common Lispã¯
ããã§ããã
;;CLOSã§æ«å°Ÿååž°æåŸ ããŠæžããšçãç®ã«ãããã§ããã;_;
--
;;; $Id: .signature,v 1.3 1996/09/20 07:06:26 kuroda Exp $
(define (ããã ã²ãã)
(email kur...@msi.co.jp))
sasaki tadao ããã¯ã
<3915F9BE...@ga.sony.co.jp> ã«ãããŠæžããŸããâŠ
>FORTH ã§ååž°åŒã³åºããããã«ã¯ãâRECURSEâ ã䜿çšããŸãã
"RECURSE"âŠãç¥ããŸããã§ããã
ç§ã FORTH åŠçç³»ã 8 幎åã« X68000 åãã«å®è£
ããïŒ@Niftyã®ããã°ã©ã
ã³ã°èšèªãã©ãŒã©ã :FPLããããŠã³ããŒãå¯èœã§ãïŒæã«ãåèã«ãã
å€ã FIG-FORTH ã«ã¯ç¡ããã§ãããããã®ã¯ãŒãã
ç¡ãå Žåã¯ãããã«çžåœããã¯ãŒããèªåã§ãå®çŸ©ããããšã«ãªããŸãã
åŠçç³»ã«äŸåããŸãããå€ãã®å Žåç°¡åã«å®çŸã§ãããšæããŸãã
ããšãã°ãç§ã®åŠçç³»ã§ã¯ä»¥äžã®ããã«ããŠãã¯ãŒã myself ãšããŠå®çŸããŠ
ããŸãã
: myself ( --- ) ( ååž°ç衚çŸãå¯èœã«ããã¯ãŒã )
latest lfa>cfa , ; immediate
ããã«ãã£ãŠãçŸåšã³ã³ãã€ã«äžã®ã¯ãŒãã®å®è¡éå§ã¢ãã¬ã¹ãèªåèªèº«
ã«æžã蟌ãããšãã§ããŸãã
åã¯ãŒãã説æããã«ã¯ãåŠçç³»ã®èŸæžæ§é ãã説æããªããšãããªãã®ã§ã
ããã§ã¯çç¥ããŸãã
以äžã¯ãåŠçç³»ã«ãã£ãŠã¯ååž°çšã¯ãŒããäœæå¯èœã§ãããšããå®äŸã§ãã
ã§ã¯ã
ïŒæè¿ã® FORTH åŠçç³»ã¯æ±ã£ãããšãç¡ãã®ã§ãã»ãšãã©æµŠå³¶å€ªéã§ãã
--
BEPPU, Masamichi @ KOZO KEIKAKU ENGINEERING Inc.
e-mail: mas...@kke.co.jp
"BEPPU, Masamichi" wrote:
> å¥åºæ¿éã§ããã¯ãããŸããŠã
>
> sasaki tadao ããã¯ã
> <3915F9BE...@ga.sony.co.jp> ã«ãããŠæžããŸããâŠ
>
> >FORTH ã§ååž°åŒã³åºããããã«ã¯ãâRECURSEâ ã䜿çšããŸãã
>
> "RECURSE"âŠãç¥ããŸããã§ããã
> ç¡ãå Žåã¯ãããã«çžåœããã¯ãŒããèªåã§ãå®çŸ©ããããšã«ãªããŸãã
> åŠçç³»ã«äŸåããŸãããå€ãã®å Žåç°¡åã«å®çŸã§ãããšæããŸãã
>
> ããšãã°ãç§ã®åŠçç³»ã§ã¯ä»¥äžã®ããã«ããŠãã¯ãŒã myself ãšããŠå®çŸããŠ
> ããŸãã
>
> : myself ( --- ) ( ååž°ç衚çŸãå¯èœã«ããã¯ãŒã )
> latest lfa>cfa , ; immediate
>
>
> åã¯ãŒãã説æããã«ã¯ãåŠçç³»ã®èŸæžæ§é ãã説æããªããšãããªãã®ã§ã
> ããã§ã¯çç¥ããŸãã
>
> 以äžã¯ãåŠçç³»ã«ãã£ãŠã¯ååž°çšã¯ãŒããäœæå¯èœã§ãããšããå®äŸã§ãã
>
> ã§ã¯ã
æã¯ãç¡ãã£ãããã§ãããçŸåšã®ïŒ¡ïŒ®ïŒ³ïŒ© ã§ã¯ãèŠå®ãããŠããŸãã
ã«èå³ããã人ãªãäžèšã®ãµã€ãã¯ãäžåºŠã¯èŠãŠãããã»ããè¯ãã§
ãã
http://www.taygeta.com/
ANSI FORTH ã®ããã¥ã¡ã³ãã¯ã以äžããå
¥æã§ããŸãã
http://www.taygeta.com/forth/
win32forth ãšèšãã 㪠ãå ¥æã§ããŸãã
ãŒãŒãŒãŒãŒãŒãŒãŒãŒãŒãŒãŒãŒãŒãŒãŒãŒãŒãŒãŒãŒãŒãŒãŒ
ãšããã§ããããªã¯ãŒãã¯ã©ãã§ããããã
: Coop R> R> SWAP >R >R ;
ãããã©ã䜿ãããšèšããšãäŸãã°ã
: X ." a " Coop ." z " ;
: Q1 X ." b " Coop ." A-B-Z" ;
: Q2 X ." c " Coop ." A-C-Z" ;
ïŒãå®è¡ãããšã a b z A-B-Z
ïŒãå®è¡ãããšã a c z A-C-Z
ãšãªããŸãã
ã³ã«ãŒãã³ãšèšããã ã£ãããªïŒ
æ®å¿µãªããšã¯ãdo ... loop ã®ãªãã§äœ¿ããªãããšã§ããã
ããã§ã䟿å©ã§ããã
ç§ã䜿çšããŠããforthã¯8bitãã·ã³ã«èŒã£ããã®ãªã®ã§ã
æšæºçãªFORTHã®ä»æ§ãšã¯éãããç¥ããŸããã
forthã®å
¥éæžãèªãã§å
¥ã£ãè
ã§ã¯ãªãã®ã§ã
ãã®èŸºãã®éããè§£ããªãã§ããŸãã
åæ©çãªè³ªåãªã®ã§ããã
æšæºçãªFORTHã®ãã¯ãŒãã®ã³ã³ãã€ã«ãšããèšèãšã
ãã·ã³èªã«å€æããã³ã³ãã€ã«ãšããèšèã¯éãã®ã§ããããïŒ
<8f7k4q$2e...@utogw.gssm.otsuka.tsukuba.ac.jp>ã®èšäºã«ãããŠ
ku...@gssm.otsuka.tsukuba.ac.jpããã¯æžããŸããã
>> (1) èªåèªèº«ãžã®åŒã³åºãã§ããã
>> (2) æ»ã£ãŠããåŸããããšã¯è¿å€ããã®ãŸãŸèªåã®è¿å€ãšããŠ
>> returnããã ãã
#include <stdio.h>
#include <stdlib.h>
struct well { int depth; struct well *under; };
int dig(int n, struct well *p)
{
p->depth = n;
p->under = malloc(sizeof(struct well));
if (p->under) return dig(n + 1, p->under);
return n;
};
int main()
{
struct well ground;
int depth;
depth = dig(0, &ground);
printf("%d\n", depth);
/* æ«å°Ÿååž°ã®ãšã free ã§ããã®ã? */
return 0;
}
ãããªããã°ã©ã ã ãšã©ãè§£éãããããã®ã§ããã? ã¡ãªã¿ã«ã
gcc ã®ãªãã·ã§ã³ç¡ãã§ã³ã³ãã€ã«ããŠå®è¡ãããšãSegmentation
fault ã«ãªã£ãŠããŸããŸããã(ã¹ã¿ãã¯ã溢ãã?)
#(ç§ä¿¡) ããŒã ããŒãžã®è©±ããã£ãœãããŠããŸã£ãŠãããŸããã
--
Email: oka...@cs.ehime-u.ac.jp
<8fdtvp$ke7$1...@csgw2.cs.ehime-u.ac.jp>ã®èšäºã«ãããŠ
ç§ã¯æžããŸããã
>> ãããªããã°ã©ã ã ãšã©ãè§£éãããããã®ã§ããã? ã¡ãªã¿ã«ã
ãããè¡è¿·ã£ãŠããŸãããmalloc ãããé åãåå©çšããã
ããã§ã¯ãªãã§ããã
# ããããããŒã«ã«å€æ°ã®ãã€ã³ã¿ãæž¡ããŠããããšã¯ã§ããã®
# ã§ãããããªããšãªãã€ãã€æ°ãããã
--
Email: oka...@cs.ehime-u.ac.jp
"Yohichi OHTSUKA" <yoht...@beige.ocn.ne.jp> wrote in message
news:<8fd9qa$t3e$1...@nn-tk104.ocn.ad.jp>...
>
> ç§ã䜿çšããŠããforthã¯8bitãã·ã³ã«èŒã£ããã®ãªã®ã§ã
> æšæºçãªFORTHã®ä»æ§ãšã¯éãããç¥ããŸããã
> forthã®å
¥éæžãèªãã§å
¥ã£ãè
ã§ã¯ãªãã®ã§ã
> ãã®èŸºãã®éããè§£ããªãã§ããŸãã
é·æåºåŒµã®èº«ã§æå
ã«è³æããªãã®ã§ãç§ã詳ããéãã¯
ããããªãã®ã§ããã
ïŒïŒå¹Žçæšæº FORTH ã®å Žåã¯ãFORTH83(ãŸãã¯FORTH-83)ãšãã
確èªçšã¯ãŒãããã£ããšæããŸãã
ANSI-FORTH ã«ãåæ§ãªã¯ãŒãããããããããŸããã
> åæ©çãªè³ªåãªã®ã§ããã
> æšæºçãªFORTHã®ãã¯ãŒãã®ã³ã³ãã€ã«ãšããèšèãšã
> ãã·ã³èªã«å€æããã³ã³ãã€ã«ãšããèšèã¯éãã®ã§ããããïŒ
Java ãæãæµ®ãã¹ãŠããã ãããšçè§£ãæ©ããšæããŸãã
ã¯ãŒãã®ã³ã³ãã€ã«ã¯ãjavac ã§ *.java ãã¡ã€ã«ãã³ã³ãã€ã«ããŠ
ãã€ãã³ãŒã(*.classãã¡ã€ã«) ãåŸãäœæ¥ã«çžåœããŸãã
ããã§ãå®åšã®ãã€ã¯ãããã»ããµã«äŸåããªãä»®æ³ã®ãã€ã¯ã
ããã»ããµïŒVM:ããŒãã£ã«ãã·ã³ïŒçšã®ãã·ã³èªãåŸãããšã§ã
ãŸãã
äžæ¹ããã·ã³èªãžã®ã³ã³ãã€ã«ã¯ãjava ã®å Žåããã€ãã£ãã»ã³ãŒãã»
ã³ã³ãã€ã©ã«ãããŠãå®åšãããã€ã¯ãããã»ããµåãã®ãã·ã³ã³ãŒã
ãçæããäœæ¥ã«çžåœããŸããäžéšã®FORTH åŠçç³»ã«ãåæ§ãªã
ãã€ãã£ãã»ã³ãŒãã»ã³ã³ãã€ã©ãæã€ãã®ããããŸãã
ã»ãã«ãã説æãæãã€ããªãã®ã§ããããªãšãã§ãããããããŸã
ã§ããããïŒ
"sasaki tadao" <ta...@ga.sony.co.jp> wrote in message
news:391A2915...@ga.sony.co.jp...
>
> æã¯ãç¡ãã£ãããã§ãããçŸåšã®ïŒ¡ïŒ®ïŒ³ïŒ© ã§ã¯ãèŠå®ãããŠããŸãã
> ANSI FORTH ã®ããã¥ã¡ã³ãã¯ã以äžããå
¥æã§ããŸãã
> http://www.taygeta.com/forth/
ãªãã»ã©âŠã
ïŒå¹Žã»ã©åã« ANS FORTH ã®ãã©ãããå
¥æããŠ
ããã®ã§ããããŸã ãã©ãããªã®ã§ããã (^^;
> ãšããã§ããããªã¯ãŒãã¯ã©ãã§ããããã
ïŒçç¥ïŒ
> ã³ã«ãŒãã³ãšèšããã ã£ãããªïŒ
> æ®å¿µãªããšã¯ãdo ... loop ã®ãªãã§äœ¿ããªãããšã§ããã
é¢çœãã§ãããã«ãŒãæã«äœ¿çšã§ããã¯ãŒããäœã£ãŠã¿ãã®ã
äžèããç¥ããŸããã
ãç¥ããŸããã§ããã
ããããããFORTHã®å匷ãããã®ã¯ãä»ããïŒïŒå¹ŽäœåïŒåéšçã ã£ããšã
ïŒå¥ã®å匷ãããïŒçŸå®éé¿ããŒã«ãšããŠå
±ç«åºçã®ããŒãžã¥ã®æ¬ãæã¡æ©ã
ãŠãããããªã®ã§ããã®ããã¯ãªãã£ãã®ãããããŸããã
ãæè¿ã®ïŒææ°ãããªããŠãããã§ãïŒFORTHã«ã€ããŠãæ¥æ¬èªã®ãŸãšãŸã£ã
è³æãæžç±ããåç¥ã ã£ãããæãé¡ããŸããã§ããããã
ããªããããã¡ããããçŽããæ¹ããããããªã®ã§ã
# fj.comp.lang.forthããããªã«ã«ããããªããŠã
> > åæ©çãªè³ªåãªã®ã§ããã
> > æšæºçãªFORTHã®ãã¯ãŒãã®ã³ã³ãã€ã«ãšããèšèãšã
> > ãã·ã³èªã«å€æããã³ã³ãã€ã«ãšããèšèã¯éãã®ã§ããããïŒ
>
> Java ãæãæµ®ãã¹ãŠããã ãããšçè§£ãæ©ããšæããŸãã
>
> ã¯ãŒãã®ã³ã³ãã€ã«ã¯ãjavac ã§ *.java ãã¡ã€ã«ãã³ã³ãã€ã«ããŠ
> ãã€ãã³ãŒã(*.classãã¡ã€ã«) ãåŸãäœæ¥ã«çžåœããŸãã
> ããã§ãå®åšã®ãã€ã¯ãããã»ããµã«äŸåããªãä»®æ³ã®ãã€ã¯ã
> ããã»ããµïŒVM:ããŒãã£ã«ãã·ã³ïŒçšã®ãã·ã³èªãåŸãããšã§ã
> ãŸãã
>
> äžæ¹ããã·ã³èªãžã®ã³ã³ãã€ã«ã¯ãjava ã®å Žåããã€ãã£ãã»ã³ãŒãã»
> ã³ã³ãã€ã©ã«ãããŠãå®åšãããã€ã¯ãããã»ããµåãã®ãã·ã³ã³ãŒã
> ãçæããäœæ¥ã«çžåœããŸããäžéšã®FORTH åŠçç³»ã«ãåæ§ãªã
> ãã€ãã£ãã»ã³ãŒãã»ã³ã³ãã€ã©ãæã€ãã®ããããŸãã
>
> ã»ãã«ãã説æãæãã€ããªãã®ã§ããããªãšãã§ãããããããŸã
> ã§ããããïŒ
Javaã¯ååããããªã®ã§ãããå¥åºããã解説ããŠãããããšã¯ã
ã ãããè§£ããŸããã
ãšããããšã¯ã
æšæºçãªFORTHã³ã³ãã€ã©ã®æµãã¯ã
FORTHãœãŒã¹ ----> ãã€ã¯ãããã»ããµã«äŸåããªã ------> åãã·ã³èªã³ãŒã
å®è¡ã³ãŒã
ãšèããŠããã®ã§ããããïŒ
æŽã«ç¶ããŸããã
FORTHãèµ·åããŠå¯Ÿè©±çã«ã¯ãŒããå
¥åããŠå®è¡ããŠããæã¯ãäžã®
ãã€ã¯ãããã»ããµã«äŸåããªãå®è¡ã³ãŒããåŠçãããŠåããŠ
ãããšèããŠããã®ã§ããããïŒ
æåŸã«ã
æšæºçãªFORTHã§ãCã³ã³ãã€ã©ã¿ããã«ã©ã€ãã©ãªãã¹ã¿ãŒãã¢ããã«ãŒãã³
ããªã³ã¯ããŠa.outãäœãã¿ãããªèªç«åã®ã³ãŒããåãããšã¯åºæ¥ãã®ã§
ããããïŒ
ãã®å Žåã©ã®ãããªã¯ãŒããå²ãåœãŠãããŠããã®ã§ããããïŒ
ïŒ ïŒããŒã¯ã°ããã§ãã¿ãŸããã
äœã æšã§ãã
Yohichi OHTSUKA wrote:
> >In article <8fehc5$lo8$1...@dosv008002.kke.co.jp>
> > "BEPPU, Masamichi" <mas...@kke.co.jp> writes:
> >
> >
> >æšæºçãªFORTHã³ã³ãã€ã©ã®æµãã¯ã
> >
> >FORTHãœãŒã¹ ----> ãã€ã¯ãããã»ããµã«äŸåããªã ------> åãã·ã³èªã³ãŒã
> > å®è¡ã³ãŒã
> >
> >ãšèããŠããã®ã§ããããïŒ
ããããæ¬¡ã®ããã«ãªã£ãŠããŸãã
FORTHãœãŒã¹ ---+---> ãã€ã¯ãããã»ããµã«äŸåããªãã³ãŒãïŒãã€ã¬ãã«ã¯ãŒãïŒ
|
+---> åãã·ã³èªã³ãŒãïŒããŒã¬ãã«ã¯ãŒãïŒ
âïŒâã§å®çŸ©ãããã¯ãŒãã¯ããã€ã¬ãã«ã¯ãŒãã§ãã
âCODEâã§å®çŸ©ãããã¯ãŒããæã£ãŠãããã¯ãããŒã¬ãã«ã¯ãŒããšåŒãã§ããŸãã
> >
> >æŽã«ç¶ããŸããã
> >FORTHãèµ·åããŠå¯Ÿè©±çã«ã¯ãŒããå
¥åããŠå®è¡ããŠããæã¯ãäžã®
> >ãã€ã¯ãããã»ããµã«äŸåããªãå®è¡ã³ãŒããåŠçãããŠåããŠ
> >ãããšèããŠããã®ã§ããããïŒ
察話çãã©ããã¯ãã¯ãŒãã®å®è¡ã«ã¯é¢ä¿ããŸãããã察話ããéšåãFORTHã®
ã¯ãŒãã®äžã€ã«ãããŸããã
ãã€ã¬ãã«ã¯ãŒãã®äžèº«ã¯ãä»ã®ã¯ãŒããžã®ãã€ã³ã¿ïŒãã€ã³ã¿ã®ãã€ã³ã¿ã®
å Žåããããããããã¡ããå€ããïŒããªã¹ãã«ãªã£ãç©ã§ãã
ãã®ãªã¹ããæç¹°ã£ãŠãããšããã®ãã¡ã«ãããŒã¬ãã«ã¯ãŒãã«è¡ãçãã®ã§ã
ããã§ããã·ã³èªãšããŠå®è¡ãããŸãã
ïŒã¢ãããŒã©ã®ïŒïŒïŒïŒã§ã¯ããã®æç¹°ãåäœãïŒåœä»€ã§å®è¡ã§ããã®ã§ã
ïŒãµãã«ãŒãã³ã³ãŒã«ããé«éã§ããã
ïŒïŒãªãŒãã€ã³ã¯ãªã¡ã³ãä»ãã®ã¬ãžã¹ã¿éæ¥ãžã£ã³ãïŒ
ã¯ãŒãã®äžèº«ããä»ã®ã¯ãŒããžã®ãã€ã³ã¿ã®å Žåãããã€ã¬ã¯ã ã¹ã¬ãã ã³ãŒãã
ãšåŒã°ãããã€ã³ã¿ã®ãã€ã³ã¿ã®å Žåããã€ã³ãã€ã¬ã¯ã ã¹ã¬ãã ã³ãŒãããš
åŒã°ããŠããŸãã
æšæºçã§ãªãFORTHã®å Žåããã€ã¬ãã«ã¯ãŒãã
call aaa
call bbb
ã®æ§ã«ããã·ã³èªãšããŠå®è¡ã§ãã圢ã«ãããã®ãæããŸããã
æšæºçãªã¯ãŒãã¯ããã® call éšåãåãé€ããŠã aaaãbbbã®
éšåã ãããªãã¹ããã®ãšèããã°è¯ãã§ãããã
> >
> >æåŸã«ã
> >æšæºçãªFORTHã§ãCã³ã³ãã€ã©ã¿ããã«ã©ã€ãã©ãªãã¹ã¿ãŒãã¢ããã«ãŒãã³
> >ããªã³ã¯ããŠa.outãäœãã¿ãããªèªç«åã®ã³ãŒããåãããšã¯åºæ¥ãã®ã§
> >ããããïŒ
> >ãã®å Žåã©ã®ãããªã¯ãŒããå²ãåœãŠãããŠããã®ã§ããããïŒ
> >
> >ïŒ ïŒããŒã¯ã°ããã§ãã¿ãŸããã
æšæºã®ã¯ãŒãã¯ç¡ããšæããŸãããâwin32forthâã§ã¯ãâturnkeyâãšèšã
ã¯ãŒããçšæãããŠããŠãç¬ç«ããã¢ããªã±ãŒã·ã§ã³ãäœããŸãã
ïŒã³ãã³ãã©ã€ã³ã䜿ãããªããç«ã¡äžãããã¯ãŒããã³ãã³ãã§å
¥åããã°
ïŒãããã§ãBATãã¡ã€ã«ããå®è¡ããã°ãåãäºã
äœã
æšãããç§ã®è³ªåã«é¢ããåçããããšãããããŸãã
ãé°ã§ããŸã æ¶åäžè¯ã®éšåã¯ããã®ã§ãããæšæºçãªFORTHã®
å®äœåãšãããã®ãèŠããŠããŸããã
http://www-lab.ee.uec.ac.jp/subject/text/forth/struct-unix/st5.html ãš
äœã
æšããã®èª¬æãèªãã§ã€ã¡ãŒãžããŸããã
In article <391BAFBE...@ga.sony.co.jp>
sasaki tadao <ta...@ga.sony.co.jp> writes:
>
> æšæºçã§ãªãFORTHã®å Žåããã€ã¬ãã«ã¯ãŒãã
> call aaa
> call bbb
> ã®æ§ã«ããã·ã³èªãšããŠå®è¡ã§ãã圢ã«ãããã®ãæããŸããã
> æšæºçãªã¯ãŒãã¯ããã® call éšåãåãé€ããŠã aaaãbbbã®
> éšåã ãããªãã¹ããã®ãšèããã°è¯ãã§ãããã
>
ç§ãçŸåšäœ¿çšããŠããFORTHã¯ãã®ã¿ã€ãã§ãã
> ã€ã³ã¿ããªã¿ã§ãã颿°åŒåºãæã«ã¹ã¿ãã¯ã®æäœã¯ãããªãã®ã§ã
> æ«å°Ÿååž°æé©åã¯ããã®æäœãçç¥ããããšã«çžåœããŸãã
> Sparc ã® UTI-LISP ã§ã¯ãregister window ã®æäœãéãã®ã§ã(åããªã
> æã¯è¯ãã®ã ããåãã㊠register window ãoverflow ãããšã²ã©ãç®ã«
> ãã)ããªãã¹ããregister window ã®æäœãããããããªããŠããšã
> ããŠããããã§ããåç°è±äžå
çã¯ãLISP ã¯ã€ã³ã¿ããªã¿ãé«éã§ãã
> å¿
èŠããããšèããŠããããã§ããã
ãã®è©±ã®æµããããããšïŒSPARCçšã® UtiLisp(UtiLisp/C) ã®ã€ã³ã¿ããªã¿ã
æ«å°Ÿååž°æé©åããããªã£ãŠããããšèª€è§£ãã人ããããããããªãã®ã§è£è¶³
ããŸãïŒUtiLisp/Cãäœãéã«ã€ã³ã¿ããªã¿ã®é«éå®è¡ã«éç¹ã眮ããã®ã¯ç¢º
ãã§ããïŒæ«å°Ÿååž°æé©åã¯ãããªã£ãŠããŸããã§ããïŒããã¯ä»¥äžã®çç±ã«
ãããŸãïŒ
ã» UtiLisp㯠CommonLispãSchemeãšéãïŒå€æ°ã¯åçã¹ã³ãŒããåºæ¬ãšããŠ
ããŸãïŒãã®ããïŒæ«å°Ÿååž°ã®éã«ã©ã®å€æ°æçžãéæŸããŠè¯ãã®ãã®å€æã
ãããªããªããŠã¯ãããªããªãããïŒã³ã¹ããããããŸãïŒ
以äžã® toy program ãèŠãŠäžããïŒ
(defun trec (x)
(print `(,x ,y))
(cond ((0= x) 1)
(t (lets ((y (1- y))) ; (a)
(trec (1- x)))))) ; (b)
(defun test ()
(lets ((y 5))
(trec 3))) ; (c)
æåã® trecã®åŒåºæ(c)ã§ x ã« 3 ãæçžãïŒæ¬¡ã® lets(a) ã§ y ã« 4ãæ
çžããŸãïŒletsã®äžã® trec(b) ã¯æ«ç«¯ååž°ãªã®ã§ïŒéçã¹ã³ãŒãã®Lispã§ã¯ïŒ
ãã¹ãŠã®æçžãã¯ãªã¢ããäžã§ïŒx ã« 2 ãæçžããã°ããã®ã§ããïŒåçã¹
ã³ãŒããªã®ã§ïŒy ã®æçžã¯æ®ããŠãããªããã°ãªããŸããïŒäžè¬çãªé£æ³ãªã¹
ããæçžã¹ã¿ãã¯ã䜿ã£ã倿°æçžã®å®çŸæ³ã§ã¯ïŒåŸããçºçããæçžãæ®ã
ããŸãŸïŒåã®æçžãéæŸããã®ã¯ã³ã¹ããããããŸãïŒ
ã» UtiLisp/Cã¯SPARCããã»ããµã§å®è¡ããéã®é床ãéèŠããªãããïŒç§»æ€
æ§ãèæ
®ããŠå€§éšåãCèšèªã§å®è£
ããŸããïŒCèšèªã§èšè¿°ããŠæ«å°Ÿååž°æé©å
ãå®çŸããã«ã¯ïŒ
1. Cã®é¢æ°ãç¶ç¶(continuation)ãè¿ã圢ã§èšè¿°ããŠïŒã€ã³ã¿ããªã¿ã®ã¡ã€
ã³ã«ãŒãã¯
for(;;){
cont = (*cont)();
}
ã®ããã« tiny(mini) interpreter ã§èšè¿°ããïŒ
2. Lispã€ã³ã¿ããªã¿å
šäœã1ã€ã®C颿°ã«ããŠïŒã³ã³ãããŒã«ã¹ã¿ãã¯ãèªå
ã§ç®¡çããŠïŒcall ãã¹ã¿ãã¯ã®pushãšgotoæã«çœ®ãæããïŒ
3. Cèšèªã®åºåãã ã¢ã»ã³ããªèšèªã®ãã¡ã€ã«ããã£ã«ã¿ã«ãã call ã䜿
ããªãåœ¢ã«æžãæããïŒ
ãªã©ã®æ¹æ³ããããŸããïŒãããã¯ã€ã³ã¿ããªã¿å
šäœã®æžãæããå¿
èŠã«ãªãïŒ
å
šäœã§ã®é床åäžã«ã€ãªãããã©ããããããªãã£ãã®ã§æ¡çšããŸããã§ããïŒ
> Sparc ã® UTI-LISP ã§ã¯ãregister window ã®æäœãéãã®ã§ã(åããªã
> æã¯è¯ãã®ã ããåãã㊠register window ãoverflow ãããšã²ã©ãç®ã«
> ãã)ããªãã¹ããregister window ã®æäœãããããããªããŠããšã
> ããŠããããã§ãã
ãã®éšåã§ããïŒå®ã¯ããŸã倧ããããšã¯ããŠããŸããã§ããïŒå
éšããä»
ã®é¢æ°ãåŒã³åºããªã颿°ãïŒsave, restoreãããªãããšãå©çšããŠïŒãšã©ãŒ
åŠçã颿°åŒã³åºãã§ãããªã代ããã«ïŒbus errorçãçºçãã㊠signal
ã§æãŸããã«æžãããšããã ãã§ãïŒ
ãã®å·¥å€«ã¯ UtiLisp/C ãéçºãã 1988 å¹Žåœæã® SPARC ããã»ããµã®ç¹æ§ïŒ
åœæã®SunOS ã®ã¬ãžã¹ã¿ãŠã£ã³ããŠåŠçã®ããšã§ã¯æå¹ã§ãããïŒçŸåšã§ã¯ã»
ãšãã©æ§èœã«ã¯åœ±é¿ããŠããªãã§ãããïŒ
--
-
æ±äº¬å€§åŠæ
å ±åºç€ã»ã³ã¿ãŒ ç°äžå²æ
http://www.tanaka.ecc.u-tokyo.ac.jp/~ktanaka/