ã¢ã©ã³ã»ã±ã¤ã®âã¡ãã»ã¼ã¸ã³ã°ã«ããããã°ã©ãã³ã°âã¨ããçæ³ã«åºã¥ãï¼éåæå¦çãªã©ããããè¶³ãã¦ããªããªãããââï¼æ¯è¼çå¿ å®ã«å®è£ ããã1970年代ã®é常ã«å¤ãSmalltalk-72ã«å®éã«è§¦ãã¦ã¿ãã·ãªã¼ãº 第2å¼¾ã§ãï¼ãªãææ°ã®Smalltalkã«ã¤ãã¦ã¯ Pharo ãªã©ã§ã楽ãã¿ãã ããï¼ï¼ã
ä»åã¯è¬è¨èªãSmalltalk-71ãã§æ¸ãããã¹ãã¼ã¹ã¦ã©ã¼ã»ã²ã¼ã ã Smalltalk-72ã«ç§»æ¤ãã¦åãããã¨ãç®æãã¾ããåå(2019å¹´)ãå«ãä»ã®è¨äºã¯ãã¡ãããâSmalltalk-72ã§éã¶OOPã®åç¹ | Advent Calendar 2023 - Qiita
è¡çªå¦ç ?crash ã®æºå
Smalltalk-71çã®ã³ã¼ãã§ ?crash ã¯è¡çªå¤å®ã¨è¡çªæã®å¦çãè¡ã£ã¦ããããã·ã¼ã¸ã£ã§ãã

ããããããè¬ã®ã¾ã¾ã® create ã絡ãã ãæãããªèª¤ããè¦åãããããã®ã®ãããã§ find all ã§å§ã¾ãå¶å¾¡æ§é ããã£ã¦ããã§ãããæç¶ãã¯ãããã以ä¸ã®ãããªçè§£ã§ããã¯ãã§ãã
spaceshipã«å±ããã¤ã³ã¹ã¿ã³ã¹ãé¢é£ãªãã¸ã§ã¯ã群ããæ½åºãããã®åsã«ã¤ãã¦- 弿°
:objectã¨ã®ï¼å°å·ã§ã¯=ã§èªå·±å¤å®ããã¦ããããã«è¦ãã¾ãããå®éã¯ãããã誤æ¤ã§âã«ããï¼éèªå·±å¤å®ã¨ xãy ããããã«ã¤ãã¦ããã¼ãã«å¤æ°closeï¼æ¬æ¥ãªã:closeãï¼ï¼ããæ¥è¿ãã¦ãããã®å¤å®ãè¡ããããããã¹ã¦æºãããªã :sã¨:objectï¼:objã¯ã¿ã¤ããã¹ï¼ã®åæ¹ãççºexploreããã
ããã§ã¯ã?crash ãªã©ã®è¡çªå¦çãæç»ã®å®è£
ã«å
ç«ã¡ãããã§ã¯ã¾ããã¼ã¨ãªã find all ãå®è£
ãã¾ãã
仿¸ãã¦ãã Smalltalk-72 çã§ã¯ãç°¡æã¹ã±ã¸ã¥ã¼ã©ã§ãã spasewarã¢ã¯ã·ã§ã³ãããã®å®å®ç©ºéã§ç§»åãããã¹ã¦ã®ãªãã¸ã§ã¯ãããã®ã¯ã©ã¹å¤æ°ã§ãã objects ã®è¦ç´ ã¨ãã¦æã¤ãã¨ã§ææ¡ãã¦ãã¾ããããã§ããã® spacewarã¢ã¯ã·ã§ã³ã®ã¡ã½ããã¨ã㦠find allï¼ findã¡ã½ããã»ã¯ã·ã§ã³ï¼ãå®è£
ããspacewar find all spaceship do ( ... ) ã®ããã«å¼ã³åºãã®ããããã§ãã

îto spacewar x y : : objects (
(null objects ? ("objects _ obset))
%schedule ? (objects _ :#)
%delete ? (%all ? ("objects _ nil) objects delete :#)
%run ? (repeat (objects do (null each ? () each step)))
%find ? (%all. :"x. "y _ obset.
objects do (each is~ = x ? (y _ each)).
!y))î
ãã¨ãã®ã¿ã¤ãã³ã°ã§ãå¾ã«çããåå 䏿ã®ä¸å
·åã®åé¿ã®ããã« runã»ã¯ã·ã§ã³ã« nil ãã§ãã¯ã¨ãã®æé¤å¦çï¼ null each â () ï¼ãäºé²çã«è¿½å ããã¦ãã ããã^^;
æ°ãã«è¿½å ããã findã¡ã½ããã»ã¯ã·ã§ã³ã¯æ¬¡ã®æä½ãè¡ã£ã¦ãã¾ãã
áfind â (ãâ¦â¦ãfindã¡ãã»ã¼ã¸ã·ã³ãã«ï¼ã»ã¬ã¯ã¿ã¼ï¼ãåãåãã¨áallãâ¦â¦ãç¶ããallãã¼ã¯ã³ããªããããæ¶è²»ã:âx.ãâ¦â¦ãç¶ããã¼ã¯ã³ãxã«è©ä¾¡ãããã®ã¾ã¾ãã§ããây _ obset.ãâ¦â¦ãyã«obsetã®ã¤ã³ã¹ã¿ã³ã¹ãçæãã¦ä»£å ¥ãobjects do (each is? = x â (ãâ¦â¦ãobjectsã®åè¦ç´ ã®ã¯ã©ã¹åï¼each is?ã§å¾ãããï¼ã«ã¤ãã¦ããããxã¨çãããªãy â each).ãâ¦â¦ãyã«éè¤ããªããã¨ã確èªãã¦è¿½å â¦ãç¹°ãè¿ãây)ãâ¦â¦ãyãè¿ã
obset ã®ã¤ã³ã¹ã¿ã³ã¹ãè¿ãã®ã§ãããã«æ¹ã㦠do ( ... ) ãéãã°ãåè¦ç´ ã«ã¤ãã¦å¦çãè¡ããã¨ãã寸æ³ã§ãã
æ¬æ¥ã§ããã°ããã¹ã¦ã® objects ã®è¦ç´ ã¯ã¡ãã»ã¼ã¸ is? ã«å¿çå¯è½ã§ããã¹ããªã®ã§ã¯ããã¾ãããSmalltalk-71çã®ã³ã¼ãã§ç»å ´ãã2ã¤ã® find all ã¯ããããå®å®è¹ã®æ½åºï¼ create spaceship :<夿°å> ï¼ã«ããå©ç¨ããã¦ããªãã®ã¨ãSmalltalk-72 ã® is? ã«ã¯ããã«å¿çããªããªãã¸ã§ã¯ãã«å¯¾ãã¦ãã¨ã©ã¼ã«ã¯ããã« untyped ã¨è¿ãã¦ãã ã«ã©ã¯ãªãä»è¾¼ã¾ãã¦ãã ãã¨ãéã¿ã¦ãæä½éãspaceshipã¯ã©ã¹ã ãã« isã¡ã½ããã»ã¯ã·ã§ã³ã追å ãã¦ããã ãã§å¤§ä¸å¤«ããã§ãã

îto spaceship : pilot thrust steer trigger numtorps locx locy speed direction time ftime llocx llocy ldir lthr (
isnew ? (:pilot. "lthr _ :#thrust. :#steer :#trigger.
"numtorps _ "speed _ 0.
"direction _ "ldir _ 0 + rand * 360.
"locx _ "llocx _ rand between 50 462.
"locy _ "llocy _ rand between 50 462.
"time _ "ftime _ clock)
%step ? (
0 < clock - time + MOVELAG ? (
"time _ clock.
moveship.
display ship))
%is ? (ISIT eval)
)î
î"s1 _ spaceship 'Jimmy' 0 0 false.î
îs1 is~î
î"s2 _ spaceship 'Beth' 0 0 false.î
îspacewar delete all.î
î(spacewar find all spaceship) vec lengthî
îspacewar schedule s1. spacewar schedule s2. spacewar schedule keysens.î
î(spacewar find all spaceship) vec lengthî
î(spacewar find all spaceship) do (each is~ print. sp).î
ï¼ è¡çªæï¼çææï¼å¦çã®å®è£ ã¸ç¶ã ï¼