TURING COMPLETE!
This commit is contained in:
@@ -99,6 +99,18 @@ handleSymbol h (ZorthASTWord "dup") = do
|
||||
\ push rax\n"
|
||||
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
|
||||
liftIO $ hPutStr h
|
||||
@@ -172,7 +184,7 @@ handleSymbol h (ZorthASTWord "<=") = do
|
||||
|
||||
handleSymbol h (ZorthASTWord w) = do
|
||||
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 ()
|
||||
|
||||
handleSymbol _ (ZorthASTWordDecl (name,ast)) = do
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
( 69420 - a variation on FizzBuzz... but with 69 and 420 )
|
||||
|
||||
: over swap dup rot rot ;
|
||||
: mod over over / * - ;
|
||||
: rem over over / * - ;
|
||||
|
||||
1
|
||||
|
||||
begin
|
||||
dup 50<
|
||||
while
|
||||
dup 15 mod 0 = if
|
||||
dup 15 rem 0 = if
|
||||
69420 .
|
||||
else
|
||||
dup 3 mod 0 = if
|
||||
dup 3 rem 0 = if
|
||||
69 .
|
||||
else
|
||||
dup 3 mod 0 = if
|
||||
dup 3 rem 0 = if
|
||||
420 .
|
||||
else
|
||||
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