TURING COMPLETE!

This commit is contained in:
2025-09-09 18:58:26 +01:00
parent b84f5f5e53
commit e440585f90
3 changed files with 106 additions and 5 deletions

View File

@@ -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

View File

@@ -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
View 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