Estou criando uma máquina virtual orientada a pilha e, então, comecei a aprender a Forth para uma compreensão geral sobre como ela funcionaria. Em seguida, selecionei as operações essenciais de manipulação de pilha que precisaria implementar na minha máquina virtual:
drop ( a -- )
dup ( a -- a a )
swap ( a b -- b a )
rot ( a b c -- b c a )
Acredito que as quatro operações de manipulação de pilha a seguir possam ser usadas para simular qualquer outra operação de manipulação de pilha. Por exemplo:
nip ( a b -- b ) swap drop
-rot ( a b c -- c a b ) rot rot
tuck ( a b -- b a b ) dup -rot
over ( a b -- a b a ) swap tuck
Dito isto, porém, eu queria saber se listei todas as operações fundamentais de manipulação de pilha necessárias para manipular a pilha de qualquer maneira possível.
Existem operações de manipulação de pilha mais fundamentais que eu precisaria implementar, sem as quais minha máquina virtual não estaria completa com Turing?
rot rot
como uma alternativa para -rot
? O que acontece quando há mais de 3 itens na pilha? Você não precisaria rot
tantas Length-1
vezes quantas vezes conseguir -rot
?
dup
, swap
e rot
eu uso pick ( a_n ... a_0 n -- a_n ... a_0 a_n)
e em roll ( a_n ... a_0 n i )
vez disso. Se i
for negativo, roll
desloca os elementos para a esquerda; mais para a direita.