TURING COMPLETE!
This commit is contained in:
@@ -99,6 +99,18 @@ handleSymbol h (ZorthASTWord "dup") = do
|
|||||||
\ push rax\n"
|
\ push rax\n"
|
||||||
return ()
|
return ()
|
||||||
|
|
||||||
|
handleSymbol h (ZorthASTWord "display") = do
|
||||||
|
liftIO $ hPutStr h
|
||||||
|
" push rsp\n\
|
||||||
|
\ mov rbp, rsp\n\
|
||||||
|
\ mov rax, 1\n\
|
||||||
|
\ mov rdi, 1\n\
|
||||||
|
\ mov rsi, [rbp]\n\
|
||||||
|
\ mov rdx, 1\n\
|
||||||
|
\ syscall\n\
|
||||||
|
\ pop rsp\n\
|
||||||
|
\ add rsp, 8\n"
|
||||||
|
return ()
|
||||||
|
|
||||||
handleSymbol h (ZorthASTWord "mem") = do
|
handleSymbol h (ZorthASTWord "mem") = do
|
||||||
liftIO $ hPutStr h
|
liftIO $ hPutStr h
|
||||||
@@ -172,7 +184,7 @@ handleSymbol h (ZorthASTWord "<=") = do
|
|||||||
|
|
||||||
handleSymbol h (ZorthASTWord w) = do
|
handleSymbol h (ZorthASTWord w) = do
|
||||||
state <- get
|
state <- get
|
||||||
liftIO $ compileZorthAST h ((environment state) M.! w) state -- parent env to child and discard
|
_ <- compileZorthASTState h ((environment state) M.! w) -- parent env to child and discard
|
||||||
return ()
|
return ()
|
||||||
|
|
||||||
handleSymbol _ (ZorthASTWordDecl (name,ast)) = do
|
handleSymbol _ (ZorthASTWordDecl (name,ast)) = do
|
||||||
|
|||||||
@@ -1,20 +1,20 @@
|
|||||||
( 69420 - a variation on FizzBuzz... but with 69 and 420 )
|
( 69420 - a variation on FizzBuzz... but with 69 and 420 )
|
||||||
|
|
||||||
: over swap dup rot rot ;
|
: over swap dup rot rot ;
|
||||||
: mod over over / * - ;
|
: rem over over / * - ;
|
||||||
|
|
||||||
1
|
1
|
||||||
|
|
||||||
begin
|
begin
|
||||||
dup 50<
|
dup 50<
|
||||||
while
|
while
|
||||||
dup 15 mod 0 = if
|
dup 15 rem 0 = if
|
||||||
69420 .
|
69420 .
|
||||||
else
|
else
|
||||||
dup 3 mod 0 = if
|
dup 3 rem 0 = if
|
||||||
69 .
|
69 .
|
||||||
else
|
else
|
||||||
dup 3 mod 0 = if
|
dup 3 rem 0 = if
|
||||||
420 .
|
420 .
|
||||||
else
|
else
|
||||||
dup .
|
dup .
|
||||||
|
|||||||
89
examples/rule110.zorth
Normal file
89
examples/rule110.zorth
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
(
|
||||||
|
rule110 celular automata - https://mathworld.wolfram.com/Rule110.html
|
||||||
|
proof of turing complentess of the language
|
||||||
|
)
|
||||||
|
|
||||||
|
: over swap dup rot rot ;
|
||||||
|
: rem over over / * - ;
|
||||||
|
: mod dup rot swap rem swap dup rot + swap rem ;
|
||||||
|
|
||||||
|
: generation
|
||||||
|
0
|
||||||
|
begin
|
||||||
|
dup 64 <
|
||||||
|
while
|
||||||
|
dup 8 * mem + 64 8 * +
|
||||||
|
swap
|
||||||
|
dup
|
||||||
|
dup 1+ 64 mod 8 * mem + @
|
||||||
|
over 8 * mem + @
|
||||||
|
rot 1- 64 mod 8 * mem + @
|
||||||
|
|
||||||
|
0 = if
|
||||||
|
0 = if
|
||||||
|
0 = if
|
||||||
|
( 0 0 0 )
|
||||||
|
32 display
|
||||||
|
swap dup 0 !
|
||||||
|
else
|
||||||
|
( 0 0 1 )
|
||||||
|
35 display
|
||||||
|
swap dup 1 !
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
0 = if
|
||||||
|
( 0 1 0 )
|
||||||
|
35 display
|
||||||
|
swap dup 1 !
|
||||||
|
else
|
||||||
|
( 0 1 1 )
|
||||||
|
35 display
|
||||||
|
swap dup 1 !
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
0 = if
|
||||||
|
0 = if
|
||||||
|
( 1 0 0 )
|
||||||
|
32 display
|
||||||
|
swap dup 0 !
|
||||||
|
else
|
||||||
|
( 1 0 1 )
|
||||||
|
35 display
|
||||||
|
swap dup 1 !
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
0 = if
|
||||||
|
( 1 1 0 )
|
||||||
|
35 display
|
||||||
|
swap dup 1 !
|
||||||
|
else
|
||||||
|
( 1 1 1 )
|
||||||
|
32 display
|
||||||
|
swap dup 0 !
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
drop
|
||||||
|
1+
|
||||||
|
repeat
|
||||||
|
10 display
|
||||||
|
drop
|
||||||
|
0
|
||||||
|
begin
|
||||||
|
dup 64 <
|
||||||
|
while
|
||||||
|
dup 8 * dup mem 64 8 * + + @ mem rot + swap !
|
||||||
|
1+
|
||||||
|
repeat
|
||||||
|
drop
|
||||||
|
;
|
||||||
|
|
||||||
|
mem 32 8 * + 1 !
|
||||||
|
0
|
||||||
|
begin
|
||||||
|
dup 32 <
|
||||||
|
while
|
||||||
|
generation
|
||||||
|
1+
|
||||||
|
repeat
|
||||||
Reference in New Issue
Block a user