çè«ãç¥ããã«ç·Žç¿ã«é Œã人ã¯ãèµãšã³ã³ãã¹ãªãã§è¹ã«ä¹ã蟌ãèµåãã®ãããªãã®ã§ããèãªãèšèªæŠäºã§ã¯ãèšèªã¯åçã§ããéããã¥ãŒãªã³ã°å®å šã§ãããããæçµçãªè°è«ããã°ãã°åŒçšãããŸãã ã«ããã®äžã§ããã§ã«Pythonãç¿åŸããŠãããçŸåšErlangãŸãã¯Haskellãä»æ§ã§ç 究ããäºå®ã®äººã®ããã«ããã®è«æãæ確ã«ããè©Šã¿ã çŽ æã¯ããã©ãã§ãããåçã§æŽç¶ãšããŠããŸãã
ã¬ãªãã«ãã»ãã»ãŽã£ã³ã
Alan Turingã¯1936幎ã«a-carã補é ããŸããã
ã...ãšã³ãã¬ã¹ããŒãã¯ãã·ã³ãã«ã§ããŒã¯ããããã©ãããã©ãŒã ã«åå²ãããŸããåç¬éã«ããã·ã³ã§äœ¿çšã§ããã·ã³ãã«ã¯1ã€ã ãã§ãããã·ã³ã®ç¶æ ã¯ã䜿çšå¯èœãªã·ã³ãã«ã«ãã£ãŠç°ãªããŸãããã·ã³ã¯ãã®ã·ã³ãã«ãèªç±ã«å€æŽã§ããŸãã ãããã¯è»ã®åºæ¬æäœã§ãããããã£ãŠãã©ã®ã·ã³ãã«ã«ããã£ã³ã¹ããããŸã... "1948幎ã®ãšãã»ã€ãã€ã³ããªãžã§ã³ãæ©æ¢°ãã¥ãŒãªã³ã°ã

ã¹ããŒããã·ã³ã¯ãã·ã³å ã«é ãããŠãããšèšããã®ã§ãéæ¥å»ã«ãšã£ãŠã¯ç解ããããã§ãããã
a-machineãçµã¿ç«ãŠãããšãã§ãããã¶ã€ããŒã¯ããã¥ãŒãªã³ã°ãå®äºãããšèŠãªãããŸãã 2ã€ã®ãã·ã³ããã¥ãŒãªã³ã°ã§åçãšèŠãªãããã®ã¯ãäžæ¹ãä»æ¹ãããŒããââãçµã¿ç«ãŠãããšãã§ããå Žåã§ãã
ãã¥ãŒãªã³ã°ã¯ãä»»æã®a-machineã眮ãæããããšãã§ããæ±çšãŠãããããããã¿ã€ãåããŸããã ãŠãããŒãµã«ãã¥ãŒãªã³ã°ãã·ã³ã¯ãããçš®ã®ãã©ã€ããŒãa-machineã®èª¬æãããŒã¿ãšãšãã«ããŒãããèªã¿åãããšã§ãããå®çŸããŸãã 2ã€ã®UMTã¯æããã«åçã§ãã ãããŠ1946幎ããã©ã³ãã€ãã³ããã®ãããã¿ã€ããäœæããŸããã ããã§ãè€éãªèšç®ã§ã¯ãUMTããã©ã€ããŒãa-machineããã察æ°çã«é ãããšã«æ³šæããŠãã ããã
ãã¥ãŒãªã³ã°ãšæäŒã®ä»®å®ïŒèªç¶æ°ã®ä»»æã®é¢æ°ã¯ãäžèœãã¥ãŒãªã³ã°æ©æ¢°ããããåŠçããå Žåã«ã®ã¿ãçŽãšéçãè£ åãã人ã«ãã£ãŠèšç®å¯èœã§ãã
åè¿°ã®ããšããããŠãããŒãµã«ãã¥ãŒãªã³ã°ãã·ã³ã»ã©æ¥ãªãã®ã¯ãªããšããããšãããããŸãã ã·ã¹ãã ãäœã§ãããUMTã¯åŒãç¶ãæ©èœããŸãïŒæäŒãšãã¥ãŒãªã³ã°ã®è«æãæ£ããå ŽåïŒã ããã§ãããã¥ãŒãªã³ã°ã¯åœŒã®è»ã«ãã¬ãŒããããã£ãŠããªãããšãèªããããåŸãªãã£ãã ã²ãŒãã«ã®äžå®å šæ§å®çã¯ãã·ã£ããããŠã³ã®åé¡ãåŒãèµ·ãããŸãã UMTãåžžã«åæ¢ç¶æ ã«å°éããããšã確èªããããšã¯ã§ããŸããã
UMTã§ã®èšç®ã¯ãããŒãããã³ç¶æ é·ç§»ã«æ²¿ã£ãäžé£ã®ã¹ãããã§ãã
ããšãã°ãã¢ã»ã³ãã©ã®æŽæ°ã¢ãžã¥ãŒã«absïŒintïŒã¯æ¬¡ã®ããã«åãããšãã§ããŸã
cdq ; eax edx ; if eax>=0 then edx:=0 else edx:=0xFFFFFFFF xor eax, edx ; XOR , A â 0 = A ; XOR c -1 NOT A â â1 = ¬A ; if eax>=0 then eax:=eax xor 0=eax else eax:=eax xor 0xFFFFFFFF=not eax sub eax, edx ; edx eax ; eax , edx=0 ; eax 1 -eax ; ¬A + 1 = âA ; if eax>=0 then eax:=eax xor 0 - 0=eax else eax:=(eax xor -1) - (-1=not eax + 1= -eax
Universal Turing Machineãå®è£
ããifããã³gotoãåããåœä»€åããã°ã©ãã³ã°èšèªã
åã1936幎ã«ãã¢ãã³ãŸæäŒã¯ããã®çšèªã«é¢ãã3ã€ã®ç°¡åãªèŠåã§èšè¿°ãããã©ã ãèšç®ã®äžçãå°å ¥ããŸããã ïŒäžè¬ã«ãæäŒã®ç 究ã¯1928-1930幎ã«ããã®ãŒãããã¥ãŒãªã³ã°ã¯æäŒã®å€§åŠé¢çã§ãããã圌ã®äœåã¯åæã«åºçãããŸãããïŒ
â¢å€æ°xãyãz ...ã¯çšèªã§ãïŒã¢ã«ãã¡ãããïŒ
â¢MãšNãçšèªã®å ŽåãïŒMNïŒã¯çšèªã§ãïŒã¢ããªã±ãŒã·ã§ã³ïŒ
â¢xãå€æ°ã§ãMãé ã®å ŽåãïŒÎ»x.MïŒã¯é ã§ãïŒæœè±¡åïŒ
ãŸããä»ã®ãã¹ãŠãã©ã ãçšèªã§ã¯ãªãããšãæå®ãããŠããŸãã
ããã§ã®æœè±¡åã¯ãé¢æ°ãèšè¿°ããæ¹æ³ã§ãã ã¢ããªã±ãŒã·ã§ã³-åŒæ°ã«é©çšããæ©èœã ã©ã ãåŒã¯ããªãŒã§å®å šã«è¡šçŸã§ããŸãã

ãããã®ççŸããªãèŠåã®æå³ã埩掻ãããããã«ãã©ã ãåŒã®3çš®é¡ã®çž®å°ïŒåçŽåïŒãå°å ¥ãããŠããŸãã
- αå€æïŒåŒæ°ã®ååãå€æŽïŒã¢ã«ãã¡ïŒ; λx.xâλy.y
- β-reductionïŒé¢æ°ãåŒæ°ã«é©çšïŒããŒã¿ïŒ; ïŒïŒÎ»n.n* 2ïŒ7ïŒâ7 * 2
- η-å€æïŒç䟡眮æïŒetaïŒã λxãïŒfxïŒâf

åŒãçž®å°ã§ããªãå Žåãèšç®ããããšèŠãªãããéåžžã®åœ¢åŒã«ãªããŸãã èšç®ã¯äžé£ã®åçŽåã§ãã
1958幎ããžã§ã³ã»ããã«ãŒã·ãŒã¯ããã©ã³ã»ãã€ãã³ã®ãã·ã³ã§å®è¡ã§ããã©ã ãèšç®ãLispèšèªã§å®è£ ããŸãã Lispã¯ã©ã ãèšç®ã®å®è£ ã§ããããã¥ãŒãªã³ã°ãã·ã³ã§ã¯ãããŸããïŒgotoã¯ãããŸããïŒãããã£ãŒããã¥ãŒãªã³ã°ã®è«æã«ããã°ãããã¯ãã®ãããªãã·ã³ã§ãã Lispãç·Žç¿ããåå¿è ã¯ãŸããé¢æ°åèšèªã®ããã°ã©ã ã®åäœã®ã·ãŒã±ã³ã¹ã¯äžè¬ã«ç§ãã¡ã«ãšã£ãŠæªç¥ã§ãããéèŠã§ã¯ãªãããšãç解ããå¿ èŠããããŸãã Lispã®ã³ãŒããšããŒã¿ã®è¡šçŸã¯åãã§ã-ããã¯3ã€ã®æäœã§å®çŸ©ããããªã¹ãã§ã
(defun cons (ab) (lambda (f) (funcall fab))) (defun car (c) (funcall c (lambda (ab) a))) (defun cdr (c) (funcall c (lambda (ab) b)))
ã¹ã¿ãã¯ã¯æ¬¡ã®ããã«èšè¿°ã§ããŸã
(let (stack) (defun push (x) (setq stack (cons x stack))) (defun pop () ;; note the usefulness of VALUES. (values (car stack) (setq stack (cdr stack)))))
ã¯ãããã¥ãŒãªã³ã°ã®ã©ã ãèšç®ã¯åçã§ãããåä»ããããŠããŸããã çšèªã®çš®é¡ã«å¶éãå°å ¥ãã圢åŒãäžè¬åããŸãããçšèªã®æŠå¿µã®äžè¬æ§ãæžãããŸãã åä»ãã©ã ãèšç®ã¯äžè¬ã«ãã¥ãŒãªã³ã°å®å šã§ã¯ãããŸããã
å®å šæ§ãå®çŸããã«ã¯ãè¿œå ã®æœè±¡åãå¿ èŠã§ãã ãããŠã1942-1945幎ã«ãã¢ã€ã¬ã³ããŒã°ãšãã¯ã¬ãŒã³ã¯ãã®ãããªæœè±¡æŠå¿µãã€ãŸãã«ããŽãªãŒã®çè«ãäœæããŸããã æäŒã¯ã«ããŽãªãŒçè«ãšåŒã¶
圌ãèŠããã¹ãŠã®äžã§æé«ã®æ°åŠç圢åŒ
ã«ããŽãªCã«å«ãŸããå¿ èŠããããŸã
ã«ããŽãªãªããžã§ã¯ãã®ã¯ã©ã¹obïŒXïŒ
å°ã®ã¯ã©ã¹HïŒAãBïŒïŒãŸãã¯ç¢å°fïŒa-> bïŒ
äºéæäœâãå°ã®åæï¿ŒfâgãfâHïŒBãCïŒgâHïŒAãBïŒâfâgâHïŒAãCïŒ
- é£æ³ïŒhâïŒgâfïŒ=ïŒhâgïŒâf
- ããã³èå¥ãããIDïŒxâx
idâf = f = fâid

ãã¡ã³ã¯ã¿ã¯ãæ§é ãä¿æããã«ããŽãªãããã³ã°ã§ãã

èªç¶ãªå€æã¯ã2ã€ã®ãã¡ã³ã¯ã¿ãŒã®æ¯çã§ãã

1970幎代åé ãGirardãšReynoldsã¯ãSystem-Fãå€çžã©ã ãèšç®ãšããŠç¬èªã«å®åŒåããŸããïŒæŠããŠãã©ã ãè¡šèšã®æ®éæ§ã®æ°éååãèš±å¯ããŸããïŒã HindleyãšMilnerã¯ãã¢ã«ãŽãªãºã Oã®è€é床OïŒ1ïŒãéçºããŠãåãå°åºããŸãããã€ãŸããåŒã®ãµã€ãºããç·åœ¢ã«ãªããŸããïŒãã®ãããè¡šèšã®ãã¬ãã£ãã¯ã¹ãäœæããå¿ èŠããããŸããïŒã Milnerã¯ã·ã¹ãã ãMLèšèªã«åã蟌ã¿ã1990幎ãŸã§ã«Haskellã«ç»å ŽããŸãã ãããã£ãŠãHaskellã§ã¯ããã¹ãŠã®ããŒã¿åãšãã¹ãŠã®å¯èœãªé¢æ°ãæã€å°åãæã€ãªããžã§ã¯ããå«ãHaskã«ããŽãªãèªç±ã«äœ¿çšã§ããŸãã
Haskellã®æŠå¿µã¯ãæ°åŠè Haskell Curryã®èããåæ ããŠããã
蚌æã¯ããã°ã©ã ã§ããã蚌æãããåŒã¯ããã°ã©ã ã®äžçš®ã§ããã®ãããªåœ¢åŒã§ã®èšç®ã¯ãããšãã°ã宣èšãããã«ããŽãªã®çµè«ã§ãããèšç®ã®çµæã¯èšŒæã®å¯äœçšãšèŠãªãããŸãã
ããšãã°ãã¹ãçŽæ°ã§å±éãããææ°ã®å Žå

ç§ãã¡ã¯èšãããšãã§ããŸã
integral fs = 0 : zipWith (/) fs [1..] -- (Fractional a, Enum a) => [a] -> [a] expx = 1 + (integral expx) --
Algorithm-Wãšãšã¬ã¬ã³ããªæ°åŠã®çŠç¹-ã¢ããã¯ãæ§é ååž°ã®äžè¬åãšããŠããã©ã³ãã€ãã³ãã·ã³ã§Haskã«ããŽãªãå®è£ ããããšãå¯èœã«ããŸããã Haskellã¯ãåãã§ãã«ãŒãWã¢ã«ãŽãªãºã ãå®è£ ããŠãããšããçç±ã ãã§ãã¥ãŒãªã³ã°å®å šã§ãã ãã ãããã®èšèªã¯ãã¥ãŒãªã³ã°ãã·ã³ãšããŠèšèšããããã®ã§ã¯ãªãããšãç解ããŠãã ãããã«ããŽãªã®çè«ã§ã¯ãæéç¶æ ãã·ã³ãæ§ç¯ãããç¶æ ã®æœè±¡åã¯ååšããŸããã
å®éã«ã¯ãHaskellã®åŠçã¯ãå€ïŒäžå€ïŒã§ã¯ãªããå€æ°ã®ã¿ã€ããšå€æ°éã®å°ã«ã€ããŠè©±ãããšã«æ £ããã®ã«åœ¹ç«ã¡ãŸãã
ãã©ã³ãã€ãã³ã®ãã·ã³ã¯ã·ãŒã±ã³ã·ã£ã«ã³ã³ãã¥ãŒã¿ãŒã§ããããããã®ãã·ã³ã¯ãããã¯ãŒã¯ã§ã®æ¥ç¶ãåŠç¿ããŠããŸãã 1985幎ãCharles Hoareã¯ãCommunicating Sequential Processesããšããããã¥ã¡ã³ããçºè¡ããããã§æ°ãã圢åŒãéçºããŸããã åºæã¯ãã€ã¯ã¹ãã©ã«ãã£ãŠæžãããŠããŸãã
ãªããžã§ã¯ãã¯ãé¢é£ããã€ãã³ãã®ã¢ã«ãã¡ãããã§èšè¿°ãããŸãã ãã®ãããªã€ãã³ãã®å šäœãããã»ã¹ã圢æããŸãã
ãã¥ãŒã€ã³ã°ãã·ã³ãåã

xãã€ãã³ããPãããã»ã¹ãšãããšã次ã®ããã«ãªããŸãã
(x â P )
ïŒãx then Pããšçºé³ïŒã¯ãæåã«ã€ãã³ãxãçºçããã次ã«Pã®ããã«åäœãããªããžã§ã¯ããèšè¿°ããŸãã
= ÎŒX ⢠â ( â X | â X)
Xã¯å€æŽå¯èœãªããŒã«ã«å€æ°ã§ã
ãªããžã§ã¯ãã«ãã£ãŠæž¡ãããã€ãã³ãã®ã·ãŒã±ã³ã¹ãããã»ã¹ãã¬ãŒã¹ãæ§æããŸãã
ããã»ã¹ç°å¢ãã·ãŒã±ã³ã·ã£ã«ããã»ã¹ãšèŠãªãããŸãã
2ã€ã®ããã»ã¹ãåãã€ãã³ããã¢ã«ãã¡ãããã§æã€ããšãã§ããŸã
= ÎŒX â¢( â X | â X | â â X )
çãæ¯ã¯ã¿ãã£ãŒãç¡æã§æã«å
¥ããããšãå«ããã®ã§ã¯ãããŸããããå¥è·¡ã¯ãããŸãã
( || ) = ÎŒ X ⢠( â â X)
ãã®ãããªè¡šèšæ³ã§ã¯ãHoarã¯ãé£äºå²åŠè ã®åé¡ããå¹æçã«è§£æ±ºïŒå°ãªããšã蚺æïŒã§ãã代æ°ãæ§ç¯ãããã®ä»£æ°ã®æ³åãå°ãåºããŸãã
L1 P||Q=Q||P L2 P ||(Q ||R)=(P ||Q)||R L3 (c âP)||(c âQ)=(c â(P ||Q)) ...
圢åŒäž»çŸ©ã¯ãErlangãGolangãAda Haskellã©ã€ãã©ãªããã³ãã®ä»ã®èšèªã§å®è£ ãããŠããŸãã
åãããŒãäžã«æ€ãããã2ã€ã®ãã¥ãŒãªã³ã°æ©æ¢°ã¯ãã¥ãŒãªã³ã°æ©æ¢°ã§ããïŒ

ã¯ããHoarã¯çããŸãã 代æ°ãã©ã ãèšç®ã§å®£èšããLispã§å®è£ ããŸãã ããã§ããã·ã³äžã§å®è¡ãããŠãã1ã€ã®ãã©ã³ãã€ãã³ãçžäºäœçšããé£ç¶ããã»ã¹ãåžžã«ç°¡åã«è¡šãããšãã§ãããšããåæã«éããŸããã éã®åé¡ã§ãããçžäºäœçšãã2ã€ã®ããã»ã¹ã®å²ãåœãŠã¯æ±ºããŠç°¡åã§ã¯ãããŸããã
ããã¯ãGoã®æåã®10åã®çŽ æ°ã«å¯Ÿãã競äºçãªãµãããã©ã®ããã«èŠãããã§ãã
package main // 2, 3, 4, ... 'ch'. func Generate(ch chan<- int) { for i := 2; ; i++ { ch <- i // , . } } // in out, // 'prime'. func Filter(in <-chan int, out chan<- int, prime int) { for { i := <-in // 'in'. if i%prime != 0 { out <- i // 'i' 'out'. } } } func main() { ch := make(chan int) // ch. go Generate(ch) // Generate . for i := 0; i < 10; i++ { prime := <-ch print(prime, "\n") ch1 := make(chan int) go Filter(ch, ch1, prime) // Filter . ch = ch1 } }
ErlangãGoããŸãã¯Webã®ã¿ã§ç«¶äºåã®ããããã°ã©ãã³ã°ãè¡ããšããå®çšçãªèŠ³ç¹ãããæåã«ããã»ã¹ã®å ±éã¢ââã«ãã¡ãããïŒå ±æãªãœãŒã¹ïŒã決å®ããããšãéèŠã§ãã 䞊åããã°ã©ãã³ã°çšã®ããŒã«ããããæã€èšèªã¯ããã®ããŒã«ãããã䜿çšããããã«ä¿ããŸãã ä»»æã®ã¢ã«ãŽãªãºã ãé çªã«å®è£ ã§ããååãšããŠããå¹ççã«å®è£ ã§ããããšãèŠããŠããå¿ èŠããããŸãã
ãããã¯ã-説æããã圢åŒã¯ãã¥ãŒãªã³ã°ãšåçã§ãã ãããããã¥ãŒãªã³ã°ãæš¡å£ããŠãå¥ã®ãã¬ãŒã ã¯ãŒã¯å ã§1ã€ã®ãã©ãã€ã ãåæ§ç¯ããããšã«ããåããã°ã©ã ã§ããã蚌æããããšã¯ãç§ã«ãšã£ãŠéå¹æã®ããã§ãã ãã£ãŒã¿ãŒã§ã圌ãã¯ä»ã®èª°ãã®ä¿®éé¢ã«è¡ããŸããã æ ¹æ¬çã«ç°ãªãèšç®ã¢ãã«ãå ¬èšããèšèªãæ¡çšããã«ã¯ãæç¶å¯èœãªã¹ãã«ãã¡ããªãã¯ãããã³èšèšãã¿ãŒã³ãä¿®æ£ããå¿ èŠããããŸãã