ã¾ã 2 åæ®ã£ã¦ããä¸ã«ã¹ã«ã¼ããç®æãããã®ã§ããææ³ãæå ¥ã å æ¥ãã²ãã½ãããã«ãä¼ãããæã«ããä¸çªããããã®ã©ãã??ãã¿ãããªè³ªåãããããã¦ãã®ã§ãããå¾å¤©æ§è¨æ¶ä¸å ¨ã®ãããå¾®å¦ãªåçããã§ããã # ã´ã¡ã³ããµã¤ã´ã¡ã³ããµã¤ ãã ãSICP ãªåãçµã¿ã®ä¸ã§ã¯è¾ãã¦è¦ããã¦ããªã½ã¬ã¯çç¡ã ã£ãããã«æãã¾ããã¨ã¯è¨ããSICP ãæã«å ¥ãã¦ãã°ãã㯠2 ç« ã® 8queen ãã¸ãã¾ã§ããç®ãéãäºãã§ãã¦ãã¾ããã§ãã (ãããããã¨ä»äºã§ 8queen ã¬ã©ãã®ãã¿ãå¿ è¦ã§éä¸ãã¹ãé£ã°ãã¦ããã ããã§ãã¯ããã®ããã8queen ã®åé¡ã¨ãç解ä¸è½ã§ããããæ°ãä¸ãã¦ãã£ã«ã¿ããã¦éç´ã¨ããã½ã¬ã¯å¤§ãã«åèã«ãªã£ãè¨æ¶ãã)ãå¦çç³»ã¯ãã®é guile å ¥ãã¦ã¦ Kent Dyvbig ããã®ããã¹ããè³¼å ¥ãã¦ããããã®ã§ããæãåããã ãããã«æãåãããã¼ãã£
ã²ãã½ãããã®æããã¯ã£ã¦ãã³ãã¬ã¼ãã«ãã¦æ¸ãã¦ã¿ã¾ããã ç·´ç¿åé¡ãã¹ããããã¤ã¤ãç§ãç´åå¹´ã§ã§èªã¿çµãã¾ãããã¨ã¦ã楽ããæ¥ã ãéãããã¨ãã§ãã¾ããã SICPãèªãéç¨ã§å¾ããã® ã»é 延è©ä¾¡ã¨stream ã»å¶ç´ããã°ã©ãã³ã°ããã¸ãã¯ããã°ã©ãã³ã°ãamb ã»Emacs(Meadow)ï¼gaucheï¼Quackã®çµã¿åããä¾¿å© ã»åãäºã表ç¾ããã®ã«ãæ½è±¡åº¦ãä¸ããããä¸ãããã§ãããã¨ã ã»æå æ¸ãã¦ããã°Lispã®ã½ã¼ã¹ã追ããããã«ãªã£ããæå æ¸ãã¦ããªãã®ã¯é§ç®ã ã»Lispç¹æã®ãæç¶ããè©ä¾¡ããâSå¼ãã§ããâã¾ãè©ä¾¡ããâSå¼ãã§ãããã¨ããæ°æã¡æªãå帰ã®åå¨ã ã»SICPèªã¿ä»²éã§ã¯ãªããã©ããããªblogã¤ãªãããçµã¿è¾¼ã¿ã¨FPGAã ãã§ãªããããããªä¸çãããäºãããããã¦æããã SICPãèªã¿ã¯ãããã¨ãã®åæ©ãæ¯ãè¿ã ã»é¢æ°åè¨èªã«ã¤ã㦠Lis
ç´åå¹´ãããã¦è¨ç®æ©ããã°ã©ã ã®æ§é ã¨è§£é(SICP)ãèªã¿çµããã¾ããã ï¼éä¸ã§ãç·´ç¿åé¡ãã¹ãããããããã¾ãããã»ã»ã»ï¼ åå¹´ããããã®ã§ã¡ãã£ã¨ã ãæ¯ãè¿ã£ã¦è¦ã¾ãã SICPãèªãéç¨ã§å¾ããã® ã¾ãã¯SICPãèªãéç¨ã§å¾ããã®ãããã£ã¨åæãã¦ã¿ããã æ§æ解æãç解ãèªåã§å®è£ ã§ããããã«ãªã£ã åå¥è§£æãç解ãèªåã§å®è£ ã§ããããã«ãªã£ã ã¹ããªã¼ã ãç解ãã é 延è©ä¾¡ãç解ãã æç¶ãã first class objectã§ããè¨èªã§ã®èãæ¹ãå¦ãã åå¤æã®å°å ¥ã®åæ©ã¨ãã®æå³ãç解ãã æç¶ãã®æ½è±¡åã®å°å ¥ã®åæ©ã¨éç¨ãå¦ãã é«éé¢æ°ã使ã£ããæ¸ããããã«ãªã£ãããã ã¯ãã¼ã¸ã£ãç解ãã Schemeãæ¸ããããã«ãªã£ã å帰å¦çãèªç¶ã«æ¸ããããã«ãªã£ã ãã«ã¹ã¯ã©ããã§ã¤ã³ã¿ããªã¿ãæ¸ããããã«ãªã£ã ã³ã³ãã¤ã©ãèªåã§æ¸ããã¨ãåºæ¥ããã ã¨ã®æ触ãå¾ã
ãã°ãããµãã£ã¦ããã®ã§åçãã¦ä¸æ°ã«èªã¿é²ããã ã¡ãã£ã¨é£ããã¨ããã«ããããã£ãã®ã§ãã¾ã¨ãã¦èªãã æ¹ãå¿ããªãã¦è¯ãã ã¬ã¸ã¹ã¿è¨ç®æ©ã¯ãä»®æ³çãªè©±ãªã®ã ãã©ã³ã³ãã¥ã¼ã¿ã®å¥¥åºãçºãã¦ããããã§ä¸æè°ãªæ°æã¡ã 5.1.2 ã¬ã¸ã¹ã¿è¨ç®æ©ã®è¨è¿°è¨èª ãã¼ã¿ãã¹ã¨å¶å¾¡å¨ã®è©±ããã¼ã¿ãã¹ã®å³ãåã«ã¨ã£ã¦ç´æçã«ã¿ã¥ããè¦å´ããã 5.1.3 ãµãã«ã¼ãã³ ãããã call ã®è©±ãå ±éæç¶ããå ±æãããã¨ããæå³ãªã®ã¯ãã¨ãã¨ç解ã§ãã¦ããããå°å ¥ã®åæ©ãããã¼ãã¦ã§ã¢çã«åããããªè¨ç®å¨ãçµã¿ç«ã¦ãã®ã¯çµæ¸çã§ãªããã£ã¦ã®ã¯æ°é®®ãªåå£ã ã£ãã 5.1.4 å帰ãå®è£ ããããã®ã¹ã¿ãã¯ã®ä½¿ç¨ ã¹ã¿ãã¯ãã¼ã¿æ§é ãå¿ è¦ã ããã¨ãã話ã 5.1.5 å½ä»¤ã®è¦ç´ 5.2.1 è¨ç®æ©ã¢ãã« ã¬ã¸ã¹ã¿è¨ç®æ©ã®ã·ãã¥ã¬ã¼ã¿ã®è©±ãCPUã®åµãæ¹ã¨ããæ¬ã§å¦ãã§ããã®ã¨ãå¤å°ã®ã¢ã»ã³ããªã®ç¥èãããã®
Primitive Procedureã®å®è£ ãããã ä¾ãã° + ã¨ããæç¶ãããããããã¯Schemeã¤ã³ã¿ããªã¿ã primitive ã«æã¤æç¶ãã§ããã Schemeã®ãªãã¸ã§ã¯ã define/lambda/Variableãªã©ãçµã¿åããã ãã§ã¯ä½ããªããã®ã§ããã ãã®ãã㪠Primitive Procedureã¯ã¤ã³ã¿ããªã¿èµ·åæã« Environment ã«è¿½å ãããã environment->defineVariable(new Variable("+"), new Plus());Plus㯠PrimitiveProcedureã¯ã©ã¹ãç¶æ¿ããã¯ã©ã¹ã§ã"+"ã¨ããååã§ã¢ã¯ã»ã¹ã§ããããã«ãªãã¾ãã applyã§ã¯ Primitive Procedureãã©ããã§åå²ããPlus::applyãå¼ã°ãã¾ãã çµæ§é©å½ãªå®è£ ã§ããæ¡ããµãã¨ãèæ ®ãã¦ã¾ããã Ob
æè¿ãåå¥è§£æã¨ãæ§æ解æããã¦ãã¾ãããããã®è©¦è¡é¯èª¤ã®ãµããªã§ãã åæ SICPã®ï¼ç« ã§ã¯Schemeã®ã¤ã³ã¿ããªã¿ãSchemeã§å®è£ ãã¾ãã åå¼·ã®ããã«C++ã§å®è£ ãã¦ã¿ã¾ãã åºæ¬ã¯Scheme->C++ã«ç½®ãæãã¦ãã¾ããï¼ãããªã«ç°¡åãããªããã©ï¼ ç½®ãæã以å¤ã®é¨åãåå¥è§£æã»æ§æ解æã§ãã ãªãæ§æ解æãå¿ è¦ã Schemeã¤ã³ã¿ããªã¿(以å¾ã¤ã³ã¿ããªã¿)ãScheme(以å¾Gauche)ã§å®è£ ããå ´åã¨å ¥åã®æ±ããéãããã§ãã ã¤ã³ã¿ããªã¿ã§ã¯å ¥åãåãä»ãã¾ãããå®éã«ã¯Gaucheãå ¥åãåãåããGaucheãæç¶ã eval ã«ãã®ã¾ã¾æ¸¡ãã¾ãã ãã®éãGaucheãåãåãå ¥åã¯Så¼ã§ãããGaucheã¯ããèªä½Så¼ãSå¼ã¨ãã¦èªèãã¦ããã®ã§ç¹ã«é£ããä½æ¥ã¯å¿ è¦ããã¾ããã ä¸æ¹ãC++ã§å®è£ ããå ´åãå ¥åã¯"(+ a b)"ã®ããã«æååã§ä¸ããã
4ç« ã§ã¯ Scheme ã®ä¸ã« Schemeã¤ã³ã¿ããªã¿ãä½ãéç¨ã§ãããããªãã®ãå¦ãã§ããã¾ãã ãã®ããã«ã被å®è£ è¨èªã¨å®è£ è¨èªãåããªãã¨ã metacircular ã¨ãããããã®ã§ãããèªãã§ããã ãã§ãããããã¦ãã¾ãã å®é4ç« ãèªã¿é²ãã¦ããã¨ãã¨ã¦ãé¢ç½ãã®ã§ãããæã ã§å¼ã£ãããã¨ãããããã¾ãã ã©ããèªãã§ããã ãã§ã¯è§£æ±ºããªãã¢ã¤ã¢ã¤ããã£ã¦ãããã¯è¢«å®è£ è¨èªã¨å®è£ è¨èªã®å¢çã«é¢ããåé¡ã®ããã«æãã¦ãã¾ããã metacircularã ã¨ãã©ãã¾ã§ã被å®è£ è¨èªã®æ©è½ã§ãã©ããããå®è£ è¨èªã®æ©è½ãªã®ãåãããªããªã£ã¦ãã¦ãã¾ãã®ã§ãã ãããªçµç·¯ãããã4ç« ã§æ¸ããã¦ããSchemeã¤ã³ã¿ããªã¿ããã»ã¼ãã®ã¾ã¾ãC++ã§å®è£ ãã¦ã¿ããã¨ããæãã«è³ãã¾ããã æè¿SICPæ¥è¨ãæ´æ°ã§ããªãã£ãã®ã¯ãã®ãããã«æ©ãã§ããããã§ãã ããããã¨å°é£ããã§ããããã試
apply å®è£ ã®è㯠apply 㨠env ã®ãããã ã¨ãããã¨ã«æ°ã¥ãã (define (apply procedure arguments) (cond ((primitive-procedure? procedure) (apply-primitive-procedure procedure arguments)) ((compound-procedure? procedure) (eval-sequence (procedure-body procedure) (extend-environment (procedure-parameters procedure) arguments (procedure-environment procedure)))) (else (error "Unknown procedure type -- APPLY" procedure))))
ãã¯ããã¸ã¼ é¢æ°åè¨èªã®åå¼·ã«SICPãèªãã - (52) 4ç« - è¶ è¨èªçæ½è±¡(213-217ãã¼ã¸) - apply - higepon blog
ä¸ã®ã¨ã³ããªã§ã¯ãããã¾ã§èå¯ãã¦ããã¯ãã¼ã¸ã£ã«ã¤ãã¦ã®ç°¡åãªã¾ã¨ããè¡ãªãã¾ããããã®ã¨ã³ããªã§æå¾ã«æ¸ãããããã¯ã«ãçç®ããªãããããã¾ã§èå¯ãã¦ããã¯ãã¼ã¸ã£ã«ã¤ãã¦ãã³ã¼ããæãã¦æ¤è¨¼ãã¦ã¿ããã¨æãã¾ãã ãã¦ãä¸ã®ã¨ã³ããªã§ã¯ãã¯ãã¼ã¸ã£ã®åºç¤ã¨ãªã£ã¦ããä¸ã¤ã®ä»æ§ãæãã¦ãã¾ãã ãããããããã®ãã¡ã®å¹¾ã¤ããæ¬ ããå ´åã§ããScheme ã§è¨ãã¨ããã®ã¯ãã¼ã¸ã£ã§ã¯ãªãããããã¾ããããæå¹ã«å©ç¨å¯è½ãªæç¶ããæ´»ç¨ãããã¨ã¯å¯è½ã§ããã¨ãç§ã¯èãã¦ãã¾ãã ããã¯ãä¸ã§æããä¸ã¤ã®ä»æ§ãæããªãè¨èªç°å¢ã«æ¼ãã¦ãã¯ãã¼ã¸ã£ã®æ§ãªä»çµã¿ãæ´»ç¨ãããã¨ãå¯è½ããã¨ããè¦ç¹ã«ç½®ãæãããã¨ãã§ãã¾ããä¾ãã°ãEmacs Lisp ã Java ãªã©ã§ã¯ãã¼ã¸ã£ã®æ§ãªã³ã¼ããæ¸ãããå¦ããã¨ãããã¨ã§ããã ;; Java ã«ãã¯ãã¼ã¸ã£ãå°å ¥å¯è½ã« (?) ã¨ãã£ãåãããã
ããã¾ã§èå¯ãã¦ããã¯ãã¼ã¸ã£ã®ä»¶ã§ãããã¾ã ã¾ã é ã®ä¸ã§ã¯çºæ£ãã¦ããã®ã§ããã©ãä¸æ¦ãç°¡åã«ã¾ã¨ãã¦ããããã¨æãã¾ãã ãã æ¸ãæ£ãããã¦ããã ãã§ã¯æå³ãªã (ãããæå³ã¯ããã¨æã£ã¦ããã§ããã©ãèªå·±çç¾ã ã) ã§ããããã Rui ãããshiro ããã®ã³ã¡ã³ãã«å©ãããã¦ãä»ã§ã¯ã æç¶ãããã¡ã¼ã¹ãã¯ã©ã¹ãªãã¸ã§ã¯ãã¨ãã¦æ±ããã éçã¹ã³ã¼ããæã¤ã ç¡éã®ã¨ã¯ã¹ãã³ããä¿è¨¼ããã¦ããã ã®ä¸ã¤ã®åºç¤ãæããã¨ã§ãã¯ãã¼ã¸ã£ãå®ç¾ããã¦ããã¨èããã«è³ãã¾ããã Scheme 以å¤ã§ã¯ã©ããå¤ãã¾ããããã㨠Scheme ã«æ¼ãã¦ã¯ãä¸ã®ä»æ§ã«ç«èããå½¢ã§ã¯ãã¼ã¸ã£ãå®ç¾ããã¦ããã¨èãã¦å·®ãæ¯ããªãã¨æã£ã¦ãã¾ãã ãã ãè¨èªè¨è¨ã®æ¨ç§»ã¨ãã¦ã¯ãshiro ããããé ããã³ã¡ã³ãã§ç¤ºåããã¦ããæ§ã«ãåçã¹ã³ã¼ãã«æ¼ããç°å¢åé¡ (FUNARG problem) ã
SICP ã® 3.5 ç¯ãã¹ããªã¼ã ãã«åºã¦ããã¹ããªã¼ã ã Perl ã§å®è£ ãã¦ã¿ãã æå¤ã¨ç°¡åã«æ¸ããã SICP ã®ãè²·ãä¸ãã¯ãã¢ãã¾ã³ã® ãè¨ç®æ©ããã°ã©ã ã®æ§é ã¨è§£éã ã®ãã¼ã¸ããã©ãããã æ¦è¦ ã¹ããªã¼ã ã使ãã¨ã ããã°ã©ã ã«ç¶æ å¤åãæã¡è¾¼ããã¨ãªãã ç©äºã®å¤åãæ±ããã¨ãã§ãããããã å¿ è¦ãªæã«å¿ è¦ãªã ãã®è¨ç®ãããã®ã«ã å®éã«è¨ç®ãããé¨åã¨ã ãã®è¨ç®ãããå¤ã使ãé¨åãå®å ¨ã«åé¢ããå½¢ã§ã³ã¼ãã£ã³ã°ã§ããã®ã§ã é常ã«å¼·åãªãã¯ããã¯ã¨ãªãå¾ãã ã¹ããªã¼ã ã¯é 延ãªã¹ãã¨ãã¦å®è£ ããã®ã§ã ã¾ãé 延è©ä¾¡ãå®ç¾ããããã®æç¶ã delay 㨠force ããããããä½ãã ãã®ä¸ã«ã¹ããªã¼ã ãæ§æããããã¤ãã®é¢æ°ãæ¸ãã¦ã¿ãã å®è£ 以ä¸ã«ã ããã¹ãã«åºã¦ãã Scheme ã§ã®ã³ã¼ãã¨ã ããã«å¯¾å¿ãã Perl ã®ã³ã¼ããé çªã«è¼ãã¾ãã ã¹ã
4ç« ãå èªã¿ã¨ããã¦ããããã«ãå ¨ç¶3ç« ãé²ãã§ããªãã®ã§åçä¸ã ä»æ¥ã¯åé¡3.50ã解ããã¾ã§å¯ãªãï¼ã¨æ±ºãããããã¨ããã«è§£ããã åé¡3.50 cons-streamããstream-carãã¾ã å®ç¾©ãã¦ããªãã¦ããã¹ããã§ããªãã®ã§ cons/carã§å®è£ ãã¦ã¿ãã (define (hige-map proc . argstreams) (if (null? (car argstreams)) '() (cons (apply proc (map car argstreams)) (apply hige-map (cons proc (map cdr argstreams)))))) (display (hige-map + (list 1 2 3) (list 4 5 6)))mapã« car ã cdr ã渡ãã¨ãããæãã¤ãã®ã«æéã®ããã£ãé¨åã ã£ãã ã¨ãããã¨ã§çã
å¾ ã¡ã«å¾ ã£ã¦ãããã¸ã¿ã«åè·¯ã®ã·ãã¥ã¬ã¼ã·ã§ã³ã ãªã©ãä½ã ãã¯ã¯ã¯ã¯ãã¦ãããï¼ åé¡3.24-27 ç¥ã åé¡3.28 and ã¨ã»ã¼åãã ä»ã®æ®µéã§ã¯ add-action ã®å®è£ ãè¦ããªãã®ã§ or-action-procedure ã2åå¼ã°ãã¦ãããããªãããããªããã¨å¿é ã ã¨æã£ããã©ããèããã°å ¥åã¯åæã«å±ããã¨ã¯ããããªãã®ã§ããã§æ£ããã (define (or-gate a1 a2 output) (define (or-action-procedure) (let ((new-value (logical-or (get-signal a1) (get-signal a2)))) (after-delay or-gate-delay (lambda () (set-signal! output new-value))))) (add-action! a1 or
å®ç¨ã£ã½ãã³ã¼ããæ¸ããªãã¨ä¸ã ä¸éããªãã¨æãã®ã§ç¡çããæ¸ãã¦ã¿ã¾ããã å¼æ°ã§åãåã£ããã¡ã¤ã«ãéãã¦ããã¡ã¤ã«å ãç½®æããã ãsedã¨ãPerlãªãããã«æ¸ããããã¨ãããã£ã¨æ±ç¨åããã¹ã¯ãªãããæ¸ããã»ããè¯ããã¨ããã®ã¯åããã®ã§ããã¾ãã¯ç·´ç¿ã¨ãããã¨ã§ã ã¾ã å®æãã¦ããªãã¦ãç¾å¨åãã£ã¦ããåé¡ç¹ã¯ å ¥åã¨åºåãã¡ã¤ã«ãåãã«ããã¨ãããããªã çµææååã""ã§å²ã¾ãã¦ãã¾ã æ¹è¡ã³ã¼ãããªããªã£ã¦ãã¾ã ãªã©ãªã©ã æ°é·ã«ç´ãã¦ãããã #!/usr/bin/env gosh (use file.util) (define (main args) (define (replace-text file) (let ((lines (file->string-list file)) (result "")) (for-each (lambda (line) (set
Ruiããããã³ã¡ã³ããé ãã¾ããã Schemeã«æ £ãã人ãæ¸ãã¨ãããªã«ãããããªã®ãããããã¨ããããã¾ãã ãã®ããã«ã³ã¼ããè¦ãã¦ããã ããã¨ã¯ã¨ã¦ãåå¼·ã«ãªãã¾ãã sum 㯠(apply + list) ã¨æ¸ãã¾ãããGaucheã ã¨port-for-eachã¨ãã便å©ãªé«éæç¶ãããã£ã¦ããããã¤ããã¨å ¨ä½ã¯æ¬¡ã®ããã«ãªãã¾ãã(ä¸æãã¡ã¤ã«ã使ããªãã§æ¸ããããcall-with-input-fileã®ä»£ããã«call-with-input-stringã使ãã¾ããã) ãããã«ãsum 㯠(apply + list)ã§ãããä½ã§æ°ã¥ããªãã£ããã ããã (port-for-each (lambda (list) (print (apply + list))) (call-with-input-string â(1 2 3) (4 5 6)â (lambda (in)
#scheme-jp(wideç³» IRCãã£ã³ãã«)ã§ã®ãã¿ãµãã§ããã¡ã¤ã«ã®èªã¿è¾¼ã¿ãå¦ãã§ã¿ã¾ããã Scheme㯠port ãä»ãã¦å ¥åºåããããã§ãã é¢ç½ãã®ã read ã®æ»ãå¤ãSå¼ã ã¨ãããã¨ã§ããï¼ããã¯ã²ãã£ã¡ããããæãã¦ãããã¾ããã) ãªã®ã§ãã¡ã¤ã«ã®ä¸èº«ãSå¼ã ã¨ããããã¨é¢ç½ããã¨ãåºæ¥ãããªã®ã§ä½ã£ã¦ã¿ã¾ããã ã¾ã data.scm ãç¨æãã¾ãã (list 1 2 3 4 5 6 7 8 9) (list 1 1 1 1 1 1 1 1 1) 次ã¯ããã°ã©ã æ¬ä½ã§ãã data.scmãèªã¿è¾¼ãã§ãread ãã Så¼ã®listã®è¦ç´ ã sum ãã¦è¡¨ç¤ºãã¾ãã (define (sum l) (if (null? l) 0 (+ (car l) (sum (cdr l))))) (call-with-input-file "data.scm" (l
åé¡3.22 ãï¼æç¶ãã§åºæ¥ãã®?ã¨æã£ã¦ä¸ç¬ã§ãçã£ãèªåãæ¥ãã¾ãã Scheme楽ãããã楽ãããããã (define (make-queue) (let ((front-ptr '()) (rear-ptr '())) ;; public interface (define (empty-queue?) (null? front-ptr)) (define (front-queue) (if (empty-queue?) (error "empty queue") (car front-ptr))) (define (insert-queue! item) (let ((new-pair (cons item '()))) (cond ((empty-queue?) (set! front-ptr new-pair) (set! rear-ptr new-pair)) (els
ãªãªã¼ã¹ãé害æ å ±ãªã©ã®ãµã¼ãã¹ã®ãç¥ãã
ææ°ã®äººæ°ã¨ã³ããªã¼ã®é ä¿¡
å¦çãå®è¡ä¸ã§ã
j次ã®ããã¯ãã¼ã¯
kåã®ããã¯ãã¼ã¯
lãã¨ã§èªã
eã³ã¡ã³ãä¸è¦§ãéã
oãã¼ã¸ãéã
{{#tags}}- {{label}}
{{/tags}}