/*
* ##
* ## cafe (CaFE) : Calcurator, Function Expandable
* ##
* ### #### ###### ### an RPN calculator for command line interface
* ## ## ## ## ## ##
* ## ## ## ## ### (c) Tsukimidai Communications Syndicate
* ### ### ## ## #### 1991 - 2006
*/
/**
*** version 2.0 release 0.5
**/
ãcafeã ãŠãŒã¶ã»ã¬ã€ã
cafe version 2.0 release 0.5 ãŠãŒã¶ã»ã¬ã€ããversion 0.5
May-2005 start Sep-2006 current
(c) æèŠå°éä¿¡ã·ã³ãžã±ãŒã All rights reserved 2005, 2006
###0.1 cafe
cafeã¯UNIXã¿ãŒããã«ç°å¢çšã«äœãããèšç®æ©ããã°ã©ã ã§ãïŒ
ãéããŒã©ã³ãèšæ³(RPN)ããšåŒã°ããïŒå°ãå€ãã£ãäœ¿ãæ¹ãããŸãïŒ
HPã®é»åã®ãããªå
¥åã®æ¹æ³ã§ãïŒãã®æ¹æ³ã«ã€ããŠã¯æ¬¡ã®ç« ã§ç޹ä»ããŸãïŒ
åçŽãªèšç®ã®ä»ã«ïŒå°ã䟿å©ãªæ©èœã远å ããŠãããŸãïŒ
ãcafeãã®åã¯ïŒæ§ããŒãžã§ã³ã§ã¯ãCaFEããšããŠããŸãããïŒUNIXã®æ
£äŸã«å£ããã¹ãŠå°æåã§ã®èšè¿°ã«å€ããŸããïŒ
ãCaFEãã¯ãCalculator, Function Expandableã(颿°æ¡åŒµå¯èœãªèšç®æ©)ã®ç¥ã§ãïŒ
###0.2 ãªããããäœã£ããïŒ
cafeã¯å
ã
ïŒCèšèªã®ãã€ãã«ããªãããŒ&ã«ãŒããã³ã®ãããã°ã©ãã³ã°èšèª Cããã«èŒã£ãŠããRPNèšç®æ©ã®ãµã³ãã«ããã°ã©ã ãåºçºç¹ãšããŠïŒããã«æ¹è¯ãå ãããã®ã§ãïŒ1991幎ã«(æ¬ãèŠãªãã)æåã®ãã®ãæžãïŒãã®åŸèªåçšãšããŠå°ãã¥ã€æãå ããªãã䜿ã£ãŠããŸããïŒ
ãã®ããŒãžã§ã³ãããŒãžã§ã³2ãã¯ïŒãã®å
ã«ãªã£ãããã°ã©ã (ããŒãžã§ã³1)ã«å€§ããªäžè¶³ãæããããã«ãªã£ãããïŒ2005幎ã«ãã¹ãŠãæžãçŽãïŒçŸåšã«ããããŸã§æ¡åŒµãç¶ããŠãããã®ã§ãïŒ
æåã®ããŒãžã§ã³ã䜿ã£ãŠãã2000幎ãŸã§ã®ç§ã®ã¡ã€ã³ã»ã³ã³ãã¥ãŒã¿ç°å¢ã¯ïŒMacOS9以åã®MacOSã§ããïŒãã®ããUNIXãæ¥åžžçã«äœ¿ãããšã¯å°ãªãïŒããŒãžã§ã³1ã®éãããæ©èœã§ãååã§ããã»ã©äžæºã«æããããšã¯ãããŸããã§ããïŒ
ãããUNIXãããŒã¹ãšããæ°ããOSãMac OS Xããç»å ŽãïŒããç§»è¡ããåŸã«ã¯ïŒã¿ãŒããã«ãéããŠäœæ¥ããããšãå€ããªã£ãŠããŸããïŒãããŠUNIXã·ã§ã«ã®æ©èœã«æ
£ããã«åŸã£ãŠïŒCaFEã®åŸæ¥ã®ããŒãžã§ã³ã§ã¯äžäŸ¿ãæããããã«ãªãïŒææ
¢ã§ããªããªã£ãŠããã®ã§ãïŒ
ããšãã°ïŒCaFEã¯ã³ãã³ãã©ã€ã³(ããŒå
¥å)ã«ãã£ïŸãŠæäœããããã°ã©ã ã§ããã«ãé¢ãããïŒäžäžç¢å°ããŒã«ãããã¹ããªã»ãã©ãŠãºæ©èœãïŒã¿ãããŒã«ããå
¥åè£å®æ©èœãªã©ã®å¯Ÿè©±çãªããã°ã©ã ã«å¿
èŠãªä»çµã¿ãå®è£
ãããŠããŸããã§ããïŒ
ããã«ãã®ãœãŒã¹ã³ãŒãèªäœãïŒåã£ã貌ã£ããç¹°ãè¿ããæãŠã«éåžžã«èªã¿ã¥ããïŒããã«ã¯å€ãK&Rã¹ã¿ã€ã«ãæ··ãã£ããã®ã§ïŒæ°ãã«æãå ããã®ãåå«ã«ãªããããªä»£ç©ãšåããŠããŸããïŒ
ãã®ãããŒãžã§ã³2ãã¯äžèšã®ãããªæ§ã ãªç¹ãæ¹åããããã«äœãããŸããïŒãã®ã»ããã®æ°ããããŒãžã§ã³ã§ã¯ãã®ä»ã®äœ¿ãåæã®åäžã®ããã«ããã€ãã®æ©èœã远å ãããŸããïŒ
###0.3 åäœã®ç°å¢
cafeã¯ã³ãã³ãã©ã€ã³ã§äœ¿çšããã¢ããªã±ãŒã·ã§ã³ã§ãïŒMac OS Xã§ã¯ã¿ãŒããã«ãéããŠãã®äžã§åäœããŸãïŒLinixã§ãåäœããŸãïŒ
###0.4 ã€ã³ã¹ããŒã«
cafeã¯githubã§ãã¹ãã£ã³ã°ãããŠããŸãïŒãããé©åœãªãã£ã¬ã¯ããªã§cloneãããšïŒãCaFE2ããšããåã®ãã©ã«ããäœããïŒãã®äžã«å¿ èŠãªãã¡ã€ã«ãå ¥ã£ãŠããŸãïŒ
git clone https://github.com/teddokano/CaFE2.git
ãã®åŸïŒCaFE2ãã©ã«ãã«ç§»ã£ãŠã./configure; makeããå®è¡ããŸãïŒããã§cafeããã«ãããïŒã©ã€ãã©ãªãã¡ã€ã«ã«å¿
èŠãªå€æŽãå ããããŸãïŒ
ãã®ããšãsudo make installãã®ã³ãã³ããå®è¡ãïŒå®è¡ãã¡ã€ã«ãšã©ã€ãã©ãªãã¡ã€ã«ãã€ã³ã¹ããŒã«ãããšæºåå®äºã§ãïŒ
ã¡ã¢ :
ãMakefileããããã©ã«ãã®ãŸãŸäœ¿çšãïŒãmake installãããå ŽåïŒcafeã¯ãŠãŒã¶ã»ãã£ã¬ã¯ããªã«ã€ã³ã¹ããŒã«ãããŸãïŒãã®æïŒcafeã®å®è¡ãã¡ã€ã«ã¯ãâŸ/bin/ãã«ã³ããŒãããã®ã§ïŒãã®ãã£ã¬ã¯ããªã«ãã¹ãèšå®ããŠãããªããã°ãªããŸããïŒ
ã¡ã¢ :
äžæ¹Makefileäžã®INSTALL_TARGET倿°ã«ãPUBLICããèšå®ãããš(ããã©ã«ãã§ã¯ãPRIVATEãã«ãªã£ãŠãã)ïŒã€ã³ã¹ããŒã«ã¯ã/usr/local/bin/ãã«è¡ãããŸãïŒãŸãã©ã€ãã©ãªãã¡ã€ã«ãã/etc/ãã«çœ®ãããŸãïŒPUBLICã€ã³ã¹ããŒã«ãèšå®ããå Žåã«ã¯ïŒmake installãå®è¡ããéã«ç®¡çè
æš©éãå¿
èŠã«ãªããŸãïŒ
ã¡ã¢ :
ãmakeãã¯UNIXäºæç°å¢ã§åäœããŸãïŒDJGPPçãã€ã³ã¹ããŒã«ããDOSçã®éUNIXç°å¢ã§ã¯åäœããŸããïŒããã¯UNIXã®ã³ãã³ããMakefileå
éšã§äœ¿çšããŠããããã§ãïŒ
##1. ç°¡åãªäœ¿ãæ¹
###1.1 èµ·åãšçµäº
èµ·åããŸãïŒèµ·åã®ä»æ¹ã¯å
ã«æžããéããcafeããšæã€ã ãã§ãïŒ
cafeãçµäºããã«ã¯ãquitããããã¯ãqqããšãªã¿ãŒã³ã»ããŒãæã¡ãŸãïŒ
###1.2 èšç®
ç°¡åãªèšç®ã®äŸã瀺ããŸãïŒ
èµ·ååŸã®ç»é¢ã«ã¯ããã³ããã衚瀺ãããŠããŸãïŒcafeã§èšç®ãè¡ãéã«ã¯ïŒå€ãæŒç®å(ããšãã°ã+ããã-ããªã©)ãå ¥åããŸãïŒ
å ¥åã¯RPNèšæ³ã§è¡ããŸãïŒRPNèšæ³ã¯äžèŠå¥åŠãªæžãæ¹ã«èŠããŸããïŒéåžžã«çã«ããªã£ãå ¥åæ¹æ³ã§ãïŒ
ããšãã°
ã3 + 5ããèšç®ããã«ã¯ïŒ
ã3 5 +ãã®ããã«æåã䞊ã¹ïŒãªã¿ãŒã³ã»ããŒãæã¡ãŸãïŒãããããšãã®çµæã8ããæ¬¡ã®è¡ã®ããã³ããã«è¡šç€ºãããŸãïŒ
CaFE (empty) % 3 5 +
CaFE ( 8) %
ãã®èšç®ãäŸã«ã©ã®ããã«å®è¡ãããã®ããèŠãŠã¿ãŸãïŒ
###1.3 èšç®ã¯ã©ã®ããã«è¡ãããã®ãïŒ(éããŒã©ã³ãèšæ³(RPN)ã«ã€ããŠ)
ãªã¿ãŒã³ã»ããŒãæŒãããåŸïŒã3 5 +ãã®å
¥åæåãå·Šããé ã«è§£éãããŠãããŸãïŒ
æåã«(æãå·Šã«)æ°å€ã®ã3ãããããŸãïŒãã®å€ãã¹ã¿ãã¯ã»ã¡ã¢ãªã«å
¥ããããŸãïŒ
ã¹ã¿ãã¯ã»ã¡ã¢ãªãšã¯...RPNæ¹åŒã§èšç®ãè¡ãå Žåã«äœ¿ãããã¡ã¢ãªã§ïŒèšç®ããå€ãåºãå ¥ãããå Žæã§ãïŒãã®åºãå ¥ãã«ã¯æ±ºãŸããããïŒã¡ã¢ãªã®å®¹éã®èš±ãéãããŒã¿ãã©ãã©ãå ¥ããŠããããšãã§ããŸãïŒã¹ã¿ãã¯ã»ã¡ã¢ãªããããŒã¿ãåãåºããšïŒå¿ ãæåŸã®ããŒã¿ãåºãŠããããã«ãªã£ãŠããŸãïŒ
äžè¬ã«ã¹ã¿ãã¯ã»ã¡ã¢ãªã«å€ãå
¥ããäœæ¥ããããã·ã¥ãïŒåãåºãäœæ¥ãããããããšèšããŸãïŒ
以éãã®ãŠãŒã¶ã¬ã€ãã§ã¯ïŒãã®éœåºŠãã¹ã¿ãã¯ã»ã¡ã¢ãªããšæžãã®ã¯é¢åãªã®ã§ïŒåã«ãã¹ã¿ãã¯ããšèšãããšã«ããŸãïŒ
ããŠïŒæ¢ã«ã3ããã¹ã¿ãã¯ã«ããã·ã¥ãããŸããïŒæ¬¡ã¯ã5ãã§ãïŒãããã3ããšåæ§ã«ã¹ã¿ãã¯ã«ãã·ã¥ãããŸãïŒããã§ãã®äºã€ã®å€ãã¡ã¢ãªã«å ¥ããŸããïŒãã®æ¬¡ã®æåã¯æ°åã§ã¯ãªãè¶³ãç®ã瀺ãæåã+ãã§ãïŒ
cafeã¯ãã®ã+ãã®æåããã¹ã¿ãã¯ãã2åã®æ°å€ãããããïŒããå士ãè¶³ãåããïŒãã®çµæãã¹ã¿ãã¯ã«ããã·ã¥ãçŽãããšèšãæå³ã«äœ¿ããŸãïŒãã®ããã+ãã®æå(æŒç®åãšèšããŸã)ã«ãã£ãŠ2ã€ã®å€ïŒãŸãæåŸã«ããã·ã¥ãããã5ãããããããæ¬¡ã«ã3ãããããããïŒãã®äž¡å€ããèšç®ãããæ°ããå€ãã¹ã¿ãã¯ã«ããã·ã¥ãããŸãïŒ
ãã®çµæãããã³ããã«è¡šç€ºãããŸãïŒãã®ããã³ããã«è¡šç€ºãããŠããå€ã¯ãæåŸã«ã¹ã¿ãã¯ã«ããã·ã¥ããããã®ãã§ãïŒ
ã¡ã¢ : cafeã§ã¯ã¹ã¿ãã¯ã«ããã·ã¥ã§ããããŒã¿ã®æ°ã«å¶éã¯ãããŸããïŒcafeãå®è¡ããã³ã³ãã¥ãŒã¿ã«æèŒãããŠããèšæ¶è£ 眮ã«ããå¶éãããã®ã¿ã§ãïŒ
###1.4 ã¹ã¿ãã¯ã®ã¯ãªã¢
ã¹ã¿ãã¯ãã¯ãªã¢ããã³ãã³ãããããŸããclããšãªã¿ãŒã³ã»ããŒãæŒããšïŒã¹ã¿ãã¯ã®äžèº«ããã¹ãŠæ¶ããŸãïŒã¯ãªã¢ãããšããã³ããã«ã¯ã¹ã¿ãã¯ã®äžèº«ã空ã§ããããšã瀺ããemptyãã衚瀺ãããŸãïŒ
###1.5 å ¥åã®æ¹æ³
ã3 5 +ãã¯1è¡ã§æžããªããŠãæ§ããŸããïŒãŸãã3ããæã£ãŠãªã¿ãŒã³ã»ããŒãæŒãïŒã5ããæã£ãŠãªã¿ãŒã³ã»ããŒãæŒãïŒæåŸã«ã+ããšãªã¿ãŒã³ã»ããŒã§ãåãçµæãåŸãããŸãïŒ
ããããã®ãªã¿ãŒã³ã»ããŒãæã£ãåŸïŒæ¬¡ã®ããã³ããã«ã¯ïŒããããå
¥åããå€ã衚瀺ãããŸãïŒ
CaFE (empty) % 3
CaFE ( 3) % 5
CaFE ( 5) % +
CaFE ( 8) %
ãã®ããã«åæ°å€ãæŒç®åã¯ã¹ããŒã¹ããªã¿ãŒã³ã»ããŒã§åºåããªããæã€ãšããããšã«ãªããŸãïŒ
ããããã®å ŽåïŒcafeã®åäœã¯éããŸããïŒèšç®ã®çµæã«éãã¯ãããŸããïŒ
###1.6 è¶³ãç®ãšæãç®ïŒèšç®ã®é åº(åªå é äœ)
ããŠæ¬¡ã¯å°ãè€éãªèšç®ãäŸã«æããŸãïŒéåžžã®èšç®ã§ã¯æãç®ïŒå²ãç®ãå ã«è¡ãã«ãŒã«(åªå é äœ)ãããããïŒäŸãã°ã4ãš3ãè¶³ãããã®ã«5ãæããããããªå Žåã«ã¯ã«ãã³ãä»ããŠã(4 + 3) * 5ãã®ããã«æžããªããã°ãªããŸããïŒ
ãã®ã«ãã³ãã€ãããšããã®ã¯æå€ã«å€§å€ãªãã®ã§ïŒå ã«èšç®ããŠãããªããã°ãªããªãéšåãå¢ããã«ã€ããŠå ¥åã®æéããããïŒããã«éããã«ãã³ãç確ã«éããŠãããïŒãã®å¯Ÿå¿ã確èªããé¢åãã€ããŸãšããŸãïŒ
RPNã§ã¯ãã®ã«ãã³ãå¿
èŠãããŸããïŒã«ãã³ããªã代ããã«ãã®é çªã§åªå
é äœãæå®ããŸãïŒå
ã»ã©ã®äŸã¯ã4 3 + 5 *ãã®ããã«å
¥åããã ããšãªããŸãïŒãã®èšæ³ã¯å
ã«æ¥æ¬èªã§æžããã4ãš3ãè¶³ãããã®ã«5ãæãããããã®ãŸãŸè¡šçŸãããã®ã§ãïŒ
ãã®ããã«RPNãçè§£ãããšïŒããç°¡åã§ãããïŒ
CaFE (empty) % 4 3 + 5 *
CaFE ( 35) %
ã4 3 + 5 ãã§ã¯4ãš3ãããããçµæã7ããã¹ã¿ãã¯ã«ããã·ã¥ãããŠããããïŒãã®å€ã«ç¶ããŠã5ããããã·ã¥ãïŒããã§7ãš5ãæããçµæãåŸãããŸãïŒ
###1.7 ç°¡åãªå¿çš
ããããã®æ°å€ããã¹ãŠè¶³ãåããããããªèšç®ãããå ŽåïŒããšãã°éåžžã®è¡šèšã§ã¯
ã1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10ãã®ããã«æžãããèšç®ã§ã¯ïŒãŸããã¹ãŠã®æ°å€ãã¹ã¿ãã¯ã«ããã·ã¥ããŠããïŒåŸããèšç®ãè¡ãããããšãã§ããŸãïŒã€ãŸã
ã1 2 3 4 5 6 7 8 9 10 + + + + + + + + +ã(1ãã10ãŸã§ã®10åã®æ°å€ãš
ïŒåã®ã+ã)ã®ããã«æžãããšãã§ããŸãïŒ
CaFE (empty) % 1 2 3 4 5 6 7 8 9 10 + + + + + + + + +
CaFE ( 55) %
ãã®å ŽåïŒæåã®ã+ãã«ããèšç®ã¯ã¹ã¿ãã¯ããããããããã10ããšã9ãã«å¯ŸããŠè¡ããïŒã19ããããã·ã¥ãããŸãïŒæ¬¡ã®ã+ãã§ã¯ã19ããšã8ãããããããã27ãããã·ã¥ãã...ãããç¹°ãè¿ããïŒæçµçã«ã55ãã®å€ãåŸãããŸãïŒ
cafeã§ã¯ç¹ã«ã¹ã¿ãã¯å
šäœã®ç·åãèšç®ããããã«ãaaããšããã³ãã³ããçšæãããŠããŸãïŒãaaãã¯ãAdd Allãã®ç¥ã§ãïŒããã䜿ããšã+ããç¶ããŠæžãæéããªããŠæžã¿ãŸãïŒ
ã1 2 3 4 aaãã®ããã«äœ¿ããŸãïŒ
CaFE (empty) % 1 2 3 4 aa
CaFE ( 10) %
###1.8 䟿å©ãªæ©èœ
####1.8.1 ãã¹ããªæ©èœ
CaFEã«ã¯ãã¹ããªæ©èœãçšæãããŠããŸãïŒåã«å
¥åãããã®ãšäŒŒããããªãã®ãå
¥åãããããªå Žåã«äŸ¿å©ã§ãïŒç¢å°ããŒã®äžåãã®ããŒã§åã«å
¥åãããã®ãé¡ã£ãŠè¡šç€ºããŸãïŒ
äžåãç¢å°ããŒã§ç®çã®å
¥å衚瀺ãè¡ãéããå ŽåïŒäžåãã®ããŒã§æ»ã£ãŠããããšãã§ããŸãïŒ
####1.8.2 ã¢ã³ã»ãã¥(undo)æ©èœ
æ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šæ
ãŠãŒã¶ã¹ã¿ãã¯æ©èœã®è¿œå åŸïŒundoã³ãã³ãã®ãµããŒããæ«å®çã«åæ¢ããŠããŸãïŒ20060602
æ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šæ
èšç®çµæãæåŸ
ãããã®ãšéãïŒããçŽããããªå ŽåïŒãundoãã³ãã³ãã䜿ããŸãïŒ
undoã¯ã¹ã¿ãã¯ããã®äžã€åã®ç¶æ
ã«æ»ããŠãããŸãïŒ
####1.8.3 è£å®ïŒåè£è¡šç€ºæ©èœ
ã³ãã³ãå
¥åã®è£å®æ©èœããããŸãïŒããšãã°äžèšã®ãundoããå
¥åããæã«ïŒãunããŸã§ãå
¥åãïŒã¿ãã»ããŒãæŒããšãundoãã®ã³ãã³ããçŸããŸãïŒãããè£å®æ©èœã§ãïŒ
ãããã¯ãqããŸã§å
¥åããŠããã¿ãã»ããŒãæŒããšãqqããšãquitãã衚瀺ãããŸãïŒããã¯qã§å§ãŸãã³ãã³ãã®åè£ã®ãªã¹ãã§ãïŒ
äœãå
¥åããã«ã¿ãã»ããŒãæŒããå Žåã«ã¯ãã¹ãŠã®ã³ãã³ãåè£ãçŸããŸãïŒ
ããã«ã¯ã©ãŒããŒã·ã§ã³ã"ããåèªã®å
é ãšããå Žåã«ã¯ãã£ã¬ã¯ããªããã¡ã€ã«ã®ååãåè£ãšããŠçŸããŸãïŒCaFEã§ã®ã"ãã¯æååãçšããå Žåã«äœ¿ãããèšå·ãšãªã£ãŠããïŒãã¡ã€ã«ãæå®ããå Žåã¯ïŒå¿
ãæååãšããŠãã®ååãäžããããããïŒãã®ãããªãã¡ã€ã«åè£å®æ©èœãçšæãããŠããŸãïŒ
ããã«ãã®åŸèª¬æããã颿°ãã«ã€ããŠãïŒååã®è£å®ãè¡ãããŸãïŒããæ¢ã«å®çŸ©ããã颿°ããããªãïŒã³ãã³ããšåæ§ã«åè£ã®äžã«é¢æ°ã®ååãçŸããŸãïŒ
###1.9 æåã®æ±ã(åºåãæå)
cafeã§ã¯ç¹å®ã®æåãç¹å¥æ±ãããŸãïŒããšãã°å ã®äŸã§ç€ºããã+ãã³ãã³ãã¯ïŒããã ãã§åç¬ã®åºåãæåãšããŠã®æå³ãæã£ãŠããŸãïŒéåžžã¯æ°å€ãã³ãã³ãã®éã«ã¯ã¹ããŒã¹ããåã³ãã³ããæ°å€ã®åºåãã瀺ããã®ããšããŠäœ¿ãããŸããïŒãã®ã¹ããŒã¹ã®åé·æ§ãçãããã«ãã®ãããªç¹å¥ãªæåãçšæãããŠããŸãïŒ
ã€ãŸãã4 3 +ãã¯ã4 3+ããšæžãããšãã§ãããïŒã1 2 3 4 5 6 7 8 9 10 + + + + + + + + +ãã¯ã1 2 3 4 5 6 7 8 9 10+++++++++ãã®ããã«èšå·ãé£ç¶ããŠãŸãšããŠæžãããšãã§ããŸãïŒ
ãã®ä»ïŒäžã«ç€ºããæåã¯ãã¹ãŠåºåãæåãšããŠã®æ©èœãæã£ãŠããŸãïŒ
åºåãæåäžèЧ
+
-
*
/
:
;
<
>
(
)
[
]
次ã®ãããªå ¥å
11 22*alpha/>beta[<gamma]
ããã£ãå Žåã«ã¯ïŒcafeã¯ããã
11 22 * alpha / > beta [ < gamma ]
ã®ããã«è§£éããŸã (ãã®äŸã®alphaïŒbetaïŒgammaã¯åèªã®äŸã§ã)ïŒ
ãã®ãã¡ã+ãïŒã-ãã ãã¯ããã«ç¹å¥ãªæ±ãããããŸãïŒãã®äºã€ã¯æ°å€ã®åã«ã€ããããå Žåã«ç¬Šå·ã瀺ãæåãšãªãããïŒã¹ããŒã¹ã«ç¶ããŠçšããããå Žåã«ã¯åºåããšã¯ãªããã«ããã«ç¶ãæåãšäžç·ã®éšåãšããŠæ±ãããŸãïŒ
##2. æ¡åŒµæ©èœã®äœ¿ãæ¹(èšç®æ©ãšããŠã®æ¡åŒµæ©èœ)
###2.1 èšç®ããŸãšãã : 颿°
åãèšç®ãäœåºŠãè¡ããããªãšãã«ã¯é¢æ°ã䜿ããšäŸ¿å©ã§ãïŒ
ããšãã°äœããã®æ°å€ãå
¥åããåŸã«æ¯å1024ãæããäœæ¥ãè¡ããªããã°ãªããªãå ŽåïŒãã®éœåºŠã1024 *ããå
¥åããã®ã¯å€§å€ã§ãïŒãã®ã1024 *ããä»ã®èšå·ãååã§ä»£æ¿ã§ããããã«ãã仿ãã颿°ã§ãïŒ
颿°ã䜿ãã«ã¯ãŸã颿°ãäœããªããã°ãªããŸããïŒé¢æ°ãäœãããšãã颿°ãå®çŸ©ããããšãããŸãïŒé¢æ°ã®å®çŸ©ã¯ä»¥äžã®äŸã®ããã«è¡ããŸãïŒ
: K 1024 * ;
ãã®äŸã§ã¯ãkããšãã(ååã®)颿°ãå®çŸ©ããŠããŸãïŒæåã®ã:ãã颿°ã®å®çŸ©ãè¡ãããšã瀺ããŠããŸãïŒããã«ç¶ãæåã®éšåã颿°ã®ååãšãªããŸãïŒãã®æ¬¡ã®éšåããã;ããŸã§ã颿°ã®äžèº«(ããã£)ãšãªããŸãïŒ
ã;ãã¯é¢æ°å®çŸ©ã®çµããã瀺ãèšå·ã§ãïŒãã£ãã颿°ãå®çŸ©ãããšïŒãã以éã®èšç®ãè¡ããšãã«äœ¿ãããšãã§ããŸãïŒ
äŸã瀺ããŸãããïŒäžèšã®é¢æ°ãå®çŸ©ããŠãããŠïŒ
27 K
ãèšç®ãããšã27648ãã®çµæãåŸãããŸãïŒ
CaFE (empty) % : K 1024 * ;
CaFE (empty) % 27 K
CaFE (27648) %
ã¡ã¢ :
çŸåšã®ããŒãžã§ã³ã§ã¯ïŒã³ãã³ãã©ã€ã³äžã§è€æ°è¡ã«ããã颿°ã®å®çŸ©ãè¡ãããšã¯ã§ããŸããïŒ
åŸè¿°ãããã¡ã€ã«å
ã§ã®èšè¿°ã§ã¯ãããå¯èœã§ãïŒ
ã³ãã³ãã©ã€ã³äžã§é¢æ°ã®å®çŸ©ãè¡ãéã«æåŸã®ã;ããå¿ããå Žåã«ã¯ïŒèªåçã«ã;ããä»å ãããŸãïŒ
ã¡ã¢ :
颿°ã«ã¯å¿
ãååãå¿
èŠã§ãïŒååç¡ãã®é¢æ°ãå®çŸ©ããããšãããšãšã©ãŒãšãªããŸãïŒ
äžæ¹ååã ãã§äžèº«(ããã£)ã®ç¡ã颿°ã¯å®çŸ©å¯èœã§ãïŒ
ã¡ã¢ :
ã:ãïŒã;ãã¯å
±ã«åºåãæåã§ããããïŒãããã®æåã®ååŸã«ã¹ããŒã¹ãã€ããå¿
èŠã¯ãããŸããïŒ
ã: K 1024 * ;ãã¯ã:K 1024 *;ããšããŠãåãããã«åŠçãè¡ãããŸãïŒ
颿°ã®ããã£ã®é·ãã«å¶éã¯ãããŸããïŒèªç±ãªé·ãã®èšç®åŠçãå®çŸ©ã§ããŸãïŒ
颿°åãèããéã«ã¯ïŒåºåãæåã«æ°ãã€ããªããŠã¯ãªããŸããïŒåºåãæåã¯äžé£ã®æåã®åãããã§åæããŠããŸãã®ã§ïŒããã颿°åã®äžéšãšããŠäœ¿ãããšã¯ã§ããŸããïŒã€ãŸãã:test*function 1024 *;ãã®ãããªå®£èšãããããšãããšïŒãããèªã¿èŸŒãã éã«ã:test * function 1024 *;ãã®ããã«åè§£ããŠããŸããŸãïŒãŸãããšããã®ãããªé¢æ°åãå®çŸ©ã§ãããšããŠãïŒãã®é¢æ°ãåŒã³åºãããšã¯ã§ããŸããïŒ
###2.2 æ¡ä»¶å®è¡
####2.2.1 æ¡ä»¶å®è¡ãifã
äœããã®æ¡ä»¶ã«ãã£ãŠïŒããã«ç¶ãèšç®ãããããããããªããããã³ã³ãããŒã«ããããšãããããŸãïŒããããæ¡ä»¶å®è¡ããšåŒã³ãŸãïŒcafeã§ã¯ãifãã³ãã³ããçšããŠãã®æ©èœã䜿ãããšãã§ããŸãïŒ
ãifãã³ãã³ãã¯å°ãè€éã§ãïŒæ¬¡ã®ãããªã«ãŒã«(ææ³)ã§æžããŠãããªããŠã¯ãªããŸããïŒ
ããif æ¡ä»¶ å®è¡ããã³ãã³ããŸãã¯é¢æ°
ifã®åŸãã«ã©ã®ãããªãšã(æ¡ä»¶)ã«ïŒäœãå®è¡ãã(ã³ãã³ã)ãïŒãæžãããšã«ãªããŸãïŒæ¡ä»¶ã®æå®æ¹æ³ã¯4çš®é¡çšæãããŠããïŒãpositiveããnegativeããzeroããtrueããæå®ã§ããŸãïŒããããã¹ã¿ãã¯ã«ããã·ã¥ã®å€ããæ£ããè² ãããŒããããŒãã§ãªããå Žåã«ããã«ç¶ãã³ãã³ããå®è¡ãããŸãïŒ
ã¡ã¢ : ãifãã«ç¶ãæ¡ä»¶ã®æå®ã¯åæ¡ä»¶ã®æåã®äžæåã ãããã°åé¡ãããŸããïŒã€ãŸããpositiveããnegativeããzeroããtrueãã®åæå®ã¯ãããããpããnããzããtããšæžããŠãåãããã«å®è¡ãããŸãïŒ
次ã¯ãã¹ã¿ãã¯äžã®å€ããŒãã§ãªããã°å²ãç®ãè¡ããäŸã§ãïŒããŒãã§å²ããèšç®ã¯è¡ããŸããïŒãã®ãifãã®åŠçãç¡ããã°ãšã©ãŒãšãªã£ãŠããŸããŸãïŒãã®ããã«ãifããçšããããšã§ãšã©ãŒãåé¿ã§ããŸãïŒ
if true /
ifã§æå®ã§ããã³ãã³ãã¯åäžã®ã³ãã³ããŸãã¯é¢æ°ã«éãããŸãïŒæ¬¡ã®äŸã¯çµ¶å¯Ÿå€ãæ±ããèšç®ãæžããäŸã§ããïŒæ®å¿µãªããæåŸ ããéãã«ã¯åããŸããïŒããã§ã¯ãããã¹ã¿ãã¯äžã®å€ãè² ã®å€ã§ããã°ã-1ãæãããããšãããããªèšç®ãè¡ãããã®ã§ãã...
if negative -1 *
ãã®äŸã§ã¯ã-1ãã®éšåã ããifã§ã³ã³ãããŒã«ãããéšåãšè§£éãããŠããŸããŸãïŒããã¹ã¿ãã¯ã®å€ããè² ãã§ããã°ã-1ããããã·ã¥ãããŸãïŒããã§ãªããã°äœãããã·ã¥ãããŸããïŒãã®ããšã©ã¡ãã®å Žåãã¹ã¿ãã¯ã«å¯Ÿããæãç®ãè¡ãããããšã«ãªããŸãïŒ
ãã¡ãããã®ã-1 *ããïŒãããããäžã€ã®é¢æ°ãšããŠå®çŸ©ããŠãããŠïŒifã®å¶åŸ¡ã«ãããçšããããšãå¯èœã§ããïŒèšè¿°ãç
©éã«ãªãïŒæžãã«ãèªãã«ãè¯ãããšã¯ãããŸããïŒ
ãããåé¿ããããã«è€æ°ã®ã³ãã³ããæ°å€ãäžã€ã«ãŸãšããæ¹æ³ãçšæãããŸããïŒã''ãã®ãããªäžå¯Ÿã®ã·ã³ã°ã«ã¯ã©ãŒãã䜿ããŸãïŒãã®èšå·ã«å²ãŸããç¯å²ã¯åäžã³ãã³ã(å³å¯ã«èšããšäžã€ã®èªïŒcafeã§ã¯ãã®äžã€ã®èªãšããŠæ±ãããèªããããŒã¯ã³(token)ããšåŒã³ãŸã)ãšããŠæ±ãããŸãïŒ
ã¡ã¢ : ã·ã³ã°ã«ã¯ã©ãŒãã®æ±ãã¯ããããé¢åãªå ŽåããããŸãïŒãã®ãããªå Žåã«ã¯ãåœåº§é¢æ°ãã䜿ãããšãã§ããŸãïŒåœåº§é¢æ°ã«ã€ããŠã¯åŸã®ç« ã§èª¬æããŸãïŒ
ã·ã³ã°ã«ã¯ã©ãŒããçšããŠå ã»ã©ã®çµ¶å¯Ÿå€ãæ±ããèšç®ã¯ä»¥äžã®ããã«æžãããšãã§ããŸãïŒ
if negative '-1 *'
ã¹ã¿ãã¯ã®å€ãè² ã§ãã£ãå Žåã«ã¯ã'-1 *'ããèšç®ãããŸãïŒãã以å€ã®å Žåã«ã¯äœãè¡ãããŸããïŒ
ããã«ããã颿°ãšããŠå®çŸ©ããŠãããšäŸ¿å©ã§ãããïŒæ¬¡ã®ããã«æžããŸã(abs 㯠absoluteã®ç¥ã§ã)ïŒ
: abs if negative '-1 *' ;
äžã¯ãã®å®è¡äŸã§ãïŒ
CaFE (empty) % : abs if negative '-1 *' ;
CaFE (empty) % 3 abs
CaFE ( 3) % -5 abs
CaFE ( 5) %
####2.2.2 æ¡ä»¶å®è¡ãifelseã
æ¡ä»¶å®è¡ã«ã¯ãifã以å€ã«ïŒããäžã€ãifelseããçšæãããŠããŸãïŒä»¥äžã®ææ³ãçšããŸãïŒ
ifelse æ¡ä»¶ ã³ãã³ã1 ã³ãã³ã2
ã¹ã¿ãã¯äžã®å€ãæ¡ä»¶ã«æå®ãããã®éããªããã³ãã³ã1ããå®è¡ãïŒããã§ãªããªããã³ãã³ã2ããå®è¡ããŸãïŒ
ã¹ã¿ãã¯äžã®å€ãæ£ãè² ãã§è¡šç€ºãå€åãããäŸã§ãïŒ
ifelse positive 'print POSITIVE' 'print NEGATIVE'
ã¹ã¿ãã¯ã®å€ãæ£ãªããPOSITIVEãïŒè² ãªããNEGATIVEãã衚瀺ããŸãïŒ
ãprintãã¯ãã®ã³ãã³ãã«ç¶ãèªãæååãšããŠæ±ãïŒããã衚瀺ããŸãïŒ
CaFE ( 7) % ifelse positive 'print POSITIVE' 'print NEGATIVE'
POSITIVE
CaFE ( 7) %
CaFE ( 7) % -7
CaFE ( -7) % ifelse positive 'print POSITIVE' 'print NEGATIVE'
NEGATIVE
CaFE ( -7) %
ã¡ã¢ : ifïŒifelseã¯ã¹ã¿ãã¯äžã®å€ãèŠã«ãããŸããïŒå€ã¯ã¹ã¿ãã¯ããããããããã« æ®ããŸãïŒ
ã¡ã¢ : ãã®äŸã¯ããŸãããäŸã§ã¯ãªãã§ããïŒå€ã0ã®ãšãã«ããNEGATIVEãã衚瀺ãããŠããŸããŸãïŒãã®åé¡ã¯ä»¥äžã®ããã«ããããšã§è§£æ±ºã§ããŸãïŒ
ifelse zero 'print ZERO' 'ifelse positive ¥'print POSITIVE¥' ¥'print NEGATIVE¥''
ã¡ã¢ : printã³ãã³ãã¯RPNèšæ³ã«åã£ãŠããŸãã(ifãifelseãããã§ã)ïŒããã«ã€ããŠã¯[3.4]ç¯ãäŸå€çãªææ³ãçšããã³ãã³ããã§è©³ãã解説ããŸãïŒ
###2.3 ç¹°ãè¿ãå®è¡(ã«ãŒã)
äœåºŠãåãèšç®ãç¹°ãè¿ãå Žåã«ïŒãã®éœåºŠãã®åŠçãå ¥åããã®ã¯å€§å€ã§ãïŒãã®ããã³ãã³ããç¹°ãè¿ãå®è¡ããä»çµã¿ãçšæãããŠããŸãïŒ
ãtimesãã³ãã³ãã䜿ããŸãïŒtimesã³ãã³ãã¯ä»¥äžã®ããã«æžããŸãïŒ
times ã³ãã³ã
ã¹ã¿ãã¯äžã®å€ããããããã®å€ã§ç€ºãããåæ°ã ãæå®ãããã³ãã³ããå®è¡ããŸãïŒã³ãã³ãã§æå®ã§ããã®ã¯äžã€ã®ã³ãã³ãã ããšãªã£ãŠããŸã(ifãšåæ§ã§ã)ïŒ
次ã®äŸã§ã¯timesãçšããŠãHello!ãã10å衚瀺ããŠããŸãïŒ
CaFE (empty) % 10 times 'print A'
AAAAAAAAAA
CaFE (empty) %
泚æ : cafeã«ã¯ãtimesãã®ä»ã«ãtimeãã³ãã³ããçšæãããŠããŸãïŒãtimeãã¯çŸåšæéãèšç®ããããã®å€ãåŸãã³ãã³ãã«ãªã£ãŠããŸãïŒ
次ã¯timesãçšããèšç®ã®äŸã§ãïŒ
1 10 times '2 *'
ãã®äŸã§ã¯æ¬¡ã®ãããªåäœãšãªããŸãïŒ
- ãŸãã¹ã¿ãã¯ã«ã1ããïŒæ¬¡ã«ã10ããããã·ã¥ïŒ
- timesã³ãã³ããã¹ã¿ãã¯ããããããŸãïŒããããããå€ã¯10ã ã£ãã®ã§ã2 *ãã10åå®è¡ããïŒ
CaFE (empty) % 1 10 times '2 *'
CaFE ( 1024) %
2.4 倿°
ããŒã¿ãä¿åããå ŽæãšããŠïŒã¹ã¿ãã¯ã®ä»ã«ã倿°ããçšæãããŠããŸãïŒ
ã¹ã¿ãã¯ä»¥å€ã®äžæçã«ããŒã¿ã眮ãå ŽæãšããŠå€æ°ã䜿ãäºãåºæ¥ãŸãïŒ
倿°ã®èªã¿æžãã«ã¯ã>ããšã<ãã®ã³ãã³ããšå€æ°ã®ååãçµã¿åãããŠäœ¿ããŸãïŒ
äžã®äŸã§ã¯ãvariable_sampleããšããåã®å€æ°ã«æ°å€l1234ãæžã蟌ã¿ïŒãã®åŸèªã¿åºããŠããŸãïŒ
CaFE (empty) % 1234
CaFE ( 1234) % > variable_sample
CaFE (empty) % < variable_sample
CaFE ( 1234) %
ãã®ååã«äœ¿çšã§ããæåïŒæåæ°ã«ã¯ç¹ã«å¶éã¯ãããŸããïŒ
ã¡ã¢ : ãã®èšå·ãç¢å°ãšã¿ãªããŠïŒå·ŠåŽã«ã¹ã¿ãã¯ïŒå³åŽã«å€æ°ããããã®ãšèãããšããçŽæçã§ãïŒ
ã¡ã¢ :
ãã®äŸã§ç€ºãã倿°ã¯é¢æ°ããã®ã¢ã¯ã»ã¹ãåºæ¥ãŸããïŒ
颿°ããèªç±ã«ã¢ã¯ã»ã¹ã§ãã倿°ã¯ãã°ããŒãã«å€æ°ããšåŒã°ãïŒãã®å
ã§è©³ãã説æãè¡ãããŸãïŒ
ã¡ã¢ :
ã°ããŒãã«å€æ°ä»¥å€ã«ãããã²ãšã€ïŒé¢æ°ãåŒã³åºããåŽã®å€æ°ãã¢ã¯ã»ã¹ããææ®µãçšæãããŠããŸãïŒ
ããã¯ãã®å
ã§ãéåžžå€æ°ã®ã¢ã¯ã»ã¹ç¯å²å€æŽãã®ç¯ã§è§£èª¬ããŸãïŒ
ã¡ã¢ :
ã>ãïŒã<ãã¯åºåãæåã§ãïŒ
ãªã®ã§ïŒå€æ°alphaã®å
容ãbetaã«ã³ããŒããå ŽåïŒãbetaãã®ããã«æžããŠãåé¡ã¯ãããŸããïŒ
##3. 詳ããäœ¿ãæ¹
###3.1 ããŒã¿å
####3.1.1 ã¹ã¿ãã¯ã«çœ®ãããšã®ã§ããããŒã¿ïŒ
cafeã§æ±ããããŒã¿ã¯æ°å€ïŒæååãšåŸã«è§£èª¬ãããŠãŒã¶ã¹ã¿ãã¯ã®3çš®é¡ã§ãïŒ
ã¹ã¿ãã¯ã«ãããããŒã¿ã¯ãã¹ãŠå€æ°ã«çœ®ãããšãã§ããŸãïŒ
#####3.1.1.1 æ°å€
cafeãæ±ãæ°å€ã«ã¯æŽæ°åïŒæµ®åå°æ°ç¹åã®2çš®é¡ããããŸãïŒ
ãããã®åã®éžæã¯å
¥åãèšç®ã®çµæã«ãã£ãŠèªåçã«éžæãããããã«ãªã£ãŠããŸãïŒ
æ°å€ã®æå®(å ¥åãããšã)ã¯åçŽã«æ°åã䞊ã¹ããã®ïŒæ£/è² ã®ç¬Šå·ä»ãïŒå°æ°ç¹ãå«ãã 衚çŸããeããçšããæµ®åå°æ°è¡šçŸïŒããã«ã0xããããªãã£ã¯ã¹ãšããŠçšãã16鲿°è¡šçŸã䜿ãããšãã§ããŸãïŒ
äžã¯ãã®äŸã§ãïŒ
1234
-567
+89
3.14
5.6e8
234e-9
0xABCD
åãæ±ãããšã®ã§ããæå€§ïŒæå°ã®æŽæ°å€ã¯å®è¡ç°å¢ã«äŸåããŸãïŒcafeã§ã¯ç¹ã«ãããèŠå®ããŠããŸããïŒ
åã®è©±ãåºãã®ã§äžã€ã®é¢æ°ã®äŸããããŠãããŸãïŒ
äžã®äŸã¯ãâŸããšããååãã€ãããããå転ãè¡ã颿°ã§ãïŒ
: ⟠1 + -1 * ;
ãã®é¢æ°ãå®éã«å®è¡ããŠã¿ããšïŒä»¥äžã®ãããªçµæãšãªããŸãïŒãhexãã¯çµæè¡šç€ºã¢ãŒãã16鲿°ã«å€æŽããã³ãã³ãã§ã(10鲿°è¡šç€ºã¢ãŒããžã®å€æŽã¯ãdecãã³ãã³ãã䜿ããŸã)ïŒ
ãã®å®è¡ç°å¢ã§ã¯æŽæ°ã®è¡šçŸã«2ã®è£æ°ã䜿ãããŠããããïŒ-1ããããããšã§ãããã®å転ãè¡ãããŠããã®ãããããŸãïŒãŸã-1ãšè¡šç€ºãããŠããæŽæ°ã16é²è¡šç€ºã«åãæ¿ããããšã§ïŒãã®cafeãå®è¡ããŠããç°å¢ã§ã¯æŽæ°ã32ãããã§æ±ãããŠããããšã確èªã§ããŸãïŒ
CaFE (empty) % : ⟠1 + -1 * ;
CaFE (empty) % 0
CaFE ( 0) % âŸ
CaFE ( -1) % hex
CaFE (0xFFFFFFFF) %
CaFE (0xFFFFFFFF) % 0xAAAA5555
CaFE (0xAAAA5555) % âŸ
CaFE (0x5555AAAA) %
泚æ :
éåžžã«å€§ããª/å°ããªæŽæ°ãå
¥åããå Žåã«ã¯æ³šæãå¿
èŠã§ãïŒ
æŽæ°ã¯cafeå
éšã§ã¯æŽæ°ã¯ïŒåžžã«ç¬Šå·ä»ãã®æŽæ°ãšããŠæ±ãããŸãïŒãããã®è¡šçŸç¯å²ãè¶
ããæ°å€ãå
¥åãããå ŽåïŒwarningã衚瀺ãïŒèªåçã«æµ®åå°æ°åã«å€æããŠã¹ã¿ãã¯ã«ããã·ã¥ãããŸãïŒ
16鲿°ã§å
¥åããå Žåã«ã¯å
¥åã®æç¹ã§ã¯ãã®å€ã¯ç¬Šå·ãªãã®æŽæ°ãšããŠæ±ãããŸãïŒ
CaFE (empty) % 2147483647
CaFE (2147483647) % 2147483648
warning : converted to float
CaFE (2.14748e+09) %
CaFE (2.14748e+09) % 0x80000000
CaFE (-2147483648) %
ã¡ã¢ : æŽæ°å ¥åã®èšè¿°ã¯Cèšèªã®ããã«å£ããŸãïŒãµãã£ãã¯ã¹ãªãã®æŽæ°ã¯10é²ïŒ0xã®ãµãã£ãã¯ã¹ïŒ0ã§å§ãŸãæ°å€ã¯ãããã16é²ïŒ8é²ã®ããŒã¿ãšããŠæ±ãããŸãïŒ
#####3.1.1.2 æåå
ã¹ã¿ãã¯ã«ã¯æ°ã ãã§ã¯ãªãïŒæååãããã·ã¥ã§ããŸãïŒããã€ãã®ã³ãã³ãã§ã¯ã¹ã¿ãã¯ã«æååã眮ããŠããå®è¡ããããã«ãªã£ãŠããŸãïŒ
ããšãã°ãã¡ã€ã«æäœã®ã³ãã³ããçšããéã«ã¯ïŒãã®ãã¡ã€ã«åãæå®ããªããã°ãªããŸããïŒã³ãã³ããå®è¡ããéã«ã¯ãã®ãã¡ã€ã«åãã¹ã¿ãã¯ãããããããŸãïŒ
æååããŒã¿ã®é·ãã«ã¯å¶éã¯ãããŸãã(ã³ã³ãã¥ãŒã¿ã«æèŒãããã®ã¡ã¢ãªãµã€ãºã«ããå¶éã¯ãããŸã)ïŒ
æååãã¹ã¿ãã¯ã«ããã·ã¥ããå Žåã«ã¯ïŒæååãã" "ãããã«ã»ã¯ã©ãŒãã§å²ã¿ãŸãïŒ
ããã·ã¥ãããæååã¯ãã®ããã«ã»ã¯ã©ãŒããé€ããæååããŒã¿ãããã·ã¥ãããŸãïŒããã³ãã衚瀺ã§ã¯ãã®æååã¯ã" "ãä»ãã§è¡šç€ºãããŸããïŒããã¯äŸ¿å®çã«ãæååããŒã¿ãã§ããããšã瀺ãããã«ä»ããããŠãããã®ã§ïŒå®éã®ããŒã¿ã«ã¯å«ãŸããŸããïŒ
ããã¯ã.(ããªãªã)ãã³ãã³ãã§ç¢ºèªã§ããŸãïŒãã®ã³ãã³ãã¯æåŸã«ã¹ã¿ãã¯ã«ããã·ã¥ãããããŒã¿ã次ã®è¡ã«è¡šç€ºãããã®ã§ãïŒ
CaFE (empty) % "sample string"
CaFE ("sample string") % .
sample string
CaFE ("sample string") %
ããããã«ã»ã¯ã©ãŒããæååã«å«ããããªãïŒããã¯ã¹ã©ãã·ã¥ãããã«ã»ã¯ã©ãŒãã®åã«ä»ããŠæååã®çµããã§ãªãããšã瀺ããŸãïŒ
CaFE ("sample string") % "¥"quote sample¥""
CaFE (""quote sample"") % .
"quote sample"
CaFE (""quote sample"") %
æååãšããŠããŒã¿ãããããããšãïŒå ã®ããŒã¿ãæ°å€ã§ãã£ããªãïŒãã®ããŒã¿ã¯æååã«å€æãããŸãïŒããšãã°æ°å€333ãã¹ã¿ãã¯ã«ããïŒããããsaveãã³ãã³ãã§äœ¿ã£ãå ŽåïŒ"333"ããã¡ã€ã«ã®ååãšããŠäœ¿ãããããšã«ãªããŸãïŒ
ã¡ã¢ : æååã®äžã§ã¯Cèšèªã®ãããªãšã¹ã±ãŒãã·ãŒã±ã³ã¹ã䜿ãããšãã§ããŸãïŒãµããŒãããããšã¹ã±ãŒãã·ãŒã±ã³ã¹ã¯ä»¥äžã®éãã§ãïŒ
Â¥n : æ¹è¡
Â¥v : æ¹è¡
Â¥f : æ¹è¡
¥r : 埩垰
Â¥t : ã¿ã
¥¥ : ããã¯ã¹ã©ãã·ã¥
Â¥' : ã·ã³ã°ã«ã»ã¯ã©ãŒã
Â¥" : ããã«ã»ã¯ã©ãŒã
Â¥xHHH : 16鲿°
#####3.1.1.3 ãŠãŒã¶ã¹ã¿ãã¯
ã¹ã¿ãã¯ã«ã¯æ°ããªã¹ã¿ãã¯(ãŠãŒã¶ã¹ã¿ãã¯)ã眮ãããšãå¯èœã§ãïŒ
ãŠãŒã¶ã¹ã¿ãã¯ã«ã€ããŠã¯å
ã®ç« ã§åãäžããŸãïŒ
####3.1.2 æ°å€ã®æ±ããæ¹
å
ã«èª¬æãããšããïŒæ°å€ã¯å
éšçã«æŽæ°åãšæµ®åå°æ°ç¹åã§æ±ãããŸãïŒ
ç¹ã«å€æã®å¿
èŠã®ãªãå ŽåïŒå
¥åãããå€ã¯æŽæ°ãšããŠæ±ãããŸãïŒ
æŽæ°åãšæµ®åå°æ°ç¹åã§èšç®ãããå ŽåãïŒæŽæ°å士ã®é€ç®ã§ã¯ããããã©å²ãåããªãå ŽåïŒããã«æ°åŠé¢æ°ãçšãããšãã«ã¯èšç®çµæã¯æµ®åå°æ°ç¹åãšãªããŸãïŒãŸããfloatãã³ãã³ãã§æŽæ°åããŒã¿ãæµ®åå°æ°ç¹åã«æç€ºçã«å€æããããšãã§ããŸãïŒ
é€äœ(ã¢ãžã¥ã)èšç®ã®çµæã¯åžžã«æŽæ°åãšãªããŸãïŒãtruncãã³ãã³ãã¯æµ®åå°æ°ç¹åããŒã¿ãæŽæ°åã«å€æããããšãã§ããŸã(æ£ã§ã¯å°æ°ç¹ä»¥äžãåãäžãïŒè² ã®æ°ã§ã¯åãäžããŸã)ïŒ
æŽæ°åïŒæµ®åå°æ°ç¹åã§æ±ããæ£ã®æå€§å€ãªãã³ã«è² ã®æå€§å€ïŒæµ®åå°æ°ç¹åã®ç²ŸåºŠã¯cafeãå®è¡ããç°å¢ã«äŸåããŸãïŒ
###3.2 ã¹ã¿ãã¯ã®æäœ
ã¹ã¿ãã¯ã¯äžèšã®ãããªåã®ããŒã¿ãæ ŒçŽããŸãïŒ
cafeã®ã¹ã¿ãã¯ã«ã¯æ ŒçŽããããŒã¿ã®æ°ã«å¶éã¯ãããŸãã(ã³ã³ãã¥ãŒã¿ã«æèŒãããã¡ã¢ãªãµã€ãºã«ããå¶éã¯ãããŸãïŒãããã¹ã¿ãã¯æäœã®äžéšã¯åŸè¿°ãããã€ã³ããã¯ã¹ããçšãããããã®ã³ã³ãã¥ãŒã¿ã®æ±ããæŽæ°åã®æå€§å€ãŸã§ãšãªããŸãïŒ)ïŒ
ã¹ã¿ãã¯ã¯ãclãã³ãã³ãã«ãã£ãŠã¯ãªã¢ã§ããŸãïŒclã¯ã¹ã¿ãã¯äžã®ããŒã¿ããã¹ãŠæ¶å»ããŸãïŒ
ã¹ã¿ãã¯ãžã®ããŒã¿ã®æ ŒçŽç¶æ³ã¯ãstackãã³ãã³ãã§ç¢ºèªã§ããŸãïŒåããŒã¿ã«ã¯ãã€ã³ããã¯ã¹(ã¹ã¿ãã¯ã»ãã€ã³ã¿)ããšåŒã°ããæ°ãäœçªç®ã«æ ŒçŽãããããŒã¿ã§ãããã瀺ããŸãïŒã€ã³ããã¯ã¹ã¯æåã«ãã·ã¥ãããããŒã¿ã0ãšãªãïŒãã以é1ïŒ2ïŒ3ãšç¶ããŸãïŒ
stackã³ãã³ãã§è¡šç€ºããã巊端ã®ãspãã¯ã¹ã¿ãã¯ãã€ã³ã¿ãæå³ããŠããŸãïŒ
ããã«ç¶ãã«ã®ã«ãã³å
ãã¹ã¿ãã¯ãã€ã³ã¿ã®å€ã§ãïŒå³ç«¯ã«ã¯ã¹ã¿ãã¯å
ã®ããŒã¿ã衚瀺ãããŸãïŒ
ã¹ã¿ãã¯ãã€ã³ã¿ãšããŒã¿ã®å€ã®éã«äžžã«ãã³ã§ç€ºãããŠãããã®ã¯ïŒããŒã¿ã®åã§ãïŒãiãïŒãfãïŒãsãã¯ããããïŒæŽæ°åïŒæµ®åå°æ°ç¹åïŒæåååã瀺ããŠããŸãïŒ
ãdepthãã³ãã³ãã¯ã¹ã¿ãã¯ã«ããã€ã®ããŒã¿ããããããã§ãã¯ãïŒãã®å€ãã¹ã¿ãã¯ã«ããã·ã¥ããŸãïŒ
CaFE (empty) % 1 2.3 "test" -7
CaFE ( -7) % stack
sp[ 0] (i) 1
sp[ 1] (f) 2.3
sp[ 2] (s) "test"
sp[ 3] (i) -7
CaFE ( -7) % depth
CaFE ( 4) % stack
sp[ 0] (i) 1
sp[ 1] (f) 2.3
sp[ 2] (s) "test"
sp[ 3] (i) -7
sp[ 4] (i) 4
CaFE ( 4) %
ãdepthããšãtimesãã³ãã³ããçšãããšïŒã¹ã¿ãã¯å ã®ããŒã¿ã®ç·åãç°¡åã«æ±ããããšãã§ããŸãïŒäžã®äŸã§ã¯5åã®ããŒã¿ãããããšãdepthã§ç¢ºèªãïŒããã®å€ - 1ãåã®è¶³ãç®ãç¹°ãè¿ãäŸã§ãïŒ
CaFE (empty) % 1 2 3 4 5
CaFE ( 5) % depth 1 - times +
CaFE ( 15) %
æåŸã«ããã·ã¥ãããããŒã¿ã ããã¯ãªã¢ãããïŒå床åãããŒã¿ãããã·ã¥ããããšãã«ã¯ãããããpopããpushãã䜿ããŸãïŒãpushãã®ä»£ããã«ãdupãã䜿ãããšãã§ããŸãïŒãpushããšãdupãã¯å šãåãããšãããŸãïŒ
CaFE (empty) % 1 2 "test" 4
CaFE ( 4) % stack
sp[ 0] (i) 1
sp[ 1] (i) 2
sp[ 2] (s) "test"
sp[ 3] (i) 4
CaFE ( 4) % pop
CaFE ("test") % stack
sp[ 0] (i) 1
sp[ 1] (i) 2
sp[ 2] (s) "test"
CaFE ("test") % push
CaFE ("test") % stack
sp[ 0] (i) 1
sp[ 1] (i) 2
sp[ 2] (s) "test"
sp[ 3] (s) "test"
CaFE ("test") %
ã¹ã¿ãã¯ã®æåŸã®2ã€ã®ããŒã¿ãå ¥ãæ¿ããå Žåã«ã¯ãswapãã䜿ããŸãïŒ
CaFE (empty) % .1 .2 .3 "last"
CaFE ("last") % cl
CaFE (empty) % .1 .2 .3 "last" stack
sp[ 0] (f) 0.1
sp[ 1] (f) 0.2
sp[ 2] (f) 0.3
sp[ 3] (s) "last"
CaFE ("last") % swap
CaFE (0.3) % stack
sp[ 0] (f) 0.1
sp[ 1] (f) 0.2
sp[ 2] (s) "last"
sp[ 3] (f) 0.3
CaFE (0.3) %
ããã«ã¹ã¿ãã¯ã®äžèº«ãããŒããŒããããã«ã¯ãrotããçšããŸãïŒæåŸã«ããã·ã¥ãããããŒã¿ã¯ïŒã¹ã¿ãã¯ã®å é ãžæã£ãŠããããŸãïŒ
CaFE (empty) % 0 1 2 3 "last" stack
sp[ 0] (i) 0
sp[ 1] (i) 1
sp[ 2] (i) 2
sp[ 3] (i) 3
sp[ 4] (s) "last"
CaFE ("last") % rot
CaFE ( 3) % stack
sp[ 0] (s) "last"
sp[ 1] (i) 0
sp[ 2] (i) 1
sp[ 3] (i) 2
sp[ 4] (i) 3
CaFE ( 3) %
ãdepthããšãtimesãïŒããã«ãrotãã³ãã³ããçšãããšïŒã¹ã¿ãã¯å ã®ããŒã¿ãã¹ãŠã«å¯Ÿããåã ã®æäœãå¯èœã§ãïŒäžã¯ãã®äŸã§ãïŒ
CaFE (empty) % 1 2 3 4 5
CaFE ( 5) % depth times '2 * rot'
CaFE ( 10) % stack
sp[ 0] (i) 2
sp[ 1] (i) 4
sp[ 2] (i) 6
sp[ 3] (i) 8
sp[ 4] (i) 10
CaFE ( 10) %
ã¹ã¿ãã¯æäœã«ã¯ãã®ã»ãïŒãã¹ã¿ãã¯äžã®æåŸã®Nåãdupãããã³ãã³ããmdupããšïŒã¹ã¿ãã¯ã®ããŒã¿ãéé ã«ããã³ãã³ããreverseããçšæãããŠããŸãïŒãmdupããšãnpushãã¯åãããšãè¡ãã³ãã³ãã§ãïŒ
CaFE (empty) % 1 2 3 4 5
CaFE ( 5) % 3 mdup stack
sp[ 0] (i) 1
sp[ 1] (i) 2
sp[ 2] (i) 3
sp[ 3] (i) 4
sp[ 4] (i) 5
sp[ 5] (i) 3
sp[ 6] (i) 4
sp[ 7] (i) 5
CaFE ( 5) %
CaFE (empty) % 1 2 3 4 5 stack
sp[ 0] (i) 1
sp[ 1] (i) 2
sp[ 2] (i) 3
sp[ 3] (i) 4
sp[ 4] (i) 5
CaFE ( 5) % reverse stack
sp[ 0] (i) 5
sp[ 1] (i) 4
sp[ 2] (i) 3
sp[ 3] (i) 2
sp[ 4] (i) 1
CaFE ( 1) %
###3.3 ãã¡ã€ã«ïŒãã¡ã€ã«ã®æäœ
####3.3.1 ãã¡ã€ã«ã®èªã¿èŸŒã¿
cafeã¯ãã¡ã€ã«ãèªã¿èŸŒãããšãã§ããŸãïŒ
ãuseãã³ãã³ãã¯ïŒæå®ããããã¡ã€ã«ãèªã¿èŸŒã¿ïŒãã®å
容ãå®è¡ããŸãïŒ
äžã®äŸã¯"simple_sample.cafe"ãšããåã®ãã¡ã€ã«ãèªã¿èŸŒãã äŸã§ãïŒãã¡ã€ã«ã®äžèº«ã¯ã1 1 + .ããšãªã£ãŠããããïŒãããå®è¡ããŠããŸãïŒ
CaFE (empty) % "simple_sample.cafe" use
2
CaFE ( 2) %
ãã®ãããªèªã¿èŸŒã¿ãè¡ããã¡ã€ã«ã§ïŒé¢æ°ã®å®çŸ©ãããŠãããšäŸ¿å©ã§ãïŒãŸããuseãã³ãã³ããèµ·åã®åºŠã«å®è¡ããªããŠãïŒãã¡ã€ã«ã®ååãã.cafeã(ãããã§å§ãŸãUNIXã§ã®äžå¯èŠãã¡ã€ã«)ãšããŠèªåã®ãŠãŒã¶ãã£ã¬ã¯ããªã«çœ®ããŠãããšèµ·åæã«èªåçã«èªã¿èŸŒãã§ãããŸãïŒ
éåžžã®ã·ã§ã«ã§äœ¿ãããã°ããããã¡ã€ã«åæå®ã«äœ¿ãããšãã§ããŸãïŒ
ã¯ã€ã«ãã«ãŒãã䜿ãããšã«ããïŒäžåã®ã³ãã³ãå®è¡ã§ïŒè€æ°ã®ãã¡ã€ã«ãèªã¿èŸŒãããšãå¯èœã§ãïŒä»¥äžã®äŸã§ã¯ãtestfile*.cafeãã§ç€ºãããã¹ãŠã®ãã¡ã€ã«ãèªã¿èŸŒãäŸã§ãïŒãã®å Žåè€æ°ã®ãã¡ã€ã«ãèªã¿èŸŒãŸããŸããïŒãã®é çªã¯ä¿èšŒãããŸããïŒ
CaFE (empty) % "testfile*.cafe" use
次ã®ããã«ããããšã§ãtestfile3.cafeããtestfile4.cafeããtestfile5.cafeããtestfile6.cafeãã®4åã®ãã¡ã€ã«ã ããèªã¿èŸŒãããã«æå®ããããšãå¯èœã§ãïŒ
CaFE (empty) % "testfile[3-6].cafe" use
ãããã¯ã€ã«ãã«ãŒããªã©ã®è§£éã¯ïŒéåžžã·ã§ã«ãè¡ãè§£éããã®ãŸãŸäœ¿ãäºãã§ããããã«ãªã£ãŠããŸãïŒ
####3.3.2 ãã¡ã€ã«ã®æžãåºã
èªã¿èŸŒã¿ãšã¯éã«ãã¡ã€ã«ãžã®æžãåºããè¡ããŸãïŒ
æžãåºãã«ã¯2çš®é¡ã®ã³ãã³ããããïŒã¹ã¿ãã¯ã®ããŒã¿ã ããæžãåºããsaveããšé¢æ°ãªãã³ã«ãã¹ããªãä¿åãããputããçšæãããŠããŸãïŒ
泚æ : saveã³ãã³ãã«ãã£ãŠãã¡ã€ã«ã«ä¿åãããããŒã¿ã¯ããã¹ãã«å€æãããŠä¿åãããŸãïŒãã®ããããŒã¿ã®ç²ŸåºŠãä¿æããããšã¯ã§ããŸããïŒãã¡ã€ã«ã«ããã¹ããšããŠä¿åããããã®ããŒã¿ã®å€æã¯æå®ããã倿ã«åŸããŸã(ããã¹ãè¡šç€ºå€æã®é ãåç §)ïŒ
泚æ : saveã³ãã³ãã¯ïŒããŸã®ãšãããŠãŒã¶ã¹ã¿ãã¯ã«ã¯å¯Ÿå¿ããŠããŸããïŒ
####3.3.3 ç¹å¥ãªãã¡ã€ã«
#####3.3.3.1 ã.cafeããã¡ã€ã«
cafeã«ã¯ç¹å¥ãªæ±ããåãããã¡ã€ã«ããããŸãïŒ
ã.cafeããšåã¥ãããããã¡ã€ã«ãïŒãŠãŒã¶ã®ããŒã ãã£ã¬ã¯ããªã«ããå ŽåïŒcafeã¯èµ·ååŸã«èªåçã«ãã®ãã¡ã€ã«ãèªã¿èŸŒã¿ãŸãïŒ
èªåã®ãã䜿ãèšå®ã颿°ïŒå®æ°ãªã©ãããã«æžããŠããããšãã§ããŸãïŒ
#####3.3.3.2 ã.cafe.auto_preferenceããã¡ã€ã«
ã.cafeãã®ä»ã«ããäžã€ç¹å¥ãªãã¡ã€ã«ããããŸãïŒããããŠãŒã¶ãã£ã¬ã¯ããªã«çœ®ããããã¡ã€ã«ã§ã.cafe.auto_preferenceããšããåã®ãã¡ã€ã«ã§ãïŒcafeã¯èµ·åæã«äºã€ã®ãã¡ã€ã«ãèªã¿èŸŒã¿ãŸãïŒãŸãæåã«ã.cafeããæ¬¡ã«ã.cafe.auto_preferenceããèªã¿èŸŒã¿ãŸãïŒ
ã.cafe.auto_preferenceãã¯cafeçµäºã®éœåºŠïŒæŽæ°ãããŸãïŒãã®ãã¡ã€ã«ã«ã¯cafeå®è¡äžã«ãŠãŒã¶ãå®çŸ©ãã颿°ãšïŒå®è¡ãããã¹ããªãèšé²ãããŸã(ã".cafe.auto_preference" putããå®è¡ãããã®ãšåçã§ã)ïŒããã«ããïŒæ¬¡åcafeãèµ·åããéïŒååãŸã§ã®ç¶æ ãåçŸããããšãã§ããããã«ãªã£ãŠããŸãïŒ
ååçµäºæãŸã§ã®ãã¹ããªå±¥æŽã¯ãã®ãã¡ã€ã«ã®äžã«ãhistoryãã³ãã³ããšããŠèšé²ãããŸãïŒãã®ã³ãã³ããå®è¡ãããããšã§cafeå
éšã«ãã¹ããªã»ãšã³ããªãäœãïŒãŠãŒã¶ã®æäœã«åããããšã«ãªããŸãïŒ
ãã®ã³ãã³ãã¯cafeèªèº«ãæ£åžžçµäºæã«ãã¡ã€ã«ã«æžãåºããã®ã§ïŒç¹ã«ãŠãŒã¶ãæèããå¿
èŠã®ãªããã®ã§ãïŒãhistoryãã³ãã³ãã¯ã¿ãŒããã«ããã䜿ããã³ãã³ã(ãã®å Žåã¯è¡é 以å€ã§ãåäœãã)ã§ããïŒãã®ãããªäœ¿ãæ¹ã¯ç¹ã«æå³ãæããªãã§ãããïŒ
####3.3.4 ãã¡ã€ã«ã®æ±ã
#####3.3.4.1 ã³ã¡ã³ã
cafeã§ã¯ãã¡ã€ã«ãèªã¿èŸŒãå ŽåïŒã#ããããã®è¡ã®æåŸãŸã§ãç¡èŠããŸãïŒã€ãŸãcafeã®å®è¡ã«é¢ä¿ã®ãªãã³ã¡ã³ããšããŠæ±ã£ãŠãããŸãïŒ
#####3.3.4.2 ãã¡ã€ã«å ã§ã®é¢æ°
ãã¡ã€ã«å
ã§ã¯ïŒãã倧ãã颿°ã®å®çŸ©ãããããããããïŒè€æ°è¡ã«æž¡ã颿°å®çŸ©ãè¡ããããã«ãªã£ãŠããŸãïŒ
éåžžã®ã¿ãŒããã«ããè¡ã颿°å®çŸ©ã¯1è¡ã«éããïŒé¢æ°çµäºã®èšå·ã;ããçšããªããŠãïŒè¡æ«ã颿°å®çŸ©ã®çµäºãšããŠæ±ããŸãïŒ
ãã¡ã€ã«ã§ã®é¢æ°å®çŸ©ã¯ãããšéãïŒã:ãããã;ããŸã§ã®ãã¹ãŠãäžã€ã®é¢æ°å®çŸ©ãšããŠæ±ããŸãïŒ
###3.4 äŸå€çãªææ³ãçšããã³ãã³ã
å ã«ãå°ãè§ŠããŸãããïŒcafeã§ã¯ãéããŒã©ã³ããã®èšæ³ã«åã£ãŠããªãã³ãã³ããããã€ããããŸãïŒãããã¯é¢æ°ã®å®çŸ©ãªã©ã®é¢æ°æäœïŒå€æ°ã®æäœïŒæ¡ä»¶å®è¡ãã«ãŒãã®å¶åŸ¡ããã«printã®ã³ãã³ãé¡ã§ãïŒããã¯åã«åŒãæžããšãïŒèªããšãã®æ±ããããã®ããã«ãã®ãããªèšæ³ã®äŸå€ãæ¡çšããŠããŸãïŒ
ãããïŒããã°ã©ã çãªã³ãŒããæžãå Žåã«ã¯ïŒãããã®äŸå€çææ³ã«ãã£ãŠå¶çŽãåºãŠãããšèããããŸãïŒ
ããšãã°ã颿°ãå®çŸ©ããéïŒãã®ååãããã£ã倿°ãšããŠã¹ã¿ãã¯ããæž¡ãããããããªå ŽåãèããããŸãïŒ
ãã®ãããªãšãã«ã¯èšå·ã&ããçšããŸãïŒãã®ã&ãã¯cafeãåŒãèªã¿èŸŒãéã«ïŒãã®ãšãã®ã¹ã¿ãã¯ã®äžèº«ã«ãã£ãŠãã®èšå·ã眮ãæããŠãããŸãïŒæ¬¡ã¯é¢æ°å®çŸ©ã®äŸã§ãïŒéåžžã®é¢æ°ã®å®çŸ©æ¹æ³ãšïŒã&ãã䜿ã£ãããŒãžã§ã³ã®äž¡æ¹ã瀺ããŠããŸãïŒ
CaFE (empty) % fstack
CaFE (empty) % : function_sample1 sample_body ;
CaFE (empty) % "sample_body"
CaFE ("sample_body") % "function_sample2"
CaFE ("function_sample2") % : & & ;
CaFE (empty) % fstack
function[ 0] : function_sample1 sample_body
function[ 1] : function_sample2 sample_body
CaFE (empty) %
泚æ:ã&ãã¯äžã€ã®ããŒã¯ã³ãšããŠæ±ãããŸãïŒããšãã°ã¹ã¿ãã¯äžã«"test sample"ã®ããã«ã¹ããŒã¹ãå«ãæåãããïŒããã«å¯ŸããŠã: & ;ããå®è¡ããå Žåã«ã¯ïŒãsampleãã¯é¢æ°ã®ããã£ã«ã¯ãªããŸããïŒãã®å Žåã«ã¯ã&ãã§ã¹ã¿ãã¯ããåã£ãŠããæååãtest sampleãå
šäœã颿°ã®ååã«ãªããŸãïŒ
ãã®ãããªé¢æ°åã®é¢æ°ã¯ä»¥äžã®ããããŠå®è¡ãå¯èœã§ãïŒ
CaFE (empty) % "test sample"
CaFE ("test sample") % : & print "function sample" ;
CaFE (empty) % test¥ sample
"function sample"
CaFE (empty) % 'test sample'
"function sample"
CaFE (empty) %
泚æ:ã&ãã®æ±ãã«ã¯æ³šæãå¿
èŠã§ãïŒã&ããè©äŸ¡ããããšããã«ãã®æåãã¹ã¿ãã¯äžã®å€ã«çœ®ãæããããŸãïŒäžã®äŸã®ããã«é¢æ°å®çŸ©ã®äžã§äœ¿ãããå ŽåïŒã&ããåºãŠãã床ãã®å Žæãé çªã«ã¹ã¿ãã¯ã®å€ã§çœ®ãæããããŠè¡ããŸãïŒ
颿°å®çŸ©æã§ã¯ãªãå®è¡æã«çœ®ãæããè¡ãããå Žåã«ã¯ã&ãã§ã¯ãªãã^ãã䜿ããŸãïŒã^ãã¯é¢æ°å®çŸ©ã®éã«ã¯éåžžã®æåãšããŠæ±ããïŒãã®ãŸãŸã®ç¶æ
ã§é¢æ°ã®ããã£ã«ä¿åãããŸãïŒãã®ã®ã¡é¢æ°ã®å®è¡æã«è©äŸ¡ããããšãåããŠã¹ã¿ãã¯äžã®å€ã«çœ®ãæããè¡ãããŸãïŒ
###3.5 ã·ã§ã«ã»ã³ãã³ãæäœ
å ã®ç¯ã«ãã·ã§ã«ã»ã³ãã³ãæäœããšããèšèãåºãŠããŸãããïŒãŸã 説æãããŠããŸããã§ããïŒ
cafeã§ã¯ãã®å
éšããã·ã§ã«ã»ã³ãã³ããå®è¡ãããããšãã§ããŸãïŒ
ã!ãã³ãã³ãã¯ããã«ç¶ãæååããshãã§å®è¡ããããšããæå³ã«ãªããŸãïŒ
CaFE (empty) % "pwd" !
/Users/okano
CaFE (empty) %
ãã®ããã«ã·ã§ã«ã§ãã¡ãã£ãšäœãããããããæã«äŸ¿å©ã§ãïŒã!ãã䜿ã£ãå ŽåïŒãã®è¡šç€ºã®ã¿ãè¡ããïŒcafeã®å®è¡èªäœã«ã¯åœ±é¿ãäžããŸããïŒ
ããã«ã!!ããšããã³ãã³ããçšæãããŠããŸãïŒãã®ã³ãã³ãã¯ãã·ã§ã«ã§ã®å®è¡çµæãcafeã«åã蟌ããããšãããŠãããŸãïŒä»¥äžã¯ã·ã§ã«äžã§ã3 + 5ããå®è¡ãããŠïŒãã®çµæã«7ãæãããšããäœæ¥ãããŠããŸãïŒ
CaFE (empty) % "expr 3 + 5" !!
CaFE ( 8) % 7 *
CaFE ( 56) %
###3.6 æååã®æäœ
æååã®æäœã«ã¯ç°¡åãªæååé£çµã®ã³ãã³ãã®ã¿ãçšæãããŠããŸãïŒ
ãglueãã³ãã³ããããã§ïŒã¹ã¿ãã¯äžã®æååãåãããŠäžã€ã®æååãšããŸãïŒ
CaFE (empty) % "String" "Sample" stack
sp[ 0] (s) "String"
sp[ 1] (s) "Sample"
CaFE ("Sample") % glue
CaFE ("StringSample") % stack
sp[ 0] (s) "StringSample"
###3.7 æååã®è©äŸ¡
ã¹ã¿ãã¯äžã®æååãåŒãšããŠäœ¿ãããšãã§ããŸãïŒ
ã³ãã³ããevalãã¯ã¹ã¿ãã¯äžã®æååããã®ãŸãŸè©äŸ¡ããŠå®è¡ããŸãïŒä»¥äžã¯ãã®äŸã§ãïŒ
CaFE (empty) % "1 2 3 4 + + +"
CaFE ("1 2 3 4 + + +") % stack
sp[ 0] (s) "1 2 3 4 + + +"
CaFE ("1 2 3 4 + + +") % eval
CaFE ( 10) % stack
sp[ 0] (i) 10
###3.8 ããã³ãã衚瀺ã®åãæ¿ã
ãpromptãã³ãã³ãã«è¡šç€ºã®ãã©ãŒããããããŠãããæååãäžããããšã§ïŒåãæ¿ããè¡ããŸãïŒãã®ãã©ãŒãããã«ã€ããŠã®è©³çްã¯ä»¥äžã®è¡šã®éãã§ãïŒCèšèªã®printf倿ã®ããã«%ãçšããŠãã®è¡šç€ºå 容ãæå®ããŸãïŒ
%b : ãã®å ޿以éã®æåã倪åã«
%n : ãã®å ޿以éã®æåãéåžžã®æåã«
%r : ã¹ã¿ãã¯ã®æäžäœã®ããŒã¿ã衚瀺
%p : ã¹ã¿ãã¯ãã€ã³ã¿ã®å€(ç©ºã®æã¯äœã衚瀺ããªã)
%P : ã¹ã¿ãã¯ãã€ã³ã¿ã®å€(ç©ºã®æã¯ãeãã衚瀺)
%s : çŸåšå¯Ÿè±¡ãšããŠããã¹ã¿ãã¯ã®ID
%S : çŸåšå¯Ÿè±¡ãšããŠããã¹ã¿ãã¯ã®ID (%sãšåã)
%% : ã%ãã衚瀺
äžã«ç€ºããäŸã§ã¯ã() % ããããã³ãããšãïŒã«ãã³å ã®ã€ã³ãŒã«èšå·ã®éã«ã¹ã¿ãã¯IDïŒã«ã®ã«ãã³ã®äžã«ã¹ã¿ãã¯ãã€ã³ã¿å€ïŒãã®ããšã«çŸåšã®ã¹ã¿ãã¯ã®æäžäœã«ããããŒã¿ã®å€ã衚瀺ããããã«ããŸãïŒ
CaFE (empty) % "( =%s= [%p] %b%r%n ) %% " prompt
( =0= [] empty ) %
ãã®äŸã§ã¯å¯Ÿè±¡ãšããŠããã¹ã¿ãã¯IDã0ïŒããã©ã«ãã»ã¹ã¿ãã¯ïŒã§ããïŒã¹ã¿ãã¯ã»ãã€ã³ã¿ã¯åæå€(ã¹ã¿ãã¯ã«äœãç¡ã)ãæããŠããïŒã¹ã¿ãã¯äžã«ã¯äœãããŒã¿ãç¡ãç¶æ
ã瀺ããŠããŸãïŒ
ããã³ããè¡šç€ºã®æå®ã¯ã.cafeããã¡ã€ã«çã«æå®ããŠãããšäŸ¿å©ã§ãïŒ
##4. 颿°ãšå€æ°ã®è©³çް
###4.1. 颿°
####4.1.1 颿°ã®ç®¡çã®ãããã
å®çŸ©ãã颿°ã¯ãfstackããšåŒã°ããå°çšã®ã¹ã¿ãã¯äžã«ä¿åãããŸãïŒ
ä¿åããã颿°ã¯æç€ºçã«æ¶å»ããªãéãïŒãã®ã¹ã¿ãã¯äžã«æ®ããŸãïŒfstackã¯ããŒã¿ä¿åç®çã®ã¹ã¿ãã¯ãšã¯ç¬ç«ããŠããïŒå°çšã®ã³ãã³ããçšããŠæäœããŸãïŒ
颿°ã®å®çŸ©ã¯æ¢ã«èª¬æããããã«äžå¯Ÿã®ã:ãã;ãã®èšå·ãçšããŠè¡ãããŸãïŒé¢æ°ãæ°ãã«å®çŸ©ããããšïŒãã®é¢æ°ã¯fstackã«ããã·ã¥ãããŸãïŒããã·ã¥ããã颿°ã¯ååéšãšããã£éšã«åããŠæååãšããŠä¿åãããŸãïŒé¢æ°ã®åŒã³åºãã¯äžèŽããååãæ€çŽ¢ãããåŸïŒããã£éšãåãåºããïŒãã®æååãè©äŸ¡ããããšããæé ã§è¡ãããŸãïŒ
å®çŸ©ããããšããŠãã颿°ã®åãïŒæ¢ã«fstackã«ãããšïŒååã®é¢æ°ãäžæžãããŸãïŒ[4.1.2]颿°ã®åå®çŸ©ã®é åç §ïŒ
å®çŸ©ããã颿°ã¯(åŸè¿°ããããã±ãŒãžã«é¢ä¿ãªã)äœåŠããã§ãã¢ã¯ã»ã¹ãå¯èœã§ãïŒ
次ã«fstackæäœçšã®ã³ãã³ãã解説ããŸãïŒãã åŒæ°ããšãã³ãã³ãã¯ãã¹ãŠåŸçœ®åã®ã³ãã³ãã§ïŒé¢æ°ã®ååãåŒæ°ãšããŠäžããŸãïŒãã ãã®é¢æ°ã®ååã®æå®ã«ã¯ã""ãã®ãããªåŒçšç¬Šã¯çšããŸããïŒ
ãfstackãã¯fstackã衚瀺ããŸãïŒçŸåšã®ã¹ã¿ãã¯ã®ç¶æ ã瀺ãããŸãïŒ
ãforgetãã¯é¢æ°ãæ¶å»ããã®ã«äœ¿ãããšãã§ããŸãïŒforgetã¯ãã®ã³ãã³ãã®åŸã«åŒæ°ããšãïŒåŒæ°ãšããŠæå®ããã颿°ãšïŒãã®åŸã«å®çŸ©ããã颿°ãã¹ãŠãæ¶å»ãããŸãïŒ
CaFE (empty) % fstack
:minute 60
:hour minute 60 *
:day hour 24 *
:week day 7 *
:db logt 20 *
:abs if neg '-1 *'
:radtodig pi / 180 *
CaFE (empty) % forget db
forget function "radtodig".
forget function "abs".
forget function "db".
CaFE (empty) % fstack
:minute 60
:hour minute 60 *
:day hour 24 *
:week day 7 *
CaFE (empty) %
ãfdeleteãã¯åäžã®é¢æ°ã®æ¶å»ã«äœ¿ããŸãïŒ ãforgetããfdeleteãã¯ã©ã¡ããåŒæ°ãäžã€ã ãåããŸãïŒ
ãfrenameãã¯é¢æ°ã®ååã倿ŽããŸãïŒäºã€ã®åŒæ°ãçšãïŒå€æŽå¯Ÿè±¡ãšãã颿°åïŒå€æŽåŸã®é¢æ°åã®é ã§æå®ããŸãïŒ
CaFE (empty) % fstack
function[ 0] : sample_name function body
CaFE (empty) % frename sample_name after_rename
CaFE (empty) % fstack
function[ 0] : after_rename function body
CaFE (empty) %
颿°ã®ããã£éšã®å€æŽã¯ååã®é¢æ°ã®åå®çŸ©ã§è¡ããŸãïŒå¯Ÿè©±çç°å¢ã§ã¯ãfeditããšããã³ãã³ããçšæãããŠããïŒæå®ãã颿°ãã³ãã³ãã©ã€ã³ã«åŒã³åºãããšãã§ããŸãïŒãã ã³ãã³ãã©ã€ã³ã«åŒã³åºããæ¢ã«å®çŸ©ãããŠãã颿°ã®äžéšãç·šéãïŒãªã¿ãŒã³ããŒãæŒãããšã§ïŒåå®çŸ©ãç°¡åã«è¡ãããšãã§ããŸãïŒãã ãã®ã³ãã³ãã䜿ãããšã«ãã£ãŠïŒé¢æ°å®çŸ©æã®ã¿ã€ãã®æéãïŒã³ããŒããŒã¹ãšã®æéãçããŸãïŒ
####4.1.2 颿°ã®åå®çŸ©
颿°ã¯åå®çŸ©å¯èœã§ãïŒå ã«å®çŸ©ããŠãã颿°ãšåãååã®é¢æ°ãå®çŸ©ãããšïŒåŸã®å®çŸ©å 容ã§äžæžããããŸãïŒ
####4.1.3 ã³ãã³ãã®(颿°ã«ãã)åå®çŸ©
颿°åæ§ã«ã³ãã³ããåå®çŸ©å¯èœã§ãïŒãããããã¯ã³ãã³ãèªäœãæžãæããã®ã§ã¯ãªãïŒã³ãã³ããšååã®é¢æ°ãå®çŸ©ããããšã«ãªããŸãïŒcafeã§ã¯ååã®é¢æ°ãšã³ãã³ãããã£ãå ŽåïŒé¢æ°ã®å®è¡ãåªå ãããããïŒçµæçã«ã³ãã³ããåå®çŸ©ããããã«èŠããããããšãã§ããŸãïŒ
####4.1.4 颿°ãšååã®ã³ãã³ããå®è¡ãã(æç€ºçã³ãã³ãå®è¡æå®)
颿°ã«ãã£ãŠã³ãã³ããåå®çŸ©ããããšã§ïŒå
ã®ã³ãã³ããå®è¡ããããªããšãããããŸãïŒ
ããšãã°...
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ãundoãã³ãã³ãã¯ã¹ã¿ãã¯ã®ç¶æ
ãäžã€åã«æ»ããŸããïŒãundoãå®è¡åŸã«æ¯åãstackããå®è¡ããŠå
容ã確èªããã®ã¯é¢åã§ãïŒãã®ãããªãšããundoãã³ãã³ããäžé£ã®ã³ãã³ãã§åå®çŸ©ããŠããã°äŸ¿å©ã«ãªãã§ãããïŒ
ãããæ®å¿µãªãã以äžã®ãããªé¢æ°å®çŸ©ã§ã¯ãundoãã®ååž°ã³ãŒã«ãäœã£ãŠããŸãïŒæãçµæã¯åŸãããŸããïŒ
: undo undo stack ;
ãã®åé¡ãåé¿ããããïŒé¢æ°ã§ã¯ãªãã³ãã³ããæå®ããããã®æ¹æ³ãçšæãããŠããŸãïŒã³ãã³ãåã®åã«ã@ããã€ãïŒããã«ç¶ããŠã¹ããŒã¹ã空ããã«ã³ãã³ãåãèšããŸãïŒ
: undo @undo stack ;
ããã«ããïŒundo颿°ã®å®è¡ã«ããïŒundoã³ãã³ããå®è¡-->stackãå®è¡ããããšãã§ããããã«ãªããŸãïŒ
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
####4.1.5 颿°ã®ååž°ã³ãŒã«
å説ã§ã¯é¢æ°ã®ååž°ã³ãŒã«ãšããèšèãåºãŠããŸããïŒ
cafeã§ã¯é¢æ°ã®ååž°ã³ãŒã«ãå¯èœã§ãïŒ
以äžã¯ååž°ã³ãŒã«ã®äŸã§ãïŒé¢æ°gcdã¯ã¹ã¿ãã¯ã«ãããã2ã€ã®å€ã®æå€§å
¬çŽæ°(GCD)ãæ±ããŸãïŒé¢æ°gcdã¯ãã®é¢æ°å
ã§ããã«gcdãïŒã€ãŸãèªåèªèº«ãåŒãã§ããŸãïŒãã®ããã«èªåèªèº«ãçŽæ¥ïŒãããã¯éæ¥çã«(ä»ã®é¢æ°ãçµç±ããŠ)åŒã¶ããšãã§ããŸãïŒ
: gcd 2 mdup pop ifelse t '% swap gcd' 'pop swap pop' ;
####4.1.6 颿°ã®äžã§ã®é¢æ°ã®å®çŸ©
颿°ã®äžã§é¢æ°ã®å®çŸ©ãããããšãå¯èœã§ãïŒ
äžã®äŸã§ã¯é¢æ°fooãå®è¡ããããšã«ããïŒbarãå®çŸ©ãããŸãïŒ
: foo : bar do_something ; ;
ãã®é¢æ°ã®äžã§ã®é¢æ°ã®å®çŸ©ã«ã¯æ³šæãå¿
èŠã§ãïŒäžèšã®äŸã§ã¯é¢æ°fooãå®è¡ããã床ã«é¢æ°barãåå®çŸ©ãããŸãïŒããè€æ°åfooãå®è¡ããããªãïŒãã®å®è¡ã®éœåºŠïŒé¢æ°ã®ãªãŒããŒã©ã€ããè¡ãããŸãïŒ
ããã«ããbarãïŒfooã®å®è¡ãããå
ã«ã©ããã§å¥ã®ååã®é¢æ°ãšããŠå®çŸ©ãããŠããå Žåã«ã¯ïŒå
ã«å®çŸ©ãããŠããå
容ãå£ãããšã«ãªã£ãŠããŸããŸãïŒãã®ãããªåé¡ãèµ·ãããªãããã«æ³šæãå¿
èŠã§ãïŒ
倿°ã®å Žåã«ã¯é¢æ°å ã ãã§æå¹ãª(ãã©ã€ããŒããª)倿°ãäœãããšãå¯èœãªã®ã§ïŒãã®ãããªãååãã«ã€ããŠããŸãç¥çµè³ªã«ãªãããšã¯ãããŸããïŒããã颿°ã¯åžžã«äœåŠããã§ãã¢ã¯ã»ã¹å¯èœãªãã®ãšããŠç»é²ãããããïŒæå³ããªãäžæžãã«æ³šæãå¿ èŠãšãªããŸãïŒ
####4.1.7 åœåº§é¢æ°
ãifãããtimesãã®ã³ãã³ããçšããå ŽåïŒããã«ç¶ãäžé£ã®ã³ãã³ãã¯ã·ã³ã°ã«ã¯ã©ãŒãã'ãã§ãŸãšããããšãã§ãããšèª¬æãããŸããïŒãããïŒããšãã°ããè€éãªé¢æ°ãæžããããªå Žåã«ã¯å°ãäžäŸ¿ã§ãïŒ
ã·ã³ã°ã«ã¯ã©ãŒãã¯æ¬¡ã®ã·ã³ã°ã«ã¯ã©ãŒããŸã§ãäžé£ã®ãŸãšãŸããšããŠæ±ããŸãïŒããããå
¥ãåãã«ããã«ã¯ã©ããããè¯ãã§ããããïŒ
ããšãã°ã..___.ãã®ãããªè¡šç€ºããã颿°ãå®çŸ©ããå Žåã«ã¯ïŒä»¥äžã®ãããªæžãæ¹ãã§ããŸãïŒ
:sample 3 times '3 times ¥'print _¥' print .'
'print _'ã3åå®è¡ãïŒããã«ãããš'print .'ãäžç·ã«3åå®è¡ããŸãïŒããã§'print _'ã®éšåã¯åçŽã«ã'ãã§ã¯ãªããÂ¥'ããšæžãããŠããŸãïŒããã¯æåã®ã3 timesãã®å®è¡ã®éã«äžæŠã·ã³ã°ã«ã¯ã©ãŒãã§å²ãŸããéšåãè©äŸ¡ãããŸãïŒã€ãŸã
ã'3 times Â¥'print _Â¥' print .'ããšããŠãã£ãéšåãã3 times 'print _' print .ããäžåå®è¡ãããããšã«ãªããŸãïŒ
ãã®ããã«å®è¡å¯Ÿè±¡ã®æå®ãã·ã³ã°ã«ã¯ã©ãŒãã ããçšãããšïŒãã®"èšè¿°ã®æ·±ã"ã«ãã£ãŠãÂ¥'ã㥥¥'ã㥥¥¥¥'ãã®ããã«ããã¯ã¹ã©ãã·ã¥ãå€ãã€ãïŒããã管çããªããã°ãªããªããªããŸãïŒãããåé¿ããããã«ãåœåº§é¢æ°ããçšæãããŠããŸãïŒ
åœåº§é¢æ°ã¯ãifãïŒãtimesããšçµã¿åãããŠäœ¿ãããŸãïŒ
åœåº§é¢æ°ã¯ãã®å Žã§å®çŸ©ããå®è¡ããã颿°ã§ãïŒé¢æ°å®çŸ©ã®ææ³ã§ã¯ãã®éå§ãšçµäºã«ããããéã£ãæåã䜿ãããã«ã·ã³ã°ã«ã¯ã©ãŒããçšãå Žåã®ãããªåé¡ã¯ãããŸããïŒ
åœåº§é¢æ°ã¯ã@ããååãšãã颿°ã§ïŒãifãããtimesããšçµã¿åãããŠäœ¿ãããæã«ã®ã¿æå¹ãªæ©èœã§ãïŒcafeã®å éšã§ã¯ã@ããšããåã®é¢æ°ãå®çŸ©ããããšïŒãã®å 容ãç¹å¥ãªåœåº§é¢æ°çšã®ãšãªã¢ã«ïŒå®éã«ã¯ç©ºæååãååãšãã颿°ãšããŠäžæŠç»é²ãïŒifãtimeã ããåŒã³åºãå¯èœãªç¹å¥ãªæ¹æ³ã«ãã£ãŠå®è¡ãããããã«ãªã£ãŠããŸãïŒ
åã³åœåº§é¢æ°ãå®çŸ©ãããéã«ã¯å ã«å®çŸ©ãããŠããå 容ãäžæžãããŸãïŒ
åœåº§é¢æ°ããã¹ãããããšãã§ããŸãïŒåœåº§é¢æ°ã¯å®çŸ©ãããåŸïŒããã«äœ¿çšãããŸãïŒå éšçã«ã¯ïŒåœåº§é¢æ°ã®å®è¡ã¯å®çŸ©ããã颿°ã®ããã£ã®ã³ããŒãäœã£ãŠïŒãã®æååã«å¯ŸããŠå®è¡ãããããïŒåœåº§é¢æ°ã®å®è¡éäžã§é¢æ°ãäžæžããããŠã圱é¿ã¯ãããŸããïŒ
ãifãïŒãtimesããšé¢ä¿ãªãåœåº§é¢æ°ãå®çŸ©ããããšã¯ã§ããŸããïŒäžèšã®ããã«ãã®é¢æ°ã¯ååã®ç¡ã颿°ã§ããããïŒåŸããåŒã³åºãææ®µããããŸããïŒãã®ããåœåº§é¢æ°ãåç¬ãŠå®çŸ©ãããå Žåã«ã¯ïŒå éšçãªé¢æ°å®çŸ©ã«ãŒãã³ãåŒã°ãç»é²ã ãã¯è¡ãããŸããïŒå®è¡ãããã«çµãã£ãŠããŸããŸãïŒ
####4.1.8 ãã®ä»...颿°ã«ã€ããŠ
#####4.1.8.1 颿°ã®å®è¡å¶åŸ¡
ãreturnãã³ãã³ãã¯é¢æ°ã®å®è¡ãããã§åæ¢ãïŒé¢æ°ã®åŒã³åºãå
ãžå¶åŸ¡ãæ»ããŸãïŒ
次ã®é¢æ°ã¯ã¹ã¿ãã¯ã®æ°å€ã0ã§ããã°é¢æ°ãçµäºããäŸã§ãïŒ
: test_return if z return print AAA ;
#####4.1.8.2 颿°ã®ããã£ãåŸã
颿°ã®ããã£ãã¹ã¿ãã¯ã«æååãšããŠåŸãäºãåºæ¥ãŸãïŒé¢æ°åã®åã«ã@@ããã€ããããšã§ã¹ã¿ãã¯ã«ãã®é¢æ°ã®ããã£ãå
¥ããŸãïŒ
ãããã¯ãfbodyãã³ãã³ãã§@@ãšåæ§ã®çµæãåŸãããšãã§ããŸãïŒ
###4.2 倿°
è€éãªèšç®ãè¡ãããã«ïŒã¹ã¿ãã¯ãšã¯å¥ã«ããŒã¿ã®ä¿åãè¡ãããšã®ã§ããã倿°ããçšæãããŠããŸãïŒ
cafeã§äœ¿ããã倿°ã¯å€§ããåããŠ2çš®é¡ãããŸãïŒäžã€ã¯ãéåžžå€æ°ãã§ïŒå®è¡ãã颿°ã®äžã§ã®ã¿æå¹ãªå€æ°ã§ãïŒããäžã€ã¯ãã°ããŒãã«å€æ°ãã§ïŒããã¯é¢æ°ããŸããã§äœ¿ãããšã®ã§ãã倿°ã§ãïŒ
倿°ã«ãåãã¯ãããŸããïŒã¹ã¿ãã¯ã«ããã·ã¥ã§ããããŒã¿ã¯ãã¹ãŠå€æ°ã«ä¿åããããšãå¯èœã§ãïŒ
####4.2.1 éåžžå€æ°
#####4.2.1.1 éåžžå€æ°ã®äœ¿ãããïŒ
ãéåžžå€æ°ãã¯äžæçãªããŒã¿ã®ä¿ç®¡å ŽæãšããŠäœ¿ãããšãã§ããŸãïŒ
éåžžå€æ°ã䜿çšããéã«ã¯ïŒäœ¿çšåã®å®£èšã¯å¿
èŠãããŸããïŒå¿
èŠãªç®æã§ä»£å
¥ãè¡ããšïŒãã®å€æ°ãèªåçã«äœãããŸãïŒ
ãã®éåžžå€æ°ãžã®ã¢ã¯ã»ã¹ã«ã¯æŒç®åã>ããšã<ãã䜿ããŸãïŒ(ãããã®æŒç®åãåŸçœ®åã®ã³ãã³ãã§ãïŒ)
ãã®ã>ããšã<ãã®æŒç®åã¯ãã®å³åŽã«çœ®ãããååã®å€æ°ã«å¯ŸããŠæäœãè¡ããŸãïŒ
倿°ãžã®ä»£å ¥ã¯ã>ãã䜿ããŸãïŒã¹ã¿ãã¯ãããããããããã®ã倿°ãžæ ŒçŽãããŸãïŒå察ã«å€æ°ããã®èªã¿åºãã«ã¯ã<ãã䜿ãããŸãïŒå€æ°ã®å 容ãåãåºããïŒã¹ã¿ãã¯ã«ããã·ã¥ãããŸãïŒ
倿°ã«ã¯èªç±ã«ååãã€ããããšãã§ããŸãïŒãã®ååã«äœ¿çšã§ããæåïŒæåæ°ã«ã¯ç¹ã«å¶éã¯ãããŸããïŒ
äžã®äŸã§ã¯ã¹ã¿ãã¯ã«çœ®ãããããŒã¿ããvariable_nameãã«ä¿åãïŒãã®åŸãããèªã¿åºããŠããŸãïŒå€æ°ã«çœ®ãããããŒã¿ã¯èªã¿åºããè¡ã£ãŠãæ¶ããªãããïŒè€æ°åã®èªã¿åºããè¡ãã°ïŒãã®åæ°ã ãã®ããŒã¿ãã¹ã¿ãã¯ã«ããã·ã¥ãããããšã«ãªããŸãïŒ
CaFE (empty) % "test string"
CaFE ("test string") % > variable_name
CaFE (empty) % < variable_name
CaFE ("test string") % < variable_name
CaFE ("test string") % stack
sp[ 0] (s) "test string"
sp[ 1] (s) "test string"
CaFE ("test string") %
ã¡ã¢ :
ãã®èšå·ãç¢å°ãšã¿ãªããŠïŒå·ŠåŽã«ã¹ã¿ãã¯ïŒå³åŽã«å€æ°ããããã®ãšèãããšããçŽæçã§ãïŒæ°å€ã®ä»£å
¥ã1è¡ã§æžããšã100 > varãã®ããã«ãªããŸãïŒ
####4.2.1.2 éåžžå€æ°ã®ã¹ã³ãŒã
ã倿°ã®ã¹ã³ãŒãããšã¯ã倿°ãæå¹ãªç¯å²ãã®ããšãèšããŸãïŒéåžžå€æ°ã¯ãããŸå®è¡ããŠãã颿°å ãã®ã¿ã§æå¹ã§ãïŒ
ããšãã°ãã颿°ããããäžã€ã®é¢æ°ãåŒã¶ãšïŒãã®åŒã°ããåŽã®é¢æ°ããïŒåŒã³å
ã®é¢æ°ã§äœ¿ã£ãŠãã倿°ã«ã¢ã¯ã»ã¹ããããšã¯ã§ããŸããïŒ
ããšãã°çŸåšå®è¡äžã®é¢æ°ã®äžã§ãvarããšããåã®å€æ°ã䜿ã£ãŠããŠïŒãã®é¢æ°ããããã«é¢æ°ãåŒã¶ãšããŸãïŒåŒã°ããåŽã®é¢æ°ã®äžã§ãå
ã»ã©ãšåããvarããšããåã®å€æ°ããã£ããšããŠãïŒããã«ã¯å®è¡äžã®(åŒã°ããåŽã®)颿°ã®äžã§ç¬èªã«å€æ°ãçšæãããããïŒé¢æ°ã®åŒã³å
åŽã®å€æ°ã«ã¯åœ±é¿ãåãŒããŸããïŒ
äžæŠçµäºãã颿°ãåã³åŒã°ããæã«å€æ°ã¯ã©ããªãã®ã§ããããïŒ
颿°å
ã§ã®ã¿æå¹ãªéåžžå€æ°ã¯é¢æ°å®è¡ãçµäºãã床ã«å»æ£ãããŠããŸããŸãïŒåã³é¢æ°ãåŒã°ãïŒéåžžå€æ°ã®ã¢ã¯ã»ã¹ããããšïŒãã®æã«ãŸãæ°ãã«äœãããããšã«ãªããŸãïŒ
ãã®ããéåžžå€æ°ã§ã¯ïŒãã®é¢æ°ã®åã®ç¶æ
ãèšé²ããŠããããšã¯ã§ããŸããïŒ
ãŸã ä»£å ¥ã®è¡ãããŠããªã倿°ããèªã¿åºããè¡ããšãšã©ãŒã«ãªããŸãïŒ
CaFE (empty) % 1111 > var
CaFE (empty) % : foo 2222 > var < var . ;
CaFE (empty) % foo
2222
CaFE ( 1111) % < var .
1111
ã¡ã¢ : 颿°ãæ°ãã«å®è¡ããããšïŒãã®é¢æ°ç¬èªã®å€æ°ããŒãã«ãçšæãããŸãïŒå®è¡äžã®é¢æ°ã¯ãã®ããŒãã«ã®ç¯å²ãè¶ ããŠéåžžå€æ°ã«ã¢ã¯ã»ã¹ããããšã¯ã§ããŸããïŒ
ã¡ã¢ : 颿°ãååž°çã«å®è¡ããå ŽåïŒéåžžå€æ°ã®ããŒãã«ã¯é¢æ°ãåŒã°ãã床ã«(å®è¡ãããéœåºŠ)æ°ãã«çšæãããããïŒååã®éåžžå€æ°ã§ãã£ãŠãéãå¥ã ã®å€æ°ãšããŠæ±ãããŸãïŒ
ã¡ã¢ : éåžžå€æ°ã¯Cèšèªã®èªå倿°ãauto倿°ããšåçã®æ©èœãæã€ãšèããŠå·®ãæ¯ããããŸããïŒ
CaFE (empty) % : foo 3333 > var < var . ;
CaFE (empty) % foo
3333
CaFE ( 3333) % cl
CaFE (empty) % fedit foo
CaFE (empty) % :foo < var . ;
finction overwriting
CaFE (empty) % foo
error : no variable available for "var"
CaFE (error) %
CaFE (empty) %
####4.2.2 ã°ããŒãã«(åºå)倿°
#####4.2.2.1 ã°ããŒãã«å€æ°ã®äœ¿ãããïŒ
éåžžå€æ°ãšã¯éãïŒé¢æ°ã®ã¯ã¯ãè¶ ããŠäœ¿ãããšã®ã§ãã倿°ãã°ããŒãã«å€æ°ã§ãïŒã°ããŒãã«å€æ°ã®åºæ¬çãªæäœã®æ¹æ³ã¯éåžžå€æ°ãšåãã§ããïŒäœ¿çšããåã«å¿ ã宣èšãå¿ èŠã«ãªããŸãïŒ
倿°ã®å®£èšã«ã¯ãvariableãã䜿ããŸãïŒã¹ã¿ãã¯ããäºã€ã®åŒæ°ããšãïŒãŸãã¹ã³ãŒãæå®ã®ãããã±ãŒãžåãïŒæ¬¡ã«å€æ°åæå®ã®æååãåããŸãïŒéè€ãã倿°åãåäžã¹ã³ãŒãã§æå®ãããå Žåã«ã¯ãšã©ãŒãšãªãïŒå®è¡äžã®åŠçã忢ããŸãïŒ
宣èšã®äŸã瀺ããŸãïŒãã®äŸã§ã¯ãa_varããšèšã倿°ããscopeããšããåã®ããã±ãŒãžåã§æå¹ãªå€æ°ãšããŠå®£èšããŠããŸãïŒ
"a_var" "scope" variable
ã¹ã³ãŒãã«ç©ºæååã""ããæå®ããå Žåã«ã¯ïŒã¹ã³ãŒãæå®ãªãã®ã°ããŒãã«å€æ°ãšãªãïŒã©ãããã§ãã¢ã¯ã»ã¹å¯èœãªå€æ°ãšãªããŸãïŒ
####4.2.3 倿°ã®ã¢ã¯ã»ã¹å¶åŸ¡
倿°ã®ååã®è¡çªãé¿ããããã«ïŒå€æ°ãžã®ã¢ã¯ã»ã¹ã®å¶åŸ¡ãè¡ãããšãã§ããŸãïŒ
#####4.2.3.1 éåžžå€æ°ã®ã¢ã¯ã»ã¹ç¯å²å€æŽ
éåžžå€æ°ã¯å®è¡äžã®ãã®é¢æ°å
ã§ã®ã¿æå¹ãªã®ã§ããïŒãŸãã«ãã®é¢æ°ã®åŒã³åºãå
ã§äœ¿ãããŠãã倿°ã«ã¢ã¯ã»ã¹ãããäºããããŸãïŒ
ãããè¡ãããã®ã³ãã³ããçšæãããŠããŸãïŒ
ã[]ãã§å²ãŸããç¯å²å
ã§ã¯é¢æ°ã®åŒã³åºãå
ã®å€æ°ã¢ã¯ã»ã¹ãå¯èœã«ãªããŸãïŒ
äžã®ã®ãããªé¢æ°ãå®è¡ããããšïŒæ°å€222ããã®é¢æ°ã®éåžžå€æ°varã«æžã蟌ãŸããŸãïŒãã®åŸã[ãã«ãã£ãŠåŒã³åºãå
颿°ã®æã€éåžžå€æ°ãžã®ã¢ã¯ã»ã¹ãèš±å¯ããïŒåŒã³åºãå
ã®varãèªã¿åºãã衚瀺ãããŸãïŒãã®åŸã]ãã«ãã£ãŠéåžžã®å€æ°ã¢ã¯ã»ã¹ç¶æ
ã«æ»ããåã®é¢æ°ã®æã€varãèªã¿åºãããã®å
容ã衚瀺ãããŸãïŒ
: callee 222 >var [ <var . ] <var . ;
ã[ãã¯ãã¹ããå¯èœã§ïŒé¢æ°ã®åŒã³åºãå
ã®åŒã³åºãå
ãåç
§ãããããªäœ¿ãæ¹ãã§ããŸãïŒ
ãã®ã«ãã³ã¯å¿
ã察ã«ãªã£ãŠãªããã°ãªããŸããïŒã«ãã³ãéããã«é¢æ°ãçµãããšïŒãã®åŸã®æåã¯äžå®ãšãªã£ãŠããŸããŸãïŒ
颿°ã®å®è¡ã§ã¯ãªãïŒå¯Ÿè©±çã«äœ¿çšããŠããå Žåã§ã宣èšç¡ãã®å€æ°ã䜿ããšïŒãã®å€æ°ã¯éåžžå€æ°ãšãªããŸãïŒ
#####4.2.3.2 ã°ããŒãã«å€æ°ã®ã¹ã³ãŒãæå®
ã°ããŒãã«å€æ°ã¯æå®ããããã±ãŒãžå
ã§ããã°ïŒã©ãããã§ãã¢ã¯ã»ã¹å¯èœã§ãïŒããã±ãŒãžåã空æåã""ããšããŠããããšïŒããã±ãŒãžã«ããå¶éãåããªãïŒã©ãããã§ãã¢ã¯ã»ã¹å¯èœãªå€æ°ãšãªããŸãïŒ
ããã±ãŒãžåã§ã¹ã³ãŒããæå®ãããã°ããŒãã«å€æ°ã¯ïŒãã®ããã±ãŒãžã«å±ãã颿°ããã®ã¿ã¢ã¯ã»ã¹ãå¯èœã«ãªããŸãïŒ
ããã±ãŒãžã«ã€ããŠã¯æ¬¡ã®ç¯ã§è§£èª¬ããŸãïŒ
###4.3 ããã±ãŒãž
####4.3.1 ããã±ãŒãžã®æå®
ç¹å®ã®é¢æ°ããã®ã¿ã¢ã¯ã»ã¹å¯èœãªå€æ°ãå®è£
ããããïŒãããã±ãŒãžãããšããæŠå¿µã䜿ããŸãïŒ
ããšãã°ã²ãšã€ã®ãã¡ã€ã«ã«ããã°ã©ã ãèšè¿°ãããšããããã°ã©ã ã¯è€æ°ã®é¢æ°ããæ§æãããããã«äœããïŒå
±éã®å€æ°ãæããããããšããäºæ
ãçºçããŸãïŒ
ãã®ãšãcafeå
šäœããã¢ã¯ã»ã¹ã§ããã°ããŒãã«å€æ°ã䜿ãã®ãæ¹æ³ã§ããïŒåæã«äœ¿ããã¡ã€ã«ãïŒæ¢ã«ååã®ã°ããŒãã«å€æ°ãæã£ãŠãããšãã«ã¯åé¡(倿°åã®è¡çª)ãçºçããŸãïŒ
cafeã§ã¯åäžã®ã°ããŒãã«å€æ°ãåå®çŸ©ããããšãã«ã¯ïŒwarningã¡ãã»ãŒãžãåºãã®ã¿ã§ïŒãã®åŸã®ã¢ã¯ã»ã¹ã«ã€ããŠã¯åé¡ãšããŸããïŒãã®ãããŠãŒã¶ã¯ãã®ãããªã¡ãã»ãŒãžãçºèŠãããïŒååãéè€ããªãããã«å€æŽãå ããªããã°ãªããŸããïŒãããæ°ã«ãã䜿çšãããšïŒæå³ããªã倿°ã®å€ã®æŽæ°ãçºçããŠããŸããŸãïŒ
ãã®ãããªåé¡ã®åé¿ææ®µãšããŠïŒãããã±ãŒãžããçšæãããŠããŸãïŒ
ãuseãã³ãã³ãã§ãã¡ã€ã«ã®èªã¿èŸŒã¿ãéå§ããããšïŒãã®ãã¡ã€ã«åãããã±ãŒãžåãšããŠèªã¿èŸŒã¿åŠçãè¡ãããŸãïŒ
ãã®ãã¡ã€ã«ã®äžã§é¢æ°ãå®çŸ©ãããŠãããšïŒãã®é¢æ°ã¯ãã®ããã±ãŒãžåãã¹ã³ãŒããæã€å€æ°ãžã®ã¢ã¯ã»ã¹ãå¯èœãªãã®ãšããŠå®çŸ©ãããŸãïŒ
ããè€æ°ã®ãã¡ã€ã«ã§ã²ãšã€ã®ããã±ãŒãžãæ§æããããªãïŒãpackageãã³ãã³ãã䜿ã£ãŠå
±éã®ååãæå®ããŠããäºãã§ããŸãïŒ
ãpackageãã³ãã³ãã§æå®ããããã±ãŒãžåã¯ïŒãã®ãã¡ã€ã«ã®èªã¿èŸŒã¿ãçµäºãããïŒãããã¯æ¬¡ã®ãpackageãã³ãã³ãã䜿ããããŸã§æå¹ã§ïŒãã®ãã¡ã€ã«åã®ä»£ããã«æå®ãããæååãããã±ãŒãžåãšããŠäœ¿çšããŸãïŒ
ãã¡ã€ã«ã®èªã¿èŸŒã¿ãçµäºãããšcafeã¯ç©ºæåããã±ãŒãžåãæå®ãããç¶æ
ã«æ»ããŸãïŒ
ãpackageãã³ãã³ãã¯cafeã察話çã«äœ¿çšããŠãããšãã«ãæå¹ã§ãïŒãã®æ©èœã䜿ã£ãŠïŒã¢ã¯ã»ã¹å¶åŸ¡ãããã倿°ãžã®èªã¿æžããã§ããŸãïŒå¯Ÿè©±çã«äœ¿çšããŠããéã¯ãã¡ã€ã«ã®èªã¿èŸŒã¿ã®çµäºããªãããïŒå
ã®ç¶æ
ã«æ»ãã«ã¯ç©ºæåãããã±ãŒãžåã«æå®ããªããã°ãªããŸããïŒ
ã颿°ã®ç®¡çã®ãããããã®ç¯ã§è¿°ã¹ãéãïŒé¢æ°ã«ã¯å€æ°ã®ãããªã¢ã¯ã»ã¹å¶åŸ¡æ©èœã¯çšæãããŠããŸããïŒãã®ãã颿°ã¯äœåŠããã§ãã¢ã¯ã»ã¹å¯èœã§ãïŒããã±ãŒãžå
ã§ã®ãã©ã€ããŒãåãã§ããªãããïŒååã®éè€(è¡çª)ã«ã¯æ³šæãå¿
èŠã§ãïŒ
倿°ïŒé¢æ°ã«äžåºŠã«è€æ°ã®ããã±ãŒãžãèšå®ããããšã¯ã§ããŸããïŒ
####4.3.2 倿°æ€çŽ¢é åº
倿°ã«åäžã®ååã䜿ãããŠããå ŽåïŒcafeã¯å€æ°ãéåžžå€æ°ïŒã¢ã¯ã»ã¹å¶åŸ¡ããã°ããŒãã«å€æ°ïŒã¢ã¯ã»ã¹å¶åŸ¡ãªãã°ããŒãã«å€æ°ã®é ã§æ€çŽ¢ãæåã«èŠã€ãã£ã倿°ã«ã¢ã¯ã»ã¹ããŸãïŒãã®ã¢ã¯ã»ã¹é ãå€ããããšã¯ã§ããŸããïŒ
###4.4 倿°è¡šç€º
çŸåšäœ¿ãããŠãã倿°ãšãã®å€ã衚瀺ãããããšãã§ããŸãïŒ
ãvlãã³ãã³ãã¯éåžžå€æ°ïŒã¢ã¯ã»ã¹å¶åŸ¡ããã°ããŒãã«å€æ°ïŒã¢ã¯ã»ã¹å¶åŸ¡ãªãã°ããŒãã«å€æ°ã®ããããããªã¹ã衚瀺ããŸãïŒ
ãvlãã¹ã¿ãã¯ããäžã€ã®æååãåãåºãïŒãã®æååãã¹ã³ãŒããšããŠæå®ãããŠããã°ããŒãã«å€æ°ã衚瀺ããŸãïŒãã®æååã空æåå("")ã§ããã°ã¢ã¯ã»ã¹å¶åŸ¡ãªãã®ã°ããŒãã«å€æ°ã衚瀺ããŸãïŒããã¹ã¿ãã¯ã空ã§ããã°å®è¡äžã®é¢æ°å
ã§æå¹ãªéåžžå€æ°ã衚瀺ããŸãïŒ
éåžžå€æ°ã衚瀺ãããããã«ãã®éœåºŠã¹ã¿ãã¯ã空ã«ããã®ã¯äžäŸ¿ãªã®ã§ïŒãvlsããšããã³ãã³ããçšæãããŠããŸãïŒãã®ã³ãã³ãã¯ã¹ã¿ãã¯ã®ç¶æ ã«é¢ä¿ãªãåç¬ã§åäœããŸãïŒ
###4.5 倿°åã®è£å®ïŒåè£è¡šç€ºæ©èœ
倿°åã®è£å®ïŒåè£è¡šç€ºãè¡ããŸãïŒå€æ°æäœã®ã³ãã³ãã>ãã<ãã«ã¹ããŒã¹ã空ããã«ç¶ããŠååãå ¥åãïŒéäžã§ã¿ãããŒãæŒããšå€æ°åã®åè£ãçŸããŸãïŒãã®å€æ°åã®åè£ãªã¹ãã¯cafeã®èµ·ååŸã«äœ¿ããããã¹ãŠã®å€æ°åãåè£ãªã¹ããšããŠæã£ãŠããŸãïŒ
##5. æååã®æäœïŒè¡šç€ºã®å€æŽ
###5.1 æååã®æäœã®ããã®ã³ãã³ããçšæãããŠããŸãïŒ
####5.1.1 æååè§£
æååãæ±ãããã®ããã€ãã®ã³ãã³ããçšæãããŠããŸãïŒæååãåäžæåãããªãè€æ°ã®æååã«åè§£ãããs2cãïŒãs2cnããçšæãããŠããŸãïŒãs2cãã¯ãstring to charactersãã®ç¥ãšããŠãã®ãããªååãã€ããŠããŸãïŒä»¥äžã«ã«å®è¡äŸã瀺ããŸãïŒ"string"ãšããæååãæåã«åè§£ãããŠã¹ã¿ãã¯ã«ç©ãŸããŠããŸãïŒ
CaFE (empty) % "string"
CaFE ("string") % s2c
CaFE ("g") % stack
sp[ 0] (s) "s"
sp[ 1] (s) "t"
sp[ 2] (s) "r"
sp[ 3] (s) "i"
sp[ 4] (s) "n"
sp[ 5] (s) "g"
CaFE ("g") %
åè§£ãè¡ãæåãæ°å€ã«ãã£ãŠæå®ããããšãã§ããŸãïŒããã¯ãs2cnãã³ãã³ãã䜿ããŸãïŒãã®ã³ãã³ãã¯ã¹ã¿ãã¯ãããããããæŽæ°å€ã«ãã£ãŠåè§£ããæååéšåãæå®ã§ããããã«ãªã£ãŠããŸãïŒäžã®äŸã§ã¯æåã®5æåãåè§£ïŒæ¬¡ã«æåŸã®3æåãåè§£ããäŸã瀺ããŠããŸãïŒ
CaFE (empty) % "abcdefghijklmn"
CaFE ("abcdefghijklmn") % 5 s2cn
CaFE ("fghijklmn") % stack
sp[ 0] (s) "a"
sp[ 1] (s) "b"
sp[ 2] (s) "c"
sp[ 3] (s) "d"
sp[ 4] (s) "e"
sp[ 5] (s) "fghijklmn"
CaFE ("fghijklmn") % cl
CaFE (empty) % "abcdefghijklmn"
CaFE ("abcdefghijklmn") % -3 s2cn
CaFE ("n") % stack
sp[ 0] (s) "abcdefghijk"
sp[ 1] (s) "l"
sp[ 2] (s) "m"
sp[ 3] (s) "n"
####5.1.2 ããŒã¯ã³åè§£
æååè§£ã ãã§ã¯ããããäžäŸ¿ãªã®ã§æååãããŒã¯ã³ã«åè§£ããã³ãã³ããçšæãããŠããŸãïŒ
ããŒã¯ã³åè§£ã¯ïŒcafeãæã£ãŠããããŒã¯ã³è§£æçšã®ã«ãŒãã³ããã®ãŸãŸäœ¿ãã®ã§ïŒäžæŠäœæãã颿°ãã©ã®ããã«è©äŸ¡ãããã®ãã確èªããç®çã«ã䜿ããŸãïŒ
ãs2wãã䜿çšããäŸã瀺ããŸãïŒ
CaFE (empty) % ":gcd 2 mdup pop:ifelse t '% swap gcd' 'pop swap pop' ;"
CaFE (":gcd 2 mdup pop:...") % s2w
CaFE (";") % stack
sp[ 0] (s) ":"
sp[ 1] (s) "gcd"
sp[ 2] (s) "2"
sp[ 3] (s) "mdup"
sp[ 4] (s) "pop"
sp[ 5] (s) ":"
sp[ 6] (s) "ifelse"
sp[ 7] (s) "t"
sp[ 8] (s) "% swap gcd"
sp[ 9] (s) "pop swap pop"
sp[ 10] (s) ";"
CaFE (";") %
ãs2wnãã³ãã³ãã¯s2cnåæ§ã«éšåãæå®ããŠåè§£ããããšãã§ããŸãïŒ
CaFE (empty) % ":gcd 2 mdup pop:ifelse t '% swap gcd' 'pop swap pop' ;"
CaFE (":gcd 2 mdup pop:...") % 4 s2wn
CaFE (":ifelse t '% swa...") % stack
sp[ 0] (s) ":"
sp[ 1] (s) "gcd"
sp[ 2] (s) "2"
sp[ 3] (s) "mdup"
sp[ 4] (s) ":ifelse t '% swap gcd' 'pop swap pop' ;"
CaFE (":ifelse t '% swa...") % cl
CaFE (empty) % ":gcd 2 mdup pop:ifelse t '% swap gcd' 'pop swap pop' ;"
CaFE (":gcd 2 mdup pop:...") % -5 s2wn
CaFE (";") % stack
sp[ 0] (s) ":gcd 2 mdup pop:"
sp[ 1] (s) "ifelse"
sp[ 2] (s) "t"
sp[ 3] (s) "% swap gcd"
sp[ 4] (s) "pop swap pop"
sp[ 5] (s) ";"
CaFE (";") %
####5.1.3 æååã®é·ã
æååã«å«ãŸããæåæ°ãïŒããŒã¯ã³ã®æ°ãåŸãã³ãã³ããçšæãããŠããŸãïŒãããããstrlenãïŒãstrwcãã察å¿ããŸãïŒ
####5.1.4 ãã®ä»
æååãéã«äžŠã³æ¿ããã³ãã³ãããstrrevãçšæãããŠããŸãïŒ
ãŸãæåãASCIIã³ãŒãã«åŸã£ãæ°å€ã«å€æãããc2iããšãã®éã®å€æããããi2cããçšæãããŠããŸãïŒ
次ã®äŸã¯æååãASCIIã³ãŒãåã«å€æãã颿°ãšïŒãã®äœ¿çšäŸã§ãïŒ
CaFE (empty) % :ascii :gs " " swap glue glue; strlen >length s2c <length times 'c2i rot' <length 1 - times gs;
CaFE (empty) % "abcdefg" ascii
CaFE ("97 98 99 100 101...") % stack
sp[ 0] (s) "97 98 99 100 101 102 103"
CaFE ("97 98 99 100 101...") %
次ã®äŸã¯ïŒäžã®é¢æ°ã倿ããASCIIã³ãŒãåãæååã«æ»ã颿°ã®äŸã§ãïŒ
CaFE (empty) % :ascii_rev strwc >length s2w <length times 'eval i2c rot' <length 1 - times glue;
CaFE ("97 98 99 100 101...") % ascii_rev
CaFE ("abcdefg") %
###5.2 衚瀺ã®å€æŽ
å ã«ããã³ãã衚瀺ã®å€æŽã«ã€ããŠã®èª¬æãè¡ããŸãããããã§ã¯æŽæ°ãæµ®åå°æ°ç¹è¡šç€ºã®å€æŽæ¹æ³ã解説ããŸãïŒ
æŽæ°ïŒæµ®åå°æ°ç¹ã®ãããããç»é¢ã«è¡šç€ºããããããã¡ã€ã«ã«æžãåºãããéã®è¡šç€ºåœ¢åŒã倿Žããããšãã§ããŸãïŒãformat_intãïŒãformat_floatãã®ããããã®ã³ãã³ããããã«ããããŸãïŒ
ãformat_intãã³ãã³ãã¯æŽæ°ã衚瀺ããéã®è¡šç€ºåœ¢åŒïŒãformat_floatãã¯æµ®åå°æ°ç¹ã®è¡šç€ºåœ¢åŒã決å®ããŸãïŒãããã®ã³ãã³ãã¯ã¹ã¿ãã¯ããæååãäžã€ããããïŒããã衚瀺ã®éã®ãã©ãŒããããããŠäœ¿çšããŸãïŒãã®ãã©ãŒãããæååã¯cafeã®å éšã§printf颿°ã«ãã®ãŸãŸæž¡ãããããïŒprintf倿ã®ããã«å£ã£ãèšè¿°ã§ããå¿ èŠããããŸãïŒ
äžã«äœ¿çšäŸã瀺ããŸãïŒ
CaFE (empty) % 0xabcd
CaFE (43981) % "0x%X" format_int
CaFE (0xABCD) % "%Xh" format_int
CaFE (ABCDh) % stack
sp[ 0] (i) ABCDh
CaFE (ABCDh) % 10 3 /
CaFE (3.33333) % "%.10lf" format_float
CaFE (3.3333333333) % stack
sp[ 0] (i) ABCDh
sp[ 1] (f) 3.3333333333
CaFE (3.3333333333) %
ã©ã¡ãã®ã³ãã³ãã®å ŽåãïŒãã©ãŒããããšããŠç©ºæååãæå®ããããšã§ããã©ã«ãã®ç¶æ ã«æ»ãããšãã§ããŸãïŒ
CaFE (3.3333333333) % "" format_float
CaFE (3.33333) %
##6. ãŠãŒã¶ã»ã¹ã¿ãã¯
###6.1 ãŠãŒã¶ã»ã¹ã¿ãã¯
æ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šæ
ãã®æ©èœã远å ãããããundoã³ãã³ããæ«å®çã«ãµããŒãããŠãŸããïŒ20060602
æ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šææ³šæ
éåžžã®ã¹ã¿ãã¯(ããã©ã«ãã»ã¹ã¿ãã¯)ãšã¯å¥ã«ïŒã¹ã¿ãã¯ãå¥ã«çšæããããšãå¯èœã§ãïŒ
æ°ããã¹ã¿ãã¯ã宣èšãããšïŒçŸåšã®ã¹ã¿ãã¯ã®äžã«æ°ããã¹ã¿ãã¯ãäœãããŸãïŒãã®ããã«ããŠã¹ã¿ãã¯ã®äžã«åã¹ã¿ãã¯ïŒããã«å«ã¹ã¿ãã¯ãäœã£ãŠããããšãã§ããŸãïŒ
æ°ããã¹ã¿ãã¯ãäœããããšïŒãã®ã¹ã¿ãã¯ã«ã¯åºæã®IDçªå·ãå²ãæ¯ãããŸãïŒããã©ã«ãã¹ã¿ãã¯ã®IDã¯0ãšãªã£ãŠããïŒãŠãŒã¶ã«ãã£ãŠäœæãããã¹ã¿ãã¯ã¯1çªããé çªã«æ°åãã€ããããŠãããŸãïŒã¹ã¿ãã¯ã®IDçªå·ã¯ãŠãŒã¶ã®å©äŸ¿æ§ã®ããã«èšãããããã®ã§ããïŒå®éã®æäœã«ãã®çªå·ã䜿ãããšã¯ãããŸããïŒ
ã=newãã³ãã³ããæ°ããã¹ã¿ãã¯ãäœããŸãïŒãã®ã¹ã¿ãã¯ã¯ããã©ã«ãã¹ã¿ãã¯ãšå šãåãããã«äœ¿ãããšãã§ããŸãïŒ
ã¹ã¿ãã¯èªäœãæäœããã³ãã³ãã¯ïŒãã¹ãŠã=ãèšå·ã§å§ãŸããŸã(ããŒã¿ã®ç©ã¿éãªã£ããã¹ã¿ãã¯ããã€ã¡ãŒãžããŠããŸã)ïŒ
ã=newãã³ãã³ããå®è¡ããåŸã«çŸåšã®ã¹ã¿ãã¯ãèŠãŠã¿ããšïŒã=1=ãã®ããã«ã€ã³ãŒã«ã§æãŸããæ°åã衚瀺ãããŸãïŒãããæ°ããäœãããã¹ã¿ãã¯ã§ãïŒ
ã¡ã¢ :
ã¹ã¿ãã¯ã¯ïŒäžåºŠäœããããšåç
§å
ãååšããéããã®å
容ãä¿æãããŸãïŒã¹ã¿ãã¯èªäœãã©ããããåç
§ãããªããªã£ãæã«æ¶ãããŸãïŒããšãã°ãŠãŒã¶ã»ã¹ã¿ãã¯ããã®èŠªã®ã¹ã¿ãã¯ããæ¶ãããŠã倿°ã«ä¿åãããŠããã°ãã®å
容ãä¿æããŠããŸãïŒ
ã¡ã¢ :
ã¹ã¿ãã¯ã®IDã¯ïŒcafeã®èµ·ååŸã®æåã®äœæã§1ãå²ãæ¯ããïŒä»¥éäœæãããéœåºŠ2ïŒ3ïŒ4ïŒïŒïŒã®ããã«é çªã«çªå·ãã€ããããŠãããŸãïŒ
æ°ããäœæããã¹ã¿ãã¯äžã§èšç®ãè¡ãã«ã¯ã=targetãã³ãã³ããçšããŠïŒå¯Ÿè±¡(ã¿ãŒã²ãã)ãšããã¹ã¿ãã¯ãæå®ããŸãïŒ=targetã³ãã³ãã¯çŸåšã®ã¹ã¿ãã¯ã®æäžäœãæããŠããã¹ã¿ãã¯ãžïŒãã®å¯Ÿè±¡ãåãæ¿ããŸãïŒããŸãŸã§äœ¿ã£ãŠããããã³ãã衚瀺ã§ã¯ïŒã©ã®ã¹ã¿ãã¯ã察象ãšããŠããããããããªãã®ã§ïŒããã§åãæ¿ããŠãããŸãããïŒ
CaFE (empty) % "( =%s= [%p] %b%r%n ) %% " prompt
( =0= [] empty ) %
###6.2 ã¹ã¿ãã¯ã®åãæ¿ã
äžèšã®ããã³ãã衚瀺ã®ç¶æ ã§ïŒå ã«èª¬æããã¹ã¿ãã¯ã®äœæïŒåãæ¿ãã説æããŸãïŒ
( =0= [] empty ) % 1 2 3
( =0= [2] 3 ) % =new
( =0= [3] =1= ) % stack
sp[ 0] (i) 1
sp[ 1] (i) 2
sp[ 2] (i) 3
sp[ 3] (=) =1=
( =0= [3] =1= ) % =target
( =1= [] empty ) % stack
( =1= [] empty ) %
ãã®äŸã§ã¯ïŒæ°ããäœãããã¹ã¿ãã¯ãçŸåšã®ã¹ã¿ãã¯äžã«ã©ã®ããã«çœ®ããããã説æããããïŒä»®ã«ã1ãã2ãã3ãã®ããŒã¿ã眮ããŠã¿ãŠããŸãïŒãã®ããšã®=newã«ãã£ãŠäœãããã¹ã¿ãã¯ã«ã¯IDçªå·1ãäžãããïŒå
ã»ã©ã®ã¹ã¿ãã¯ã®ããŒã¿ã®åŸã«ããã·ã¥ãããŠããŸãïŒãã®ç¶æ
ã§=targetã³ãã³ããçºè¡ãããšïŒèšç®å¯Ÿè±¡ã¹ã¿ãã¯ãããã©ã«ãã»ã¹ã¿ãã¯ããID1ã®ã¹ã¿ãã¯ã«åãæ¿ãããŸãïŒ
ããã¯ããã³ãã衚瀺ãèšå®ããŠãããšïŒããã§ç¢ºèªã§ããŸãïŒæ°ããäœãããã¹ã¿ãã¯ã¯åžžã«ç©ºã§ãïŒããã§ãID1ã®ã¹ã¿ãã¯ã空ãªã®ãããããŸãïŒ
泚æ :
ã¹ã¿ãã¯äžã«çœ®ããããŠãŒã¶ã¹ã¿ãã¯ã¯ïŒãã®å®äœã眮ãããŠããããã§ã¯ãªããåç
§å
ããæå®ãããŠããã ãã§ãïŒ
ã¡ã¢ :
ã¿ãŒã²ããã»ã¹ã¿ãã¯ãšãªãããã®ã¯åžžã«äžã€ã ãã§ãïŒãããŸã§ã«èª¬æããã¹ã¿ãã¯æäœã®ã³ãã³ã以å€ã¯ïŒãã¹ãŠãã®ã¿ãŒã²ãããšããŠããã¹ã¿ãã¯ã«å¯ŸããŠã®ã¿æå¹ã§ãïŒããšãã°ãclãã¯ã¹ã¿ãã¯ãã¯ãªã¢ããç®çã§çšæãããã³ãã³ããšèª¬æããŸãããïŒãã®ã³ãã³ãããã®æç¹ã§ã¿ãŒã²ãããšããŠããã¹ã¿ãã¯ã«å¯ŸããŠã®ã¿æå¹ã§ãïŒåãå«ã¹ã¿ãã¯ãã¿ãŒã²ãããšããŠããå Žåã«ã¯ãã®ã¹ã¿ãã¯ã®äžèº«ã ããã¯ãªã¢ãããŸãïŒ
=newã³ãã³ãã§äœãããã¹ã¿ãã¯ã¯ïŒçŸåšã®ã¹ã¿ãã¯ã®ãåããšãªããŸãïŒ =newïŒ=targetã³ãã³ããç¹°ãè¿ãããšã§ïŒåïŒå«ïŒæŸå«ïŒã®ããã«ã¹ã¿ãã¯ã®äžã«ããã«ã¹ã¿ãã¯ãäœãããšãå¯èœã§ãïŒ
åã¹ã¿ãã¯ãã芪ã¹ã¿ãã¯ãåç §ããã«ã¯ã=parentãã³ãã³ãã䜿ããŸãïŒ=parentã³ãã³ãã¯çŸåšã®èšç®å¯Ÿè±¡ãšããŠããã¹ã¿ãã¯ã«ã芪ãã¹ã¿ãã¯ã眮ããŠãããŸã(å ã®ã泚æãã§è¿°ã¹ãéãïŒå®äœã§ã¯ãªãåç §å ãšããŠçœ®ãããŸã)ïŒããã§=targetãå®è¡ãããšïŒèŠªã¹ã¿ãã¯ãžã®åãæ¿ããè¡ãããŸãïŒãã=targetãã¹ã¿ãã¯ä»¥å€ã«å®è¡ãããå Žåã«ã¯ãªã«ãèµ·ãããŸããïŒ
###6.3 ã¹ã¿ãã¯äžã®ã¹ã¿ãã¯(åç §å ãšããŠã®ããŒã¿)
å
ã«ã¹ã¿ãã¯äžã®ã¹ã¿ãã¯ã¯åç
§å
ãšããŠã®ããŒã¿ã§ããããšãè¿°ã¹ãŸãããïŒããå°ã詳ãã説æããŸãïŒ
=newã³ãã³ããå®è¡ããããšæ°ããã¹ã¿ãã¯ãäœãããŸãïŒãã®ã¹ã¿ãã¯ã¯å®äœãçŸåšã®ã¹ã¿ãã¯ã®äžã«äœãããããã§ã¯ãªãïŒå¥ã®å Žæã«å®éã®ããŒã¿ã®çœ®ãå ŽæãäœãããŸãïŒäœæããå
ã®ã¹ã¿ãã¯ã«ã¯IDã衚瀺ãããŸããïŒããã¯ãããŸã§ãã®ã¹ã¿ãã¯ãæããŠããIDã«éããŸããïŒ
å®éšããŠã¿ãŸãããïŒ
( =0= [] empty ) % =new
( =0= [0] =1= ) % dup
( =0= [1] =1= ) % stack
sp[ 0] (=) =1=
sp[ 1] (=) =1=
( =0= [1] =1= ) %
æåã«=newã³ãã³ãã§ã¹ã¿ãã¯ãäœãïŒdupã³ãã³ããå®è¡ããŸãïŒdupã³ãã³ãã«ãã£ãŠã§ããã®ã¯ID2ã®ã¹ã¿ãã¯ã§ã¯ãªãïŒID1ã®ã¹ã¿ãã¯ãã³ããŒãããŠããŸãïŒãããŸã§ã®æäœã«åŒãç¶ããŠ=targetã³ãã³ãã䜿ã£ãŠID1ã®ã¹ã¿ãã¯ãæäœããŠã¿ãŸãïŒ
( =0= [1] =1= ) % =target
( =1= [] empty ) % 1 2 3
( =1= [2] 3 ) % =parent =target
( =0= [1] =1= ) % stack
sp[ 0] (=) =1=
sp[ 1] (=) =1=
( =0= [1] =1= ) % pop
( =0= [0] =1= ) % stack
sp[ 0] (=) =1=
( =0= [0] =1= ) % =target
( =1= [2] 3 ) % stack
sp[ 0] (i) 1
sp[ 1] (i) 2
sp[ 2] (i) 3
( =1= [2] 3 ) %
å
ã®ã¹ã¿ãã¯ã®æäžäœã«ãã£ãID1ã®ã¹ã¿ãã¯ãèšç®å¯Ÿè±¡ãšãããã=targetãå®è¡ããŸããïŒ
次ã«ID1ã®ã¹ã¿ãã¯ã«ã1ãïŒã2ãïŒã3ãã®ããŒã¿ãç©ãã§ããŸãïŒ
ãã®åŸ=parent ã«ç¶ã㊠=target ãå®è¡ãïŒèšç®å¯Ÿè±¡ã芪ã¹ã¿ãã¯ã«åãæ¿ãå
ã«æ»ããŠããŸããŸãïŒ
stackã³ãã³ããå®è¡ãããšå
ã»ã©ãšåãããã«=1=ãäºã€ååšããŸãïŒãã®ãã¡å
ã»ã©ã¹ã¿ãã¯ãæäœããäžäœåŽã®æ¹ã®ã¹ã¿ãã¯ãçŸã¹ã¿ãã¯ããæ¶å»ããŸãïŒ
æ®ã£ãåŽã®ã¹ã¿ãã¯ãèšç®å¯Ÿè±¡ã«ããŠã¹ã¿ãã¯ã®å
容ã確èªãããšïŒå
ã»ã©ã®å
å®¹ãæ®ã£ãŠããã®ãããããŸãïŒã€ãŸãID1ã®ã¹ã¿ãã¯ã¯åããã®ã§ããïŒãããžã®åç
§ãäžã€æ¶ããŠãå
容ã¯ãã®ãŸãŸä¿æãããŠããããšãããããŸããïŒ
ã¹ã¿ãã¯ã®å®äœã¯åç §ãããŠããéãæ®ããŸãïŒåç §ãšã¯ããšãã°ããã¹ã¿ãã¯äžã«ãã®ã¹ã¿ãã¯ãååšããŠããç¶æ ãïŒå€æ°ã«ä¿åãããŠããç¶æ ã«ããããŸãïŒ
###6.4 =targetã³ãã³ãã®æå
=target ã³ãã³ãã®å®è¡åŸã®ã¹ã¿ãã¯ã®ç¶æ ã¯äžå®ã§ã¯ãããŸããïŒ
-
èšç®å¯Ÿè±¡ãšããŠåã¹ã¿ãã¯ãæå®ãããå Žåã«ã¯ïŒèŠªã¹ã¿ãã¯ã«ã¯ãã®åã¹ã¿ãã¯ãæ®ãããŸãïŒ
-
èšç®å¯Ÿè±¡ãšããŠèŠªã¹ã¿ãã¯ãæå®ãããå Žåã«ã¯ïŒçŸã¹ã¿ãã¯ã«ã¯ãã®èŠªã¹ã¿ãã¯ãžã®åç §ã¯æ®ãããŸããïŒ
ããã¯=parentã=targetã®çŽåã«å®è¡ãããå Žåã°ããã§ãªãïŒéæ¥çã«åç §ãããå Žåãé©çšãããŸãïŒ
åã¹ã¿ãã¯ã芪ã¹ã¿ãã¯ãžã®åç
§ãæã¡ïŒãã®ã¹ã¿ãã¯ãžåã¹ã¿ãã¯ã®äžïŒã€ãŸãå«ã¹ã¿ãã¯ãšããŠèŠªã«ã¢ã¯ã»ã¹ããã®ã¯åŸªç°åç
§ãšãªãããæãŸãããããŸããïŒãã®ãããªçç±ã§èŠªã¹ã¿ãã¯ãžã®åç
§ãäžèšã®ããã«å®è£
ããŠãããŸãïŒ
ãŸãããã«èªèº«ãã¿ãŒã²ãã«ããå Žåã«ãïŒ
- çŸã¹ã¿ãã¯èªèº«ãæç€ºçã«æå®ããå Žåã«ã¯ïŒãã®åç §ã¯æ®ãããŸãïŒ
- çŸã¹ã¿ãã¯èªèº«ãæç€ºçã«æå®ããªãã£ãå Žåã«ã¯ïŒã¹ã¿ãã¯ã®å€ã¯æ¶ãããŸãïŒ
###6.5 ã¹ã¿ãã¯ã®ã³ããŒ
å
ã»ã©ã®dupã³ãã³ãã«ããæäœã§ã¯ïŒã¹ã¿ãã¯ã®åç
§ãå¢ããã ãã§ããïŒå®äœã¯åããã®ã®ããïŒçæ¹ã®å
容ã倿Žããããšããäžæ¹ã®å
容ã倿ŽãããŠããŸããŸãïŒ
ç¬ç«ããã¹ã¿ãã¯ã®ã³ããŒã¯ã=copyãã³ãã³ãã§äœãããšãã§ããŸãïŒ=copyã³ãã³ãã¯ã¹ã¿ãã¯ããäºã€ã®åŒæ°ãåããŸãïŒæåã«ããããããããŒã¿ãã³ããŒå
ïŒåŸããããããããæ¹ãã³ããŒå
ãšããŸãïŒäžã«äœ¿çšäŸã瀺ããŸãïŒ
( =0= [] empty ) % =new =target
( =1= [] empty ) % 1 2 3 4 5
( =1= [4] 5 ) % =parent =target
( =0= [0] =1= ) % stack
sp[ 0] (=) =1=
( =0= [0] =1= ) % =new
( =0= [1] =2= ) % stack
sp[ 0] (=) =1=
sp[ 1] (=) =2=
( =0= [1] =2= ) % =target stack
( =2= [] empty ) % =parent =target
( =0= [1] =2= ) % =copy
( =0= [1] =2= ) % =target stack
sp[ 0] (i) 1
sp[ 1] (i) 2
sp[ 2] (i) 3
sp[ 3] (i) 4
sp[ 4] (i) 5
( =2= [4] 5 ) %
ID1ã®ã¹ã¿ãã¯ãäœæããã®äžã«ã1ãã2ãã3ãã4ãã5ããã»ããããŠããŸãïŒ
ãã®åŸïŒèŠªã¹ã¿ãã¯ã«æ»ãæ°ããåã¹ã¿ãã¯ID2ãäœæïŒãã®äžèº«ã確èªãããšç©ºã«ãªã£ãŠããŸãïŒ
=copyãå®è¡ããŸãïŒID1ããID2ãžã¹ã¿ãã¯ã®å
容ãã³ããŒããïŒãã®å
容ã確èªããŠããŸãïŒ
ID1ã®å
容ããã¹ãŠID2ã®ã¹ã¿ãã¯ã«ã³ããŒãããŸããïŒ
ããæ¢ã«ID2ã®ã¹ã¿ãã¯ã«ããŒã¿ãååšããå Žåã«ã¯ïŒID1ã®ããŒã¿ããã®åŸã«è¿œå ããã圢ã«ãªããŸãïŒ
=copyã³ãã³ãã¯åã¹ã¿ãã¯ã°ããã§ã¯ãªãïŒèŠªã¹ã¿ãã¯ãèªåèªèº«ããã®å¯Ÿè±¡ã«æå®ã§ããŸãïŒ
=targetã³ãã³ããšåæ§ã«èªåèªèº«ãåç
§ããå Žåã«ã¯ãã®åŒæ°ãšããŠéã¹ã¿ãã¯ããŒã¿ãæå®ããŸãïŒ
##7. cafeãå¶åŸ¡ãã
###7.1 ãã©ã¡ãŒã¿èšå®
cafeã®æåãæ±ºå®ãããã©ã¡ãŒã¿ã¯ïŒãããããå®çŸ©ãããŠãã倿°ãžã®ã¢ã¯ã»ã¹ãšããŠå¶åŸ¡ã§ããŸãïŒ
ãã©ã¡ãŒã¿ãšããŠå®çŸ©ãããŠãã倿°ã¯ãã¹ãŠã$$ãã§å§ãŸãååãæã¡ãŸãïŒ
ããšãã°ãŠãŒã¶ãæèããŠãããªããšãããªããã®ã«ãååž°ã³ãŒã«ã®å¶éãããããŸãïŒå®è¡æã®äžçšæãªã¡ã¢ãªã®ãªãŒããŒãããŒãé²ã®ãç®çã§ãïŒååž°ã³ãŒã«ã®å¶éã¯ã$$RECURSIVE_LIMITã倿°ã§èšå®ãããŸãïŒ
ããã©ã«ãå€ã¯2000ã§ãïŒ
ååž°ã³ãŒã«ã®å¶éå€ã倿Žããã®ã¯èªç±ã§ããïŒããã°ã©ã ã®ã¯ã©ãã·ã¥ã®å±éºãåžžã«èããŠãããªããŠã¯ãªããŸããïŒ
ãã®å€ã®å€æŽã¯ä»¥äžã®ããã«è¡ããŸãïŒ
CaFE (empty) % 1000 > $$RECURSIVE_LIMIT
CaFE (empty) %
çŸåšã®å€ãã¹ã¿ãã¯ã«åŸãã«ã¯å察ã®äžçå·èšå·ã䜿ããŸãïŒ
CaFE (empty) % < $$RECURSIVE_LIMIT
CaFE (1000) %
å®éã«$$RECURSIVE_LIMITã®å€ãèšå®ããéã«ã¯ãäœåãŸã§åŒãååž°çã«è©äŸ¡å¯èœã«ãããããèšå®ããããšãšãªãããïŒãã®å€ãçŽæ¥ãååž°ã³ãŒã«ã®éçæ°ããšãªãããã§ã¯ãããŸããïŒ
ããšãã°æå€§å
¬çŽæ°ãæ±ãã颿°ãgcdãã®äŸã§ã¯...
1. ifelseã®æ¡ä»¶ãçã§ããã°'% swap gcd'ãããŒã¯ã³ãšããŠ
è©äŸ¡ãã
2. '% swap gcd'ã«ã¯ãgcdãã颿°ãšããŠååšããã®ã§ïŒãã®gcdã
ããã«è©äŸ¡ããïŒ
次ã®ååž°ã³ãŒã«ãè¡ããããŸã§ã«åŒã2åè©äŸ¡ãããŸãïŒãã®ããå®éã®ååž°ã³ãŒã«ã¯ã1000 > $$RECURSIVE_LIMITããšããå Žåã«ã¯499åãŸã§ãšããå¶éãšãªããŸã(500ã§ãªãã®ã¯æåã®åŒè©äŸ¡ã1ã€ããšèããããã§ã)ïŒ
æäœå¯èœãªãã©ã¡ãŒã¿å€æ°ã®äžèЧãåŸãããšãã§ããŸãïŒãã®æã«ã¯ã>ããŸãã¯ã<ãã³ãã³ãã«ç¶ãã$$ã(ãã«èšå·2ã€ã®ã¿ã§ååç¡ã)ã®å€æ°ãæå®ããããšã§è¡šç€ºãããŸãïŒ
CaFE (empty) % <ã$$
current mode status
$$INTERACTIVE_MODE : 1
$$GET_STDIN : 0
$$USE_PREFERENCE : 1
$$USE_HISTORY : 1
$$PUT_HISTORY : 1
$$RECURSIVE_LIMIT : 2000
$$ERROR_DETECTED : 0
$$N_HISTORY : 500
$$QUIT : 0
$$FUNC_EXE_ABORT : 0
$$FORCE_FUNCTION_RTN : 0
CaFE (empty) %
ããšãã°
1 > $$QUIT
ãšãããšcafeã¯çµäºããŸãïŒ
ã¡ã¢ : ãããã®ãã©ã¡ãŒã¿ã®ååãæ¯åæ£ç¢ºã«æžãã®ã¯é¢åãªã®ã§ïŒå€æ°åã®è£å®æ©èœã䜿ããšäŸ¿å©ã§ãïŒ
###7.2 ã³ãã³ã³ãã©ã€ã³ãã䜿ã
ãããŸã§ã¯cafeã察話çã«äœ¿ãæ¹æ³ã説æããŠããŸããïŒãã®ç¯ã§ã¯cafeãé察話ã¢ãŒãã§äœ¿çšããæ¹æ³ã説æããŸãïŒ
####7.2.1 ã³ãã³ãã©ã€ã³äžã§èšç®ãè¡ãïŒ
cafeãã³ãã³ãã©ã€ã³ã§äœ¿çšããæ¹æ³ã玹ä»ããŸãããïŒcafeã³ãã³ãã«ç¶ããŠèšç®åŒãå ¥åããŸãïŒãã®æ¹æ³ã䜿ãå Žåã«ã¯ïŒããã³ããã¯çŸããªãã®ã§ïŒãã®çµæã®è¡šç€ºãæç€ºçã«æç€ºããå¿ èŠããããŸãïŒ
alice:⟠% cafe 3 4 5 - + .
2
æåŸã®ããªãªãã¯çµæã衚瀺ãããã³ãã³ãã§ãïŒcafeãé察話ã¢ãŒã䜿ãå Žåã«ã¯ããã³ããã¯è¡šç€ºãããŸããïŒãã®ããã§ããªãªãç¡ãã§ã¯äœã衚瀺ãããã«çµäºããŠããŸããŸãïŒ(ããªãªãã¯ã¹ã¿ãã¯ã®äžçªäžã«çœ®ãããŠããå€ã衚瀺ããã³ãã³ãã§ãïŒ)
æãç®ãè¡ãéã«ã¯æ³šæãå¿ èŠã§ãïŒãã®ããã«èšç®åŒãæžãå Žåã«ã¯ïŒã·ã§ã«ãã¢ã¹ã¿ãªã¹ã¯ãå±éããŠããŸãããïŒcafeã«ãããæž¡ããªããªã£ãŠããŸããŸãïŒãã®ãããªåé¡ãé¿ããããã«ã¯ããããÂ¥*ããšæžããŠãããªããŠã¯ãªããŸããïŒ
alice:⟠% cafe 3 4 5 ¥* + .
23
####7.2.2 æšæºå ¥åã䜿ã£ãŠïŒãã¡ã€ã«ããå ¥åïŒ
æšæºå ¥åã䜿ããšãã¡ã€ã«å ¥åã§èšç®ããããããšãã§ããŸãïŒcafeãé察話ã¢ãŒãã§èµ·åããããã«ã-Bããªãã·ã§ã³ã䜿çšããŸãïŒ
alice:⟠% echo '3 4 5 * + .' > test.txt
alice:⟠% cat test.txt
3 4 5 * + .
alice:⟠% cafe -B < test.txt
23
cafeã®èµ·åã«(ãªãã·ã§ã³ã¹ã€ãã以å€ã®)2ã€ä»¥äžã®åŒæ°ããçšãããšïŒ-Bãªãã·ã§ã³ãçšããªããŠãèªåçã«é察話ã¢ãŒãã§ã®èµ·åãšãªããŸãïŒ[5.2.1]ç¯ã®äŸã§ã¯ïŒcafeã«äžããèšç®åŒã®åæåãåŒæ°ã§ããïŒåèš6åã®åŒæ°ããã£ãããã«-Bãå¿ èŠãªãã£ãã®ã§ãïŒ
####7.2.3 ãã¡ã€ã«ãåŠçããïŒ
ã-fããªãã·ã§ã³ãçšããŠcafeã®èµ·åæã«ãã¡ã€ã«ãèªã¿èŸŒãŸããããšãã§ããŸãïŒcafeã¯èµ·ååŸïŒéåžžåäœãšããŠãâŸ/.cafeããšãâŸ/.cafe.autopreferenceããèªã¿èŸŒã¿ïŒãã®åŸã-fããªãã·ã§ã³ã§æå®ããããã¡ã€ã«ãèªã¿èŸŒã¿ãŸãïŒå¯Ÿè©±ã¢ãŒãã§ã¯èµ·ååŸã«ãuseãã³ãã³ãã䜿ã£ãŠãã¡ã€ã«ãèªã¿èŸŒãã®ãšåçã§ãïŒ
ã-fããªãã·ã§ã³ã¯å¯Ÿè©±ã¢ãŒããšé察話ã¢ãŒãã®ã©ã¡ãã§ã䜿ãããšãã§ããŸãïŒé察話ã¢ãŒãã§äœ¿çšããéã¯åŒæ°ã®æ°ã«æ³šæããŠãã ããïŒ-fãªãã·ã§ã³ã®åŸã«æå®ããããã¡ã€ã«åã¯ãã®ãªãã·ã§ã³ã¹ã€ããã®åŒæ°ãšãªãïŒcafeã®åŒæ°ã®æ°ã«ã¯ã«ãŠã³ããããŸããïŒãã®ãã-fãªãã·ã§ã³ãçšããŠcafeãé察話ã¢ãŒãã§èµ·åããæã«ã¯-Bã䜿çšããæ¹ãå®å
šã§ãïŒ
-fãªãã·ã§ã³ã¯è€æ°äœ¿çšããããšãã§ããŸãïŒ-fããã¡ã€ã«åãç¹°ãè¿ãæžãããšã§ïŒè€æ°ã®ãã¡ã€ã«ãèªã¿èŸŒãããšãã§ããŸãïŒèªã¿èŸŒãé åºã¯ïŒã³ãã³ãã©ã€ã³ã«æžãããéé ïŒå³ããå·ŠãžãšãªããŸãïŒ
äžã¯é察話ã¢ãŒãã§è€æ°ã®ãã¡ã€ã«ãåŠçããäŸã§ãïŒ-Bãªãã·ã§ã³ã§é察話ã¢ãŒãã§èµ·åããŠããŸãïŒ
alice:⟠% cat function.txt
: process 22 * ;
alice:⟠% cat test.txt
3 4 5 * + . process .
alice:⟠% cafe -B -f test.txt -f function.txt
23
506
ãã®äŸã§ã¯cafeã¯é察話ã¢ãŒãã§èµ·åã¯ãããŠããã®ã§ããïŒãã¡ã€ã«åŠçãã®åŸã«èªåçã«çµäºããŠãããŸããïŒé察話ã¢ãŒãã䜿ã£ãŠãå
¥åãæšæºå
¥åããåŸãããšãæåŸ
ããŠããããïŒãã¡ã€ã«ã®èªã¿èŸŒã¿åŸïŒæšæºå
¥åããEOF(ãControl-Dã)ãå
¥åããªããã°ïŒå¯Ÿè©±ã¢ãŒããšåãããã«ããã°ã©ã ãåŸ
ã£ãŠããç¶æ
ã«ãªããŸãïŒ
-fãªãã·ã§ã³ã䜿ãïŒæšæºå
¥åããã¯ãªã«ãå
¥åããªãå Žåã«ã¯ããããªãã·ã§ã³ã-!ãã«ãã£ãŠæå®ããŠãããªããã°ãªããŸããïŒäžèšã®ãããªå Žåã«ã¯ïŒcafeããcafe -! -B -f test.txt -f function.txtãã®ããã«èµ·åããŸãïŒ
####7.2.4 å ¥åã®çµã¿åããåŠçïŒ
äžèšã§èª¬æããããã«cafeãé察話ã¢ãŒãã§èµ·åããéã«ã¯ãªãã·ã§ã³ã®æå®ã«ãã£ãŠããã€ãã®å
¥åãåæã«æå®ããããšãã§ããŸãïŒ
a. åŒæ°ãšããŠã®å
¥å
b. æšæºå
¥å
c. -fãªãã·ã§ã³ãçšãããã¡ã€ã«å
¥å
ãããã¯ããããåç¬ã§äœ¿çšããããšãçµã¿åãããŠäœ¿çšããããšãã§ããŸãïŒçµã¿åãããŠäœ¿çšããå Žåã«ã¯æ¬¡ã®ãããªä»çµã¿ã§åãããã«ãªã£ãŠããŸãïŒ
ã¹ããã1. èµ·ååŸã«-fãªãã·ã§ã³æå®ã®ãã¡ã€ã«ãé çªã«èªã¿èŸŒã
ã¹ããã2. ã¹ããã1çµäºåŸïŒåŒæ°ãšããŠæå®ãããåŒãããŒãããïŒ
ã¹ããã3. æšæºå
¥åã1è¡ã¥ã€èªã¿èŸŒã¿ïŒã¹ããã2ã§ããŒããããåŒãè¡æ«ã«ä»ãè¶³ããŠèšç®åŠçãè¡ãïŒ
alice:âŸ/coding/CaFE2 % cat average.txt
:avg depth >dp aa <dp /;
alice:âŸ/coding/CaFE2 % cat multiline.txt
5 5 5 5 5 5 6 5 5 5
32 43 54 42 23 32 23 2 54 12 45 11 53
1 2 3 4 5 6 7 8 9 9 9 9 9 9 9 9 9 9 9 9
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1
2 2 2 3 4 5 5 5 5 5 4 3 3 2 1 2 3 4 4 5 5 6 2
alice:âŸ/coding/CaFE2 % cafe 'avg . cl' -f average.txt < multiline.txt
5.1
32.7692
7.2
1.04167
3.56522
alice:âŸ/coding/CaFE2 %
##8. ãããã¬
###8.1 ãããã¬ã®èµ·å
颿°ã®æ¯ãèããæ€èšŒããããã«ãããã¬ãçšæãããŠããŸãïŒ
ãããã¬æ©èœã®èµ·åã«ã¯ä»¥äžã®äºã€ã®æ¹æ³ããããŸãïŒ
äžã€ã¯é¢æ°ãå®è¡ããåã«ãdebugger_enableãã³ãã³ããå®è¡ããŠããæ¹æ³ïŒããäžã€ã¯é¢æ°å ã«ãpauseãã³ãã³ããçšæããŠããæ¹æ³ã§ãïŒãããã®ã³ãã³ãã¯å®è³ªçã«ã©ã¡ããåãã§ããïŒãpauseãã§ã¯ãããã¬ã¢ãŒãã«å ¥ã£ãã¡ãã»ãŒãžã衚瀺ãããŸãïŒ
ããã§äŸã瀺ããŠèª¬æããŸãïŒãŸãæåã«ãtestããšããåã®é¢æ°ãçšæãïŒãã®é¢æ°ãã¹ãããå®è¡ããŠã¿ãŸãïŒ
CaFE (empty) % :test 10 times 'print A';
CaFE (empty) % debugger_enable
CaFE (empty) % test
<< in function "" [prev:"debugger_enable"] [next:"test"] [d/r:1/1] [faf=0] >>
debug >
æåã«ãtestã颿°ãå®çŸ©ããåŸïŒãdebugger_enableãã³ãã³ããå®è¡ããŠïŒãããã¬ã¢ãŒããèšå®ããŠããŸãïŒãã®åŸãtestããå®è¡ãããšïŒãããã°ã»ããã³ããã衚瀺ããïŒå®è¡ãäžæåæ¢ç¶æ
ãšãªã£ãŠããŸãïŒ
ãã®ãããã°ã»ããã³ãã衚瀺ããããŠããæã«ã?ãããŒãæŒããšãã«ãã衚瀺ãããŸãïŒ
CaFE (empty) % test
<< in function "" [prev:"debugger_enable"] [next:"test"] [d/r:1/1] [faf=0] >>
debug >
n : execute next command
[return] : execute next command
[space] : execute next command
i : step into function
o : step out from function
g : go to next breakpoint
s : show stack
q : abort from debug mode
e : evaluate key input
debug >
ãã®ãã«ã衚瀺ã¯ãããã°ã»ããã³ããã§äœ¿ãããšã®ã§ãããããã°ã»ã³ãã³ãã§ãïŒ
颿°ã®å
éšãã¹ãããå®è¡ããã«ã¯ãnãïŒãªã¿ãŒã³ïŒã¹ããŒã¹ã®ããããã®ããŒãæŒãã°è¯ãããšãããããŸãïŒ
ãgãã¯å®è¡ãç¶è¡ããŸã颿°å
ã«pauseã®ã³ãã³ããååšããªããã°é¢æ°ããã¹ãŠå®è¡ããŠçµäºããŸãïŒ
ãsãã¯çŸåšã®ã¹ã¿ãã¯ã®ç¶æ
ã瀺ããŸãïŒ
ãqãã¯ãããã°ã¢ãŒãã®äžæ¢ïŒcafeã®å
éšçãªãšã©ãŒãçºçãããŠé¢æ°ã®å®è¡ãæã¡åããŸãïŒ
ãeãã¯ãŠãŒã¶ã®ã³ãã³ãå
¥åãå¯èœã«ããŸãïŒ
ãããã°ã»ããã³ããã®äžã®è¡ã«ã¯ïŒå®è¡ç¶æ ã衚瀺ãããŠããŸãïŒãŸãã<<ãã®èšå·ã«ç¶ããŠçŸåšäžæåæ¢ããŠãã颿°ã®ååïŒæ¬¡ã«çŽåã«å®è¡ããããŒã¯ã³æååïŒãã®å³æšªã«ã¯æ¬¡ã«å®è¡ãããããŒã¯ã³ïŒããã«çŸåšã®é¢æ°å®è¡ã¬ãã«ïŒæåŸã«é¢æ°ã®å®è¡äžæ¢ãã©ã°ã§ãïŒ
ãã®äžã®ã颿°å®è¡ã¬ãã«ããšã¯ïŒå®éã«é¢æ°ãã©ã®ã¬ãã«ã§åæ¢ãããããšããå€ãšïŒçŸåšã¯ã©ã®ã¬ãã«ãªã®ããšããå€ã®äºã€ã®æ°å€ããæã£ãŠããŸãïŒ
cafeã§ã¯é¢æ°ã颿°ãåŒã¶ããšãèš±ãããŠããŸãïŒé¢æ°ããåŒã³åºã颿°ã¯ä»ã®é¢æ°ã§ãèªåèªèº«ã§ãæ§ããŸããïŒåŒã³åºããã颿°ã¯ããã«é¢æ°ãåŒã³åºãããšãã§ããŸãïŒããã§ã¯é¢æ°ããããã«åŒã°ãã颿°ããããæ·±ãã颿°ãšåŒã¶ããšã«ããŸãïŒ
颿°å®è¡ã¬ãã«ã®å€ã¯ïŒãã®ãæ·±ããã瀺ããã®ã§ãïŒå®è¡ã¬ãã«ã®å€ã倧ããã»ã©ïŒãã®é¢æ°ã¯æ·±ãæã§å®è¡ãããŠããŸãïŒ
cafeããŠãŒã¶ã®ã³ãã³ããåãä»ããŠã³ãã³ãïŒãããã¯é¢æ°ã®å®è¡ãå§ãŸã£ããšãïŒå®è¡ã¬ãã«ã¯1ãšãªããŸãïŒãããã颿°ãåŒã°ãããšãã®é¢æ°ã¯å®è¡ã¬ãã«2ã§å®è¡ããïŒããã«ãã®é¢æ°ã®äžããåŒã°ãã颿°ã¯å®è¡ã¬ãã«3ã§å®è¡ãããŸãïŒ
å®è¡ã¬ãã«3ã®é¢æ°ãçµäºãããšïŒå®è¡ã¯å
ã®é¢æ°ã«æ»ãå®è¡ã¬ãã«ã¯2ã«ïŒãã®é¢æ°ã®å®è¡ãçµäºãããšå®è¡ã¬ãã«ã¯1ã«é ã«æ»ã£ãŠãããŸãïŒ
ããæ·±ã颿°ãé æ¬¡åŒã³åºããªããå®è¡ããŠããä»çµã¿ããããã°ããéïŒãã¹ãŠã®æ·±ãã®é¢æ°ã®å®è¡ãŸã§ç£èŠãããããªããšã¯ããŸããªãã§ãããïŒéåžžïŒããåŠçãè¡ãå Žåã«ã¯ãã®åŠçã现ããéšåã«ãããŠå ±éãããã®ã颿°åããŠåäœã確èªãïŒãã®é¢æ°ããã倧ããªé¢æ°ããåŒã³åºããŠäœ¿ãããã«ããŸãïŒãã§ã«å®è¡ã«åé¡ãªãããšã確èªãããŠãã颿°ã䜿ãã®ã§ããã°ïŒãã®å éšã®åäœãŸã§ã¯ç£èŠããå¿ èŠã¯ãããŸããïŒ
ãããã°äœæ¥ã®ããæç¹ã§ïŒå®è¡åæ¢äžã«ïŒæ¬¡ã«å®è¡ãã颿°ã®å éšãŸã§ç£èŠããå¿ èŠããããïŒãããã¯åã«äžã€ã®ã³ãã³ãã®ããã«å®è¡ãããããéžæã§ããªããã°ïŒé¢æ°ãç©ã¿éããåŠçãæ€èšŒããããšã¯éåžžã«é£ãããªã£ãŠããŸããŸãïŒ
ãã®ãããªé¢æ°ã®æ·±ããšïŒå®è¡ãã©ã®æ·±ãã®é¢æ°ã§æ¢ããã®ããå¶åŸ¡ããããã«ãã®ãããªãå®è¡ã¬ãã«ããäœãããŠããŸãïŒæ¬¡ã®ãããªé¢æ°ã®å®è¡ãäŸã«èŠãŠã¿ãŸãããïŒ
CaFE (empty) % :a 0 1+;
CaFE (empty) % :b 2+;
CaFE (empty) % :c 3+;
CaFE (empty) % :d 4+;
CaFE (empty) % :abcd a b c d;
ãã®äŸã§ã¯a, b, c, d, abcdã®5åã®é¢æ°ãå®çŸ©ãããŠããŸãïŒããã§ãããã¬ã¢ãŒããã»ããããŠabcdãšïŒããã€ãã®ã³ãã³ããå®è¡ããŠã¿ãŸãïŒ
CaFE (empty) % debugger_enable
CaFE (empty) % abcd . print ¥nend¥n
<< in function "" [prev:"debugger_enable"] [next:"abcd"] [d/r:1/1] [faf=0] >>
debug >
次ã«å®è¡ããã³ãã³ã/颿°ããabcdããšãªã£ãŠããç¶æ ã§ãããã¬ãåŸ æ©ããŠããŸãïŒãã®ç¶æ ã§å®è¡ã¬ãã«ã¯ã1/1ãã«ãªã£ãŠããŠïŒãããã¬ã«æå®ãããå®è¡ã忢ã¬ãã«ã1ïŒçŸåšã®ã¬ãã«ã1ãšããããšãæå³ããŠããŸãïŒãã®ç¶æ ã§ãnãïŒãreturnãïŒãspaceãã®ããããã®ããŒãæŒããšïŒãabcdãã¯ãã®å éšã§ã¯åæ¢ããå®è¡ãããŠããŸããŸãïŒabcdãå®è¡ãããåŸã«ã¯ïŒæ¬¡ã®ããŒã¯ã³ã.ããåŠçããæåã§äžæŠåæ¢ããŸãïŒ
<< in function "" [prev:"+"] [next:"."] [d/r:1/1] [faf=0] >>
debug >
ããã§ã¯é¢æ°abcdã®å éšã®åäœãèŠãããšãã§ããŸããïŒãã®ãããªæã«åæ¢ãããæ·±ããäžã€é²ããããšã§abcdã®é¢æ°å®è¡ã®å éšãèŠãããšãã§ããããã«ãªããŸãïŒå ã»ã©ã®ã.ãã³ãã³ãã®å®è¡ãåŸ ã€ãããã¬ã®ç¶æ ããéåžžç¶æ ãžæããããã«ïŒãqãããŒãæŒããŠå®è¡ãç Žæ£ïŒéåžžã®ããã³ããã«æ»ããŸãããïŒ
ã¡ã¢ : ãqãããŒã«ããå®è¡ã®ç Žæ£ã¯ïŒé¢æ°/ã³ãã³ãã®å®è¡ãäžæãéåžžã®ããã³ããç¶æ ã«æ»ãã ãã§ïŒéäžãŸã§å®è¡ããåŠçã«ããã¹ã¿ãã¯ã倿°ïŒé¢æ°å®çŸ©çã®åœ±é¿ã¯ãã®ãŸãŸæ®ãããŸãïŒ
<< in function "" [prev:"+"] [next:"."] [d/r:1/1] [faf=0] >>
debug > error : error condition has been thrown to quit from the debugging mode.
10
CaFE (error) %
å ã»ã©ãšåãåŠçããããã¬ãèµ·åããŠå®è¡ããŸãïŒ
CaFE (empty) % debugger_enable
CaFE (empty) % abcd . print ¥nend¥n
<< in function "" [prev:"debugger_enable"] [next:"abcd"] [d/r:1/1] [faf=0] >>
debug >
å
ã®äŸã§ã¯ãnãïŒãreturnãïŒãspaceãã§ã¹ãããå®è¡ãããããšããã§ïŒãã®ä»£ããã«ã¹ãããã»ã€ã³ã»ã³ãã³ãã®ãiããæŒããŠã¿ãŸãïŒããããããšã§é¢æ°ã忢ãããæ·±ãã®æå®ããäžã€é²ããããšã«ãªããŸãïŒãã®åŸé¢æ°abcdãå®è¡ãããããã§ããïŒåæ¢ã®æå®ã2ïŒãããŠå®è¡ã¬ãã«2ã§ããããšãèªèãïŒå®è¡ã¯é¢æ°ã«å
¥ã£ãæã§åæ¢ããŸãïŒ
ãã®åŸã¹ãããå®è¡ãç¹°ãè¿ããŠãããšé¢æ°abcdã®äžã§åŒã³åºããã颿°ãå®è¡ã¬ãã«2ã§é 次å®è¡ãããŠããã®ãèŠããŸãïŒ
颿°abcdãçµäºãããšïŒå®è¡ã¬ãã«1ã«æ»ã£ãŠããããšã確èªã§ããŸãïŒ
<< in function "abcd" [prev:"abcd"] [next:"a"] [d/r:2/2] [faf=0] >>
debug >
<< in function "abcd" [prev:"+"] [next:"b"] [d/r:2/2] [faf=0] >>
debug >
<< in function "abcd" [prev:"+"] [next:"c"] [d/r:2/2] [faf=0] >>
debug >
<< in function "abcd" [prev:"+"] [next:"d"] [d/r:2/2] [faf=0] >>
debug >
<< in function "" [prev:"+"] [next:"."] [d/r:1/1] [faf=0] >>
debug >
颿°å®è¡ãéäžãŸã§ç£èŠãïŒãã®åŸãã®é¢æ°ã®åäœãèŠãå¿ èŠããªããªã£ãæã«ã¯ãoãããŒã«ããã¹ãããã»ã¢ãŠãã»ã³ãã³ãã§1æ®µéæµ ãå®è¡ã¬ãã«ã«æ»ãããšãã§ããããã«ãªã£ãŠããŸãïŒ
ããããæžã
##APPENDIX
###A1. ã€ãã¬ãŒã¿
ã«ãŒãåŠçã®äžèº«ãã«ãŒãã®å€éšã§å®çŸ©ããŠäœ¿ãããšãã§ããŸãïŒ
次ã®é¢æ°ã¯æååäžã®åæåãæ°å€ãšããŠæäœãã颿°ã§ããïŒãã®äžã§äœ¿ãããã«ãŒãå
ã®åŠçãå®è¡æã«æå®ã§ããããã«ããŠãããŸãïŒãã®é¢æ°ã¯2ã€ã®æååãåãïŒ1ã€ç®ã¯æäœããæååïŒ2ã€ç®ã¯æäœããå
容ãæå®ããŸãïŒ
:hal >calculation
strlen >length
s2c
<length
times
'
c2i <calculation eval i2c rot
'
<length 1-
times glue
;
äžã¯ãã®å®è¡äŸã§ãïŒ
CaFE (empty) % :hal >calculation strlen >length s2c <length times 'c2i <calculation eval i2c rot' <length 1- times glue;
CaFE (empty) % "IBM"
CaFE ("IBM") % "1 -" hal
CaFE ("HAL") % "1 +" hal
CaFE ("IBM") %
halã®äžèº«ãèŠããšã¹ã¿ãã¯äžã®æåã®ããŒã¿ãcalculationã«ä¿åããŠããŸãïŒããã«ã¯ã©ã®ãããªèšç®ãè¡ãããæå®ããæååãå ¥ããããŸãïŒãã®åŸïŒãã®æ¬¡ã«ã¹ã¿ãã¯ã«æ®ã£ãŠããæååã®åŠçãå§ããŸããïŒæååãåæåã«åè§£ããåŠçãè¡ãããéã«ïŒcalculationã®äžã«ä¿åããŠãããæååãåãåºãïŒãã®å 容ã«åŸã£ãŠæäœãè¡ãããŸãïŒã"IBM" "1 -" halããšãããšïŒ"IBM"ã®åæåã1æåã¥ã€ã¢ã«ãã¡ãããé ã®Aã®æ¹åã«ã·ãããããŸãïŒ
ããã«ããããæžããã®
ã³ãã³ãäžèЧ
倧æåïŒå°æåã®æ±ã
å²ã蟌ã¿(å®è¡ã®åæ¢)
ã°ããŒãã«å€æ°ãšãŠãŒã¶ã€ã³ã¿ãŒãã§ãŒã¹å®è¡äžã®éåžžå€æ°ã®éãïŒ
ã¹ã³ãŒãæå®ããã°ããŒãã«å€æ°ã¯é¢æ°ã®ãªãããã®ã¿ã¢ã¯ã»ã¹å¯èœïŒ