ããªãåã«ã䞊åããã°ã©ãã³ã°ããŒã«ã«é¢ããæ
å ±ãåéããŠããšã¬ã¬ã³ããªïŒã€ãŸããæèŠã衚çŸããã®ãé£ããïŒèšèªOz
http://www.mozart-oz.orgã«åºäŒããŸããã ãã®èšèªã¯ãHabraã³ãã¥ããã£ã«å°å
¥ããã«å€ããããã«æããŸããã ãããŠããããããæéãšçç±ããããŸããã
Ozã¯ãã«ããã©ãã€ã ããã°ã©ãã³ã°èšèªã§ãã èšèªã®åºæ¬çãªæœè±¡åã®ã»ããã¯çãããããšãã°ãæ
å ±ãéä¿¡ããéä¿¡ããã·ãŒãžã£ãäœæããŠããã®å©ããåããŠããŒã¿ãåä¿¡ããããšãã§ããŸãã ãããŠããã£ãããªãã§ïŒ
send(socket; buffer; flag) = (if (flag == RECV) (recv(socket; buffer)) or (realsend(socket; buffer)))
ã
ããŒã¿ã®éä¿¡ãšåä¿¡ã¯ãOzä»®æ³ãã·ã³ã®åãæäœã·ãŒã±ã³ã¹ã«ãã£ãŠå®è¡ãããã®ã¯ãŸãã«äºå®ã§ãã åœç¶ãããã¯ãããŒã¿ããã³äžŠåããã»ã¹ãæäœããããã®ç¹å¥ãªæœè±¡åã«ãã£ãŠå®çŸãããŸãã ç§ã®æèŠã§ã¯ããããã¯Ozã®ç¹åŸŽãéåžžã«ããæããããšãã§ããã®ã§ããã®ããã¹ãã¯ãããã®æœè±¡åã®èª¬æã«å°å¿µããŠããŸãã ãã¡ããããªãºã¯ä»¥äžã«è¿°ã¹ããã®ä»¥äžã®ãã®ã§ãããç§ã«ã¯ãtoãªã»ã³ãã®ç§å¯ã¯ãã®èšèªãåããŠç¥ãããããæ¥œããã®ã«é©ããçŽ æã§ããããã§ãã
0.ã¯ããã«
Port
ã³ã³ã¹ãã©ã¯ããå®è£
ããããã°ã©ã ã®ããã¹ãããå§ããããšãã§ããŸããããã¯ãsendããã·ãŒãžã£ã䜿çšããŠããŒã¿ãéä¿¡ããããšãã«éä¿¡ãããŸãã
Port
ã®äœ¿çšäŸã¯ãåãããã°ã©ã ã«å«ãŸããŠããŸãã ãœãŒã¹ã³ãŒãïŒãã®ããã¹ãã®åºæåïŒïŒ
ããŒãã宣èšãã
ããŒã«ã«PortTag NewPort IsPort
PortTag = {NewName}
楜ãã{NewPort FS}
ããŒã«ã«SC
C = {NewCell S}
FS = !! S
{NewChunkããŒãïŒPortTagïŒCïŒ}
çµãã
çµãã
楜ãã{IsPortïŒP}
{Chunk.hasFeature P PortTag}
çµãã
proc {PMãéä¿¡}
å°å
ã®Msãã
{Exchange P.PortTag Ms Mr}
Ms = M | !! Mr
çµãã
çµãã
ããŒã=ããŒã
ïŒ
æ°èŠïŒNewPort
isïŒIsPort
éä¿¡ïŒéä¿¡
ïŒ
çµãã
NewQueueServerã宣èšãã
fun {NewQueueServer}
äžããããã®ãããŒãã®ããŒã«ã«
GivePort = {Port.new Given}
TakePort = {Port.new Taken}
proc {Jos Xs Ys}
ããŒã«ã«Xr Yr XY in
Xs = X | Xr
Ys = Y | 幎
X = Y
{Xr Yrã«åå }
çµãã
çµãã
ã¹ã¬ãã{Join Given Taken}çµäº
åŸ
ã¡è¡å
ïŒ
putïŒproc {$ X} {Port.send GivePort X} end
getïŒproc {$ X} {Port.send TakePort X} end
ïŒ
çµãã
çµãã
Qã宣èšãã
ã¹ã¬ããQ = {NewQueueServer}çµäº
{Q.put 1}
{{Q.get $}ãåç
§}
{{Q.get $}ãåç
§}
{Q.put 2}
ã芧ã®ãšããããã£ããã¯ãããŸããã äž¡æ¹ã®queueserver颿°-putããã³get-ã¯ãååã«å¯Ÿå¿ããã»ãã³ãã£ã¯ã¹ãæã€
Send
ããã·ãŒãžã£ã䜿çšããŠå®è£
ãããŸãã ãã®ã³ãŒãã¯çããªãå¯èœæ§ããããŸã-Ozã§ã¯æ§æã®ç ç³ã§ååã§ãããå¿
èŠãªèª¬æã®éãæžããããã«äžèšã§ã¯äœ¿çšãããŠããŸããã
ãã®ã³ãŒããã©ã®ããã«æ©èœããããçè§£ããã«ã¯ãïŒ1ïŒOzããã°ã©ã å®è¡ã®ã¢ãã«ãæ±ãå¿
èŠããããŸãã倿°ãã¹ã¬ãããã¢ã©ã€ã¡ã³ãæŒç®åïŒ
=
ïŒ; ïŒ2ïŒæé ã ïŒ3ïŒã»ã«ïŒã»ã«ïŒãã¡ã¢ãªã®é åïŒãã£ã³ã¯ïŒããã³å°æ¥ïŒæªæ¥ïŒã
1.倿°ãã¹ã¬ãããæŒç®å=
åè¿°ã®ãšãããOzã¯ãã«ããã©ãã€ã èšèªã§ãã ãŠã£ãããã£ã¢ã§ã¯ãæ©èœçãè«ççãåœä»€çããªããžã§ã¯ãæåã忣ã䞊åïŒäžŠè¡ãšããæå³ã§ïŒãããã³å¶éä»ãããã°ã©ãã³ã°çšã®èšèªãšããŠèšè¿°ãããŠããŸãã ããããããã¯å¥ã®ãã©ãã€ã -ããŒã¿ãããŒã䜿çšããããã°ã©ãã³ã°ïŒããŒã¿ãããŒããã°ã©ãã³ã°ïŒã«åºã¥ããŠããŸãã Ozã¯ãããŒã¿ã¹ããªãŒã ã䜿çšããã³ã³ãã¥ãŒãã£ã³ã°ã®å
ã®ïŒCPUã¢ãŒããã¯ãã£ã§äœ¿çšãããïŒæŠå¿µã«éåžžã«è¿ããã®ãã©ãã€ã ãå®è£
ããæ¬¡ã®ããã«å®è¡ããŸãã
1.1ã Ozã§ã®ãã¹ãŠã®èšç®ã¯ãã¹ãã¢ã«å«ãŸããããŒã¿ã䜿çšããŠè¡ãããŸãã åæã«ãã¹ãã¬ãŒãžã¯éåžžã«æœè±¡çã§ããïŒå
éšã®ä»çµã¿ã¯ããã°ã©ããŒããé ãããŠãããã¹ãã¢å
ã®æ
å ±ã¯ç¹å®ã®ã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠã®ã¿å¶åŸ¡ã§ããŸãïŒã忣ãããŠããŸãïŒOzã³ã³ãã¥ãŒãã£ã³ã°ã®ãã¹ãŠã®åå è
ã¯ããããã¯ãŒã¯äžã«æ£åšãããã®ãå«ããŠã¹ãã¢ã§äœæ¥ã§ããŸãïŒ ã¹ãã¢ã¯ã3ã€ã®ç°ãªãæ¹æ³ã§æ
å ±ãä¿åã§ããŸãã ïŒ1ïŒèªç±ãŸãã¯é¢é£ããè«ç倿°ã®åœ¢åŒã ïŒ2ïŒã¡ã¢ãªã®ã»ã«ã§ã¯ãªãã倿°ãžã®ååä»ãå¯å€ãã€ã³ã¿ã§ããå¯èœæ§ãé«ãã»ã«ã®åœ¢åŒã ïŒ3ïŒOzã§ã¯ããŒãžã£ãšåŒã°ããããã·ãŒãžã£ã®åœ¢åŒïŒåœç¶ããããã¯1次ãªããžã§ã¯ãã§ããã€ãŸããããã°ã©ã ã§æç€ºçã«æäœã§ããŸãïŒã
1.2ã èšç®ã¯ãã¹ã¬ãããå®è¡ããããšãã«è¡ãããŸãã åæã«ãOzã®ã¹ã¬ããã¯ããŒã¿ãããŒã§ãã ã€ãŸããç¹å®ã®äžé£ã®ã¹ããŒãã¡ã³ãïŒã¹ããŒãã¡ã³ãïŒã次ã
ã«å®è¡ãããŸãïŒãã¹ãŠåœä»€åèšèªã®ããã«ïŒãã1ã€ã®èŠåããããŸããæŒç®åã¯ã䜿çšããããã¹ãŠã®å€æ°ãæ¥ç¶ãããŠããå Žåã«ã®ã¿å®è¡ãããŸãã ãã以å€ã®å Žåãã¹ã¬ããã¯äžæåæ¢ããå¿
èŠãªå€æ°ããã€ã³ãããç¬éãåŸ
ã¡ãŸãã å®éã䜿çšãããããŒã¿ã®æºåãæŽã£ããšãã«ç¹å®ã®æŒç®åãå®è¡ããããšããæ¥ä»ãããŒèšç®ã®äž»ãªæ¹æ³ã§ãã
Ozã§ã®ã¹ã¬ããã®äœæã¯ã
thread ... end
æ§æã䜿çšããŠéåžžã«ç°¡åã§ãã ããã¯
fork()
ã¹ã¿ã€ã«ã§äœæãããŸãã ã€ãŸããçæãããã¹ã¬ããã¯ã
thread ... end
æäœã®æç¹ã§èŠªã¹ã¬ããã䜿çšã§ãããã¹ãŠã®å€æ°ïŒã€ãŸãã倿°ïŒã«ã¢ã¯ã»ã¹ã§ããŸãã
1.3ã Ozã®å€æ°ã¯è«ççã§ãã
Ozã¹ã¿ã€ã«ã®ããŒã«å€ã¯ãå¥ã®å€æ°ãšåäžèŠã§ãã1åãã€ã³ãããã倿°ã§ãã
äžè¬ã«ããã®å®çŸ©ïŒããã¥ã¢ã«ããã®ç¿»èš³ïŒã¯Ozã®å€æ°ã«ã€ããŠã»ãšãã©è¿°ã¹ãŠããŸããã 圌ãã¯ããªããããªãèªèº«ã§ããå°ãã§ããããã«ããŸãã ãŸããéåžžã®c / javascript / haskell倿°ãšã¯å€§ããç°ãªããŸãã倿°ã¯ãååä»ãã¡ã¢ãªã»ã«ïŒc / jsïŒãŸãã¯ååä»ãå€ïŒhaskellïŒã§ãã ããããOzã®å€æ°ã®æè¯ã®ã¢ã€ãã¢ã«ã¯ãããã€ãã®æè¡çãªè©³çްã®èª¬æãäžããããŸãã
1.3.1ã Ozã®å€æ°ã®ã©ã€ããã¹ã¯ã
local ... in ... end
ãŸãã¯
declare ... in ...
æ§æã䜿çšããŠå®£èšãããŠãããšããäºå®ããå§ãŸããŸãã ãããã®æ§é ã®éãã¯ã
local ...
ã§ã¯
in ... end
å
ã®æäœã§ã®ã¿äœ¿çšãã倿°ã宣èšã§ããdeclareã§å®£èšããã倿°ã¯ã察å¿ãã
in
åŸã®ãã¹ãŠã®å Žæã§äœ¿çšã§ããããšã§ãã åœç¶ã
declare
ã¯ãã¢ãžã¥ãŒã«ã®ã°ããŒãã«ã¹ã³ãŒãã§ã®ã¿å€æ°ãå®çŸ©ããããã«äœ¿çšã§ããŸãã
倿°ã®å®£èšã¯ãã¹ãã¢å
ã«æ°ããããŒããäœæããã宣èšããã倿°ãåç
§ããããšã§ãã ãŸãã
unknown
å€ãããŒãã«æžã蟌ãŸãã倿°ãããŒã¿ã«é¢é£ä»ããããŠããªãããšã瀺ãããŸãã ã¹ã¬ãããããŒã¿ã«å¯ŸããŠãã®ãããªå€æ°ãåŒã³åºããšã察å¿ããããŒããããŒã¿ã«é¢é£ä»ãããããŸã§ãã¹ã¬ããã¯äžæãããŸãã äŸïŒã³ãŒã1ïŒïŒ
ããŒã«ã«X
ã¹ã¬ãã{Browse 2 * X} end
X = 5
çµãã
Browse
ã¯ãåŒæ°ãåºåããæšæºã®Ozã«ãŒãã³ã®1ã€ã§ãã ãã®äŸã§
X
宣èšããããšã倿°ãäœæãããã¹ãã¢å
ã®å¯Ÿå¿ããæ°ããããŒããäœæãããŸãã
Browse
ã
X
ãä»ããŠãã®ããŒãã«ã¢ã¯ã»ã¹ãããšã察å¿ãã
X
ããŒãã«å€ã衚瀺ããããŸã§ã察å¿ããã¹ã¬ããã®å®è¡ãäžæãããŸãïŒããŒãã®å€ãšããŒããžã®å€æ°ã®ãã€ã³ãã®äž¡æ¹ãããã§å€æŽã§ããŸãïŒã
1.3.2ã ããŒãã®å€ã¯ãçµ±åïŒçµ±åïŒãŸãã¯ïŒå¥ã®ååïŒå¢ååã«ãŠã³ãïŒå¢åãã«ïŒã®ããã»ã¹ã«é
眮ãããŸãã åŒã®ãã¢ã®çµ±äžã¯ã
=
ïŒçå·æŒç®åïŒæŒç®åã«ãã£ãŠè¡ãããŸãã åãããã»ã¹ã§ãããŒããžã®å€æ°ã®ãã€ã³ãã倿Žã§ããŸãã ã³ãŒã
E1 = E2
ã®åŒã®ãã¢ïŒåŒã®å ŽåïŒã®çµ±åã¢ã«ãŽãªãºã ã¯ããã®ããã«æ©èœããŸãïŒE1ããã³E2ã®å¯èœæ§ã®ãããªãã·ã§ã³ã®åæã䌎ãååž°çæé ïŒã
U.1ã èšç®E1ããã³E2ã®çµæã¯ãåååOzã®å€ã§ãïŒååã¯äžå¯åãªåã§ãïŒæŽæ°ãæµ®åå°æ°ç¹æ°ããªãã©ã«-æååãªã©ïŒã ãã®å Žåããããã®å€ãçããå ŽåãæŒç®åãå®è¡ãããäžçåŒãæºãããããšãäŸå€ãã¹ããŒãããŸãïŒOzã®äŸå€ã¯ããªãæšæºçã§ããã
try ... catch ... finally ... end
;
finally
-optionalïŒã䜿çšããŠåŠçãããŸãã
U.2ã
E1
ã®èšç®çµæã¯å€æ°ã§ããã
E2
ã®èšç®çµæã¯äœããã®ã¿ã€ãã®å€ã§ãïŒãã®ç¶æ³ãšå¯Ÿç§°çãªã®ã¯ã
E1
èšç®ãäœããã®ã¿ã€ãã®å€ã«ãªãã
E2
ã倿°ã«ãªãããšã§ãïŒã 次ã®ããã«ãªããŸãã
X =ïŒY + ZïŒ* 5
ãã®å Žåããã¹ãŠã次ã®ããã«æ©èœããŸãã
U.2.1ã
E1
ã«ãã£ãŠèšå®ããã倿°ã¯ãäžæãªããŒããåç
§ããŠããŸãã ãã®å Žåã
E2
èšç®ã«ãã£ãŠåŸãããå€ããã®ããŒãã«æžã蟌ãŸãããã®çµæã
E2
倿°ãæ¥ç¶ãããŸãã
U.2.2ã
E1
倿°ããã§ã«ã¢ãããã¯å€ã«é¢é£ä»ããããŠããå Žåã察å¿ããããŒãå
ã®å€ã
E2
å€ãšæ¯èŒãããã¿ã€ããŸãã¯å€èªäœãäžèŽããªãå ŽåãäŸå€ãã¹ããŒãããŸãã ãã以å€ã®å Žåãã¹ããŒãã¡ã³ãã¯çµäºããŸãã
code-1ãã倿°
X
ããã€ã³ãããã®ã¯ãã®ã«ãŒã«ã§ãã å€ïŒ5ïŒã«é¢é£ä»ããããåŸãåŒã³åºãããããã·ãŒãžã£
Browse
å
ã§ãã®ãã€ã³ãã£ã³ã°ãåŸ
æ©ããæŒç®åãå®è¡ãããŸãã ãããŠãã³ãŒã-1ãæ¬¡ã®ããã«ãªã£ãå Žåãçµæã¯ãŸã£ããåãã«ãªãããšã¯æããã§ãã
ããŒã«ã«X
ã¹ã¬ãã{Browse 2 * X} end
5 = X
çµãã
U.2ã§ã E1-倿°ãè€ååã®å€ã«é¢é£ä»ããããŠããå Žåãå¥ã®ãªãã·ã§ã³ãå¯èœã§ãããåŸã§U.4段èœã§æ€èšãããŸã...
U.3ã
E1
ãš
E2
äž¡æ¹ãäœããã®å€æ°ãå®çŸ©ããŸãã å¯èœãªãªãã·ã§ã³ããããŸãã
U.3.1ã 倿°ã®1ã€ããã€ã³ããããŠããªãããäž¡æ¹ã®å€æ°ããã€ã³ããããŠããªãããšãããããŸãïŒã€ãŸããå€ãäžæãªããŒããåç
§ããŠããŸãïŒã ãã®å Žåãé¢ä¿ã®ãªã倿°ã®1ã€ã®ããŒãããŸãã¯æ¥ç¶ãããŠããªã倿°ã®äžæãªããŒãã¯ç Žæ£ãããŸãã æ¬¡ã«ããã®ããŒãã以åã«åç
§ãã倿°ã倿Žãããä»ã®å€æ°ãšåãããŒããåç
§ãå§ããŸãã
code-2ãå®è¡ããããšã«ããããªãããã§æ¢ã«æç¢ºã«ãªã£ãŠããã¯ãã§ãã
ããŒã«ã«XYZ
ã¹ã¬ãã{Browse X + Y + Z} end
X = Y
ïŒ
Z = X + YX = 10
X + Y = Z
çµãã
Ozã®å€ã¯40ã«ãªããŸãããŸããã³ã¡ã³ããåé€ãããšïŒ
%
å§ãŸãïŒOzããããªãŒãºãããŸãã
U.3.2ã äž¡æ¹ã®å€æ°ã¯ãå€ãæžã蟌ãŸããããŒããåç
§ããŸãã ãã®å Žåãåäœã¯æ¬¡ã®ãšããã§ãã ããããç°ãªãã¿ã€ãã®å€ã§ããå ŽåããŸãã¯åãã¿ã€ãã®ç°ãªãã¢ãããã¯å€ã§ããå ŽåãäŸå€ãã¹ããŒãããŸãã ããããã¢ãããã¯ã¿ã€ãã®çããå€ã§ããå Žåããªãã¬ãŒã¿ãŒã¯å®è¡ãå®äºããŸãã ãã ããããŒãã¯è€ååã®å€ãæ ŒçŽããããšãã§ããŸãã
Ozã®äž»èŠãªè€ååã¯ã¬ã³ãŒãã§ãã æ§æçã«ã¯ããšã³ããªã¯æ¬¡ã®ããã«ãªããŸãã
ã©ãã«ïŒfeature0ïŒfield0 feature2ïŒfield2 ... featureNïŒfieldNïŒ
ãããããäžèšã¯éããããã¬ã³ãŒãã§ããããããã£ãŒã«ãïŒãã£ãŒã«ãïŒã®æ°ã¯åºå®ãããŠãããã¬ã³ãŒããéããŠããŸãã ã¬ã³ãŒããã£ãŒã«ãã«ã¯ã察å¿ããããããã£ïŒæ©èœïŒã®ååã§ãããããä»ããŠã¢ã¯ã»ã¹ã§ããŸãã æ§é å
ã®ãã£ãŒã«ãã®æ°ã¯ãã¢ãªãã£ãšåŒã°ããŸãã ããå
·äœçãªäŸïŒ
U = habrauserïŒããã¯ããŒã ïŒ 'ãã«ãã€ã'ã«ã«ãïŒ10匷床ïŒ10ïŒ
K = U.karma
埮åŠïŒã¬ã³ãŒãã¿ã€ãã®å€èªäœã®ãã£ãŒã«ãã¯Oz倿°ã§ãã äžèšã®äŸã§ã¯ãã¬ã³ãŒãã¿ã€ããšhabrauserã©ãã«ã䜿çšããŠå€ãäœæãããšãèšè¿°ãããã¢ã«ãŽãªãºã ã«åŸã£ãŠã¢ãããã¯ã¿ã€ãå€ã§çµ±åããã3ã€ã®å€æ°ãäœæãããŸãïŒ 'mikhanoid'ã10ããã³10ããã ãããã®ãããªå€ã®ä»£ããã«ã倿°ãã£ãŒã«ããä»»æã®åŒã§çµ±åã§ããŸãã ãã®æç¹ã§ããã®ã³ãŒããã©ã®ããã«æ©èœããããæç¢ºã«ãªãã¯ãã§ãã
å°å
ã®UKS
ïŒ*ïŒU = habrauserïŒããã¯ããŒã ïŒ 'ãã«ãã€ã'ã«ã«ãïŒK匷床ïŒSïŒ
K = s
10 = K
çµãã
è¡ïŒ*ïŒã§ã¯ãéãã€ã³ã倿°
U
U.2.1ã«ãŒã«ã«åŸã£ãŠã¬ã³ãŒãã¿ã€ãå€
U
çµ±åãããŠããŸãã
Ozã¬ã³ãŒãã«ã¯éèŠãªåœ¹å²ããããŸã-ãããã¯ã¹ãã¢ãæåã°ã©ãæ§é ã«å€æããŸãïŒããŒããã¿ã€ãã¬ã³ãŒãã®å€ãæ ŒçŽããå Žåããã®å€æ°ãã£ãŒã«ãã¯ä»ã®ããŒããæããŸãã ãŸããèšèŒãããŠããã¢ã«ãŽãªãºã ã¯ãU.4ãã®ãããã§ãã°ã©ãããŒãžã¢ã«ãŽãªãºã ãšèŠãªãããšãã§ããŸãã
U.4ã ããã§ã¯ãïŒ1ïŒåŒ
E1
ãš
E2
äž¡æ¹ãã¬ã³ãŒãã¿ã€ãã®å€ã§ãããïŒ2ïŒã¬ã³ãŒããæ ŒçŽãããããŒããåç
§ãã倿°ãå®çŸ©ãããïŒ3ïŒ
E1
ã
E2
ãããããã¬ã³ãŒãã¿ã€ãã®å€ãèšå®ããã another-ã¬ã³ãŒããä¿åãããŠããããŒãã«é¢é£ä»ãããã倿°ãèšå®ããŸãã ãããã®ãã¹ãŠã®å Žåããšã³ããªã«ïŒaïŒç°ãªãã©ãã«ããŸãã¯ïŒbïŒç°ãªãã¢ãªãã£ããŸãã¯Â©ç°ãªãããããã£ã»ãããããå ŽåãäŸå€ãã¹ããŒãããŸãã ã¬ã³ãŒãããã€ã³ãïŒaïŒãïŒbïŒãããã³Â©ã§äžèŽããå Žåãç°ãªãã¬ã³ãŒãã®å€æ°ã®ãã¢ã¯åãããããã£åã§çµ±åãããŸãã
ãã®æç¹ã§ããã®ãããªã³ãŒãã®äœæ¥ã®çµæãšããŠãçç±ããã§ã«æç¢ºã«ãªã£ãŠããã¯ãã§ãã
ããŒã«ã«WXYZ
W = XZ = Y
fïŒaïŒ10 bïŒXïŒ= fïŒaïŒY bïŒ20ïŒ
{W + Zãåç
§}
çµãã
å€30ã衚瀺ãããŸãã
å¥ã®è峿·±ãäŸã¯ãã®ã³ãŒãã§ãïŒ
ããŒã«ã«Z
Z = fïŒZ 20ïŒ
{Zãåç
§}
çµãã
ããã§ã
f
ã¯ããã£ãŒã«ãã®ããããã£ã1ãããã®ã¢ãªãã£ãŸã§ã®æŽæ°åãèªåçã«ååŸããã¬ã³ãŒãã®å€åœ¢ã§ãã Ozã§ã¯ããã®ãããªã¬ã³ãŒãã¯ã¿ãã«ãšåŒã°ããè«çããã°ã©ãã³ã°ã®è€åèªã®é¡äŒŒç©ã§ãã äžèšã®ã³ãŒãã§ã¯ã次ã®ããšãèµ·ãããŸãã ïŒ1ïŒã¿ã€ãrecordã®å€ã¯2ã€ã®ãã£ãŒã«ãã§äœæãããŸããã€ãŸãã2ã€ã®å€æ°ãäœæãããŸãã ïŒ2ïŒããããã£
1
ãã£ãŒã«ã
1
ãç¡é¢ä¿ãªå€æ°Zã20ã®ååå€ãæã€2çªç®ã®ãã£ãŒã«ããšçµ±åãããŸãããã®çµæã
f
ã®å€ã¯ã倿°
Z
ããã³å€20ãæ ŒçŽããããŒããæãæªç¥ã®ããŒããæããŸãã
Z
æãããŒãã«ã¯ã¬ã³ãŒãã¿ã€ãã®å€ãæžã蟌ãŸãããã®2çªç®ã®èŠçŽ ïŒå€æ°Zãªã©ïŒã¯ãã®ããŒããæããŸãã ç¹å¥ãªããšã¯äœããããŸãããã¹ãã¢ã°ã©ãã«ã«ãŒãããããŸãã
Browse
ã¯ã
R10 = f(R10 20)
ãŸãã
Ozã®ãªã¹ãã¯äžçš®ã®ã¿ãã«ã§ãã ãããã¯æ©èœçããã³è«ççããã°ã©ãã³ã°ã®ããã«æšæºçã«ç·šæãããŠããŸãããªã¹ãã¯ã¿ãã«ã§ãããæåã®èŠçŽ ã¯å€æ°ã®å
é ã§ã2çªç®ã¯æ«å°Ÿãæ§æãããªã¹ãã§ãã ãªã¹ãã®æ«å°Ÿã®é ãæå®ããã«ã¯ãèšå·
|
䜿çšããŸã
|
ïŒ
Head | Tail
Head | Tail
2.æé
Ozã§ã¯ãããã·ãŒãžã£ã䜿çšããŠã¹ããŒãã¡ã³ãã®ã·ãŒã±ã³ã¹ãæœè±¡åã§ããŸãã Ozã®ããã·ãŒãžã£ã¯å€ïŒãã¡ãŒã¹ãã¯ã©ã¹ãªããžã§ã¯ãïŒã§ããããã倿°ã«èªç±ã«ãå²ãåœãŠããããšãã§ããŸãã ãã詳现ã«ã Ozã¯ãäœããã®ã³ãŒããšããŠã¹ãã¢ã«ããã·ãŒãžã£ãå®è£
ããã¯ããŒãžã£ãŒãæ ŒçŽããŸãã ãã®ãããªåééæé ã¯ãã¹ãã¢å
šäœã®äžæã®ååãååŸããŸãã Ozã®ååã¯ãªãã©ã«-åååã®å€ã§ãã ããã·ãŒãžã£ã³ãŒããäœæããäžæã®ååãå²ãåœãŠãåŸãååã¯ããã€ãã®å€æ°ãåç
§ããããŒãã«æžã蟌ãŸããŸãã ãã®åŸããã®å€æ°ãä»ããŠããã·ãŒãžã£ãåŒã³åºãããšãã§ããŸãã
ãã®ããããœãŒã¹ã³ãŒãã§ã¯ã
NewPort
ã
IsPort
ã
Send
ã...ã
local
ãŸãã¯
declare
ã䜿çšããŠå€æ°ãšããŠå®£èšãããŠããŸãã
ããã·ãŒãžã£ãå®çŸ©ããåºæ¬çãªæ§æäœã¯
proc
ã§ãã
ããŒã«ã«... P ... in
...
proc {P X1 ... XN} S1 ... SMçµäº
...
çµãã
X1
ã...ã
XN
ã¯æ£åŒãªåŒæ°ã§ãã
S1
ã...ã
SM
ã¯ãããã·ãŒãžã£ãå®è£
ããäžé£ã®æŒç®åã§ãã ããã·ãŒãžã£ã¯ãäžæ¬åŒ§ã䜿çšããŠåŒã³åºãããŸãã
{P A1 ... AN}
A1
ã...ã
AN
ã¯å®ãã©ã¡ãŒã¿ã§ãïŒåŒã倿°ãªã©ã åŒã³åºãã¯ãä»®ãã©ã¡ãŒã¿ã«å¯Ÿå¿ããæ°ãã倿°ã®å®£èšã§çºçããŸããä»®ãã©ã¡ãŒã¿ã¯åŒæ°ãšçµ±åãããŠããããã®äžã«ã¯ç¡é¢ä¿ã®å€æ°ãååšããå ŽåããããŸãã ãããã£ãŠãããã·ãŒãžã£ã¯ãä»»æã®ãã©ã¡ãŒã¿ãä»ããŠããŒã¿ãåä¿¡ããã³è¿ãããšãã§ããŸãã ãããã£ãŠãã³ãŒãã®å¯èªæ§ãé«ããããã«ãããã°ã©ããŒãå€ãè¿ãããã ãã«äœ¿çšããããšãæåŸ
ãã倿°ã¯ãæ¥é èŸã§ããŒã¯ã§ããŸã
?
ããã¯åãªãã³ã¡ã³ãã§ãã
ããã·ãŒãžã£ã®ååãæ ŒçŽããããŒãã«é¢é£ä»ãããã倿°ã¯ã次ã®äŸã®ããã«ãåŒãè©äŸ¡ããçµæã«ãªãå ŽåããããŸãã
{Q.put 1}
Ozã«ã¯å¿åããã·ãŒãžã£ã䜿çšããæ©èœããããŸãããããã¯éåžžãšã¯ç°ãªãæ¹æ³ïŒãã¹ãã¡ã«ããºã ã䜿çšïŒã§å®è£
ãããŠããŸãã
{...}
å²ãŸããäžé£ã®æŒç®åã§ã¯ãäœçœ®ã®1ã€ãã·ã³ãã«
$
-æ·»ä»ãã¡ã€ã«ã®ã©ãã«ã§å ããããŠããå ŽåããããŸãã Ozãäžæ¬åŒ§å
ã§ãã®ãããªããŒã¯ã«ééããäœããã®æŒç®åãå®è¡ãããšãïŒ1ïŒ
{... $ ...}
æ°ã ãæ°ããããŒã«ã«ã¹ã³ãŒãã«æ°ãã倿°ãèªåçã«äœæãããã®ã¹ã³ãŒãã«ïŒ2ïŒ
{... $ ...}
åŒã³åºããããŒã«ãŒã®ä»£ããã«ãã®åŒã³åºããæ°ãã倿°ã«çœ®ãæããïŒ3ïŒãããã®å€æ°ãå®è¡å¯èœã¹ããŒãã¡ã³ãã®
{... $ ...}
å Žæã«æ¿å
¥ããŸãã äŸãã°
ããŒã«ã«P in
proc {PXïŒY} Y = X + 10 end
{{P 20 $} + {P 30 $} + 40ãåç
§}
çµãã
ãšããŠå®è¡ãããŸã
ããŒã«ã«P in
proc {PXY} Y = X + 10çµäº
ããŒã«ã«X1 X2
{P 20 X1}
{P 30 X2}
{X1 + X2 + 40ãåç
§}
çµãã
çµãã
ãã¹ãããŒã¯ã¯
{...}
å
ã®æåã®å Žæã§ã䜿çšã§ããŸãããããã·ãŒãžã£ã®å®çŸ©äžã®ã¿ã§ãã ãã ããæ¥ç¶ã¡ã«ããºã ã¯ãŸã£ããåãããã«æ©èœããŸãã ã³ãŒãïŒ
ããŒã«ã«P in
ããŒã«ã«P1
proc {P1 X1 ... XN} S1 ... SMçµäº
P = P1
çµãã
çµãã
ãããŠ
ããŒã«ã«P in
P = proc {$ X1 ... XN} S1 ... SMãšã³ã
çµãã
åçã§ãã
Oz颿°ãããã·ãŒãžã£ã§ãããããã·ãŒãžã£ã確å®ã«å€ãè¿ããªããã°ãªããªãããšãããã£ãŠããå Žåã®æ§æã®ç°¡ç¥åã§ãã æ¬¡ã«ã1ã€ã®ä»®ãã©ã¡ãŒã¿ãŒã®èª¬æãä¿åã§ããŸããã€ãŸãã
fun {F X1 ... XN} S1 ... SM end
proc {F X1 ... XN Y} S1 ... Y = SM end
ãšåã
proc {F X1 ... XN Y} S1 ... Y = SM end
ãŸãã åŒã³åºã
{F A1 ... AN}
ã颿°ãšããŠãOzã¯èªåçã«ããã·ãŒãžã£
{F A1 ... AN $}
åŒã³åºãã«å€ãããŸã
ããšãã°ã
楜ãã{FX}
ããŒã«ã«K
K = X / 20
{Kãåç
§}
çµãã
ããŒã«ã«L
L = 30
X == L
çµãã
çµãã
å®çŸ©ãæºãããŠãã
proc {FXY}
ããŒã«ã«K
K = X / 20
{Kãåç
§}
çµãã
Y =ããŒã«ã«L
L = 30
X == L
çµãã
çµãã
ãã®å Žåã
local ... in ... end
ãããã¯ã®å€ã¯ããã®äžã®æåŸã®ã¹ããŒãã¡ã³ãã®å€ã§ãã ã€ãŸãããã®äŸã§ã¯ã
F
ã¯ã質åã«å¯ŸããçããåŸãããã®åŒã³åºãã®çµæã«ãªããŸãã颿°30ã®æåã§å¯äžã®åŒæ°ã¯çããã§ãã
3.ã»ã«ãã¡ã¢ãªé åïŒãã£ã³ã¯ïŒãããã³å°æ¥ïŒå°æ¥ïŒ
ã¹ãã¢å
ã®ããŒã¿ãåŠçããããã«ãOzã¯ããã«ããã€ãã®æœè±¡åããµããŒãããŠããŸãã
3.1ã ã¹ãã¬ãŒãžé åã¯ãã¹ãã¢å
ã®ãšã³ããªã®äžéšã§ãã ãã ããéåžžã®ã¬ã³ãŒããšã¯ç°ãªãããããã¯äžæã®ååã䜿çšããŠèå¥ããïŒæé ãšåæ§ïŒãã¢ãªãã£ãå€å¥ããããšã¯ã§ããŸããã ã€ãŸãããããã®ã³ã³ããŒãã³ãã«ã¯ãããããã£åïŒæ©èœïŒã«ãã£ãŠã®ã¿ã¢ã¯ã»ã¹ã§ããŸãã ãããã®ååãã³ãŒãã®äžéšããé ãããŠããå Žåããããã®é åã§ã¯ã察å¿ããã¡ã¢ãªé åã®èŠçŽ ãžã®ã¢ã¯ã»ã¹ã¯äžå¯èœã«ãªããŸãã ãšãªã¢ã¯ã
{NewChunk Record}
颿°ãåŒã³åºãããšã§äœæãããŸãã åŒã³åºãã¯ãäžæã®ååã§ã¡ã¢ãªé åãäœæãããã®ååãè¿ããŸãã ååã¯ãäœããã®å€æ°ã«ãã£ãŠåç
§ãããããŒãã«æžã蟌ãããšãã§ããŸãã æ¬¡ã«ããã®å€æ°ãšæŒç®åã䜿çšã
.
ã¡ã¢ãªé åã®ãã£ãŒã«ãã«ã¢ã¯ã»ã¹ã§ããŸãïŒ
ããŒã«ã«XR
R = fïŒaïŒ1 bïŒ2 cïŒ3ïŒ
X = {NewChunk R}
{Xcãåç
§}
çµãã
3.2ã Ozã®ã»ã«ã¯ãç¶æ
ã§åäœããããã«èšèšãããŠããŸãã ã¹ãã¢å
ã®ããã·ãŒãžã£ããã³ã¡ã¢ãªé åãšããŠã®ã»ã«ã¯ãäžæã®ååã§å®çŸ©ãããŸãã 倿°ãšåæ§ã«ãããã¯ããããŒããžã®ãã€ã³ã¿ã§ããã倿°ãšã¯ç°ãªããã»ã«ãæãããŒãã¯æç€ºçã«ç¹°ãè¿ãèšå®ã§ããŸãã ã»ã«ã¯æ¬¡ã®ã€ã³ã¿ãŒãã§ãŒã¹ãå®çŸ©ããŸãã
C = {NewCell E}
-åŒE
ãšå€æ°ã®å€ã®çµ±äžããçããããŒããæãã»ã«ãäœæããŸã-æç¶ãã®ä»®åŒæ°NewCell
ãæ°ããäœæãããã»ã«ã®æ°ããäžæã®ååãè¿ããã倿°ã«å²ãåœãŠãããŸãC
ãã»ã«ããããŒããžã®ãªã³ã¯ã¯ããã¡ãããã¬ããŒãžãåéãããšãã«èæ
®ãããŸãã{IsCell C}
質åã«çããŸãïŒã¯C
ã»ã«åã«é¢é£ä»ãããã倿°ã§ãã@C
-çµæãšããŠã®ãã®åŒã«ã¯ã倿°ã«æ ŒçŽãããååã®ã»ã«ãåç
§ããããŒããæã倿°ããããŸãC
ãC := E
ååãæ ŒçŽãããŠããã»ã«ã®ãã€ã³ã¿ã倿ŽããŸããC
ãã®çµæãé¢ä¿ã®ãªãååã®ãªã倿°ãšåŒã®çµæã®çµ±åã®çµæãšããŠåŸãããããŒããæããŸãE
ã{Exchange C E1 E2}
-äžå¯è§£ãª1ã€ã®ã¢ãããã¯æäœã¯@C
ãE1
ãšçµ±åãããå®è¡ããC := E2
ãŸããããšãã°ãã»ã«ã¯ã«ãŠã³ã¿ãŒãšããŠäœ¿çšã§ããŸãã
ããŒã«ã«C
C = {NewCell 0}
{Exchange CXã¹ã¬ããX + 1çµäº}
çµãã
ããã§æé€ã§ããŸããthread ... end
ããããŠãããã¯ãå®è¡äžã®åã¹ã¬ããã«å¯ŸããŠãOzãæåŸã®ã¹ã¬ããæ¬äœæŒç®åãšçµ±åãããéãã€ã³ã倿°ãèªåçã«äœæãããšããçç±ã§æ©èœããŸãããããŠããã®äŸã®ãã®å€æ°ã¯æåŸã®åŒæ°Exchange
ã§ãã3.3ãå°æ¥ã®ãã®ã¯æåã«Smalltalk-72ã§ææ¡ããããã®åŸããããã®ã¢ããªã±ãŒã·ã§ã³ã®ã¢ã€ãã¢ã¯MultiLISPïŒ1985ïŒã§éçºãããŸããã Futureã¯ãããªãäžè¬çãªããŒã«ã§ããJavaã«ãããjava.util.cuncurrent.Future
; ããã¢ã¯ã»ã¹ã§ããŸãããããã®ãµããŒãã¯C ++ 0xã§èšç»ãããŠããŸãããããã¯Ozã§ãµããŒããããŠããŸãããçãã圢åŒã§ããäœããã®åŒã®æªæ¥E
ã¯ãéåæã³ã³ãã¥ãŒãã£ã³ã°ã«é¢é£ãããªããžã§ã¯ãE
ã§ããå°æ¥çã«ã¯ãæªç¢ºå®ã®çµæã䌎ãããã€ãã®æäœãå¯èœã«ãªããŸããE
-ããšãã°ã颿°åŒã³åºãã§äœ¿çšãããããªã¹ãã«æžã蟌ãã ããä»ã®éåæèšç®ã«æž¡ãããããŸããäœæ¥ãç¶ç¶ããããã«å¿
èŠãªã®ãåŒã®å€ã§ããå ŽåãE
ãã®æªæ¥ãžã®ã¢ããŒã«E
ã¯ãèšç®ããããŸã§å®è¡ãäžæåæ¢ããŸããOzã§ã¯ãéåžžã®å€æ°ã«ã¯åæ§ã®ããããã£ããããŸãã倿°ã®ããã¢ã¯ã·ã§ã³ã¯ãåç
§ããããŒãã«å€ãçŸãããŸã§åŸ
ããã«å®è¡ã§ããŸãããã§ã«ç€ºããäŸã®å€ãã¯ããã瀺ããŠããŸãããã ããOzã®å€æ°ã¯æ
å ±äº€æã®åæ¹åãã£ãã«=
ã§ããåŒã®å·Šå³ã«ç«ã€ããšã¯ãçµ±åã¢ã«ãŽãªãºã ã«å¯ŸããŠå¯Ÿç§°çã§ãããããã£ãŠãã³ãŒãå
ã§ã¯ïŒ
ããŒã«ã«X
ã¹ã¬ããX = 5çµäº
ã¹ã¬ããX = 7çµäº
X = 3
{Xãåç
§}
çµãã
ããŒã¿ãçæããã¹ã¬ãããšããŠç®ç«ã€ãã®ã¯ãããŸãããçµ±åããã»ã¹ã®äŸå€ã«ãããã¹ã¬ãããçºçããå¯èœæ§ããããŸããå°æ¥ã¯ããã®ç¶æ³ã§äœããã®ç§©åºã確ç«ããããšãã§ããŸããOzã§ã¯ãå°æ¥ã¯ããŒããžã®èªã¿åãå°çšãªã³ã¯ãã€ãŸã倿°ã®å€å°å¶éãããããŒãžã§ã³ã§ããæªæ¥ãçµ±åããã»ã¹ã«åå ããå Žåããã®ããã»ã¹ã¯æªæ¥ã«å¯Ÿå¿ãã倿°ãæ¥ç¶ããããŸã§äžæãããŸããX
Ozã®å€æ°ã®å°æ¥ã¯ãæŒç®åã«ãã£ãŠåœ¢äœãã!!X
ãŸããäžèšã®äŸã®é åºã¯ãããšãã°æ¬¡ã®ããã«å
¥åã§ããŸãã
ããŒã«ã«XY
Y = !! X
ã¹ã¬ããY = 5çµäº
ã¹ã¬ããX = 7çµäº
Y = 3
{é²èЧY}
çµãã
ããã§ã¯ãå€ã¯åžžã«2çªç®ã®ã¹ã¬ããã§ã®ã¿åœ¢æãããŸãã4.ãã¹ãŠäžç·ã«
ãã®ããã¹ããæåã«ã¹ã¯ããŒã«ããå¿
èŠããªãããã«ãå°å
¥éšããã³ãŒããåã³æã£ãŠãããšäŸ¿å©ã§ãã
00 declare Port in
01
02 local PortTag NewPort IsPort Send in
03 PortTag = {NewName}
04
05 fun {NewPort FS}
06 local SC in
07 C = {NewCell S}
08 FS = !!S
09 {NewChunk port(PortTag: C)}
10 end
11 end
12
13 fun {IsPort ?P}
14 {Chunk.hasFeature P PortTag}
15 end
16
17 proc {Send PM}
18 local Ms Mr in
19 {Exchange P.PortTag Ms Mr}
20 Ms = M | !!Mr
21 end
22 end
23
24 Port = port
25 (
26 new: NewPort
27 is: IsPort
28 send: Send
29 )
30 end
31
32 declare NewQueueServer in
33
34 fun {NewQueueServer}
35 local Given GivePort Taken TakePort Join in
36 GivePort = {Port.new Given}
37 TakePort = {Port.new Taken}
38
39 proc {Join Xs Ys}
40 local Xr Yr XY in
41 Xs = X | Xr
42 Ys = Y | Yr
43 X = Y
44 {Join Xr Yr}
45 end
46 end
47
48 thread {Join Given Taken} end
49
50 queue
51 (
52 put: proc {$ X} {Port.send GivePort X} end
53 getïŒproc {$ X} {Port.send TakePort X} end
54ïŒ
55çµãã
56çµãã
57
58ã§Qã宣èšãã
59
60ã¹ã¬ããQ = {NewQueueServer}çµäº
61
62 {Q.put 1}
63 {{Q.get $}ãåç
§}
64 {{Q.get $}ãåç
§}
65 {Q.put 2}
ããã°ã©ã å
šäœãè¡ããšã«èšè¿°ããããšã¯æå³ããããŸãããïŒé䞊åããã°ã©ã ã§ãããã©ã®ããã«æ©èœãããã«ã€ããŠã¯ã»ãšãã©ããããŸããïŒãããã€ãã®ç¹ãæç¢ºã«ããå¿
èŠããããŸãã4.1ã
äœæPort
ãPort
ã¬ã³ãŒãã衚ãããã£ãŒã«ãã¯äžé£ã®ããã·ãŒãžã£ã«é¢é£ä»ããããŸããããã¯ãããã€ãã®æé ã䟿å©ã«ã°ã«ãŒãåãããã®ã«éããŸãããããŒãèªäœã¯ã颿°ã«ãã£ãŠäžææ§ãä¿èšŒãããŠããååã®äžã®ã»ã«ãå«ãã¡ã¢ãªé åNewName
ã§ãã倿°ã¯PortName
ãããŒã«ã«ãŠãããïŒ02ãã30ïŒã«è¡šç€ºãããŠããã®ã§ãããªãã¯ãã¡ã¢ãªé åã®ã³ã³ããŒãã³ãã«ã¢ã¯ã»ã¹ã§ããå¯äžã®æé IsPort
ãNewPort
ãSend
ããã®ãããã¯ã®å€ã§PortName
ã¯ã倿°ã«ã€ããŠäœãç¥ãããŠããªããããããŒãã®ç¶æ
ãä¿åããã¡ã¢ãªé åã®ãã£ãŒã«ããžã®ã¢ã¯ã»ã¹ã¯ã»ãšãã©ãããŸããïŒãã¡ãããååã¯æšæž¬ã§ããŸããããã®ã¡ã«ããºã ã¯ã«ãã»ã«åã«ã¯ååã§ãïŒãæ©èœã«æ³šæãæãå¿
èŠããããŸãNewPort
ïŒ05-11ïŒãããŒãã¡ã¢ãªé åèªäœãè¿ãããšã«å ããŠãåŒæ°ã¯ããã®æåã®åŒæ°ãéããŠãã»ã«ãåæåããfuture倿°ãè¿ããŸããããã¯ãåæåGiven
ãšTaken
ïŒ36-37ïŒã«äœ¿çšãããŸãã4.2ã
æé Send
ïŒ17-22ïŒãããŒãã¡ã¢ãªé åã®ã»ã«ã¯ãåžžã«äžæãªããŒããæããŠããããšã«æ³šæããŠãã ããããããŠSend
ãæ¬¡ã®åŒã³åºãã§ä¿èšŒãããæåã®ããšã¯ãåã®ããŒããžã®ãªã³ã¯ã倿°Ms
ã«å
¥åããããã®ä»£ããã«ãéãã€ã³ã倿°ã®ããŒããžã®ãªã³ã¯ãé
眮ããããšã§ãMr
ãæ¬¡ã«ãSend
倿°ã®å€ã圢æãããŸãMs
ãããã¯ããªã¹ãã¿ãã«ãšã®çµ±åäžã«ååŸãããéä¿¡ãããã¡ãã»ãŒãžïŒé¢é£ããŠããªãå¯èœæ§ããããŸãïŒãæåã®å Žæã«ãããæªæ¥ã2çªç®ã«ãããŸãMr
ïŒåã³ïŒãªã¹ãã¯2çªç®ã®ã¿ãã«ã§ãïŒäœã§ãææ
¢ã§ããŸãïŒãåŸç¶ã®åŒã³åºãSend
ã¯ã倿°ã§åãããšãè¡ããŸãMr
ãããã³ãã®ããã»ã¹ã¯ãã»ã«ãåæåããããã«äœ¿çšããã倿°ãåŸã
ã«ã«å€ããNewPort
ãã®å°æ¥ãå€éšã«è¿ãããŠããªã¹ãã«å€ããŸããèšãæããã°ãSend
å®éã«ãã¥ãŒã§ã¡ãã»ãŒãžãéä¿¡ããŸãã4.3ã
æé Join
ïŒ39-46ïŒãããã§æãéèŠãªããšã¯ããã®æé ãé©çšããã察象ã§ãããå¥ã®ã¹ã¬ããã§åäœããŸãïŒ48ïŒãããã¯ãšã«é©çšããGiven
ãTaken
åŒã³åºãã®çµæãšããŠSend
åŸã
ã«ãªã¹ãã«å€ãããŸããå®éã®ãã©ã¡ãŒã¿ãŒJoin
ã¯åžžã«æªæ¥ã§ãããããçµåæŒç®åïŒ41-42ïŒã¯ãã€ã³ãåŸã«ã®ã¿å®è¡ããXs
ãYs
ã§çºçãSend
ããããã®å€æ°ãã¿ãã«ã衚瀺ãããªã³ã¯ã«å€æããŸãMessage | SomeFuture
ããã®åŸMessage
ãçä¿¡ïŒGiven
ïŒããã³çºä¿¡ïŒTaken
ïŒãããŒã®ã³ã³ããŒãã³ããçµ±åãããJoin
å°æ¥ã®ãªã¹ãã®æ«å°Ÿã«åŒã°ããŸãïŒéåååŠã«å°ã䌌ãŠããŸãããïŒã¢ã€ã³ã·ã¥ã¿ã€ã³ã¯ãé ããã倿°ã§å®å®ã®ã¢ãã«ãæ§ç¯ããããã®äžŠåããã°ã©ãã³ã°ã®ç¥èãæ¬ ããŠããã®ã§ãããïŒã4.4ã æåŸã«ã
ãã€ã³ãããã倿°ãGiven
䜿çšããŠã¹ããªãŒã ã«èšå®ãããSend
倿°ã¯ãã¹ã¬ããïŒ48ïŒã§ã¹ããªãŒã ã«èšå®ããã察å¿ãããã€ã³ããããŠããªã倿°ãšçµ±åãããŸãTaken
ããã¡ãããç¶æ³ã¯å®å
šã«å¯Ÿç§°çã§ããããããŠååput
ãšã¯get
䟿å®äžäœ¿çšãããŠããŸãããã ãããã¥ãŒãµãŒããŒã¯ãŸã éåæã§ããã䟿å©ã§ãã5. Ozã®ãã®ä»ã®è峿·±ãæ©èœ
Ozã¯ä»ã®æ©èœïŒããã³ãããã®å€ãã¯åºå€§ã§ãïŒã®äžã§ãç¹ã«è峿·±ã䞊åããã°ã©ãã³ã°ã¢ãã«ãæäŸããŸããPrologã§æ¡çšãããŠããå€å
žçãªãã®ãšã¯ç°ãªããŸããããšãã°ãããã°ã©ããŒããªãã·ã§ã³ãæ€çŽ¢ããã³åæããããã®ç¬èªã®æé ãå®çŸ©ã§ãããšããç¹ã§ãããããŠããã¡ãããOzãæ¡çšããŠããè«çããã°ã©ãã³ã°ã¢ãã«ã¯äžŠè¡ããŠããŸãã