Trilhas
/
Factor
Factor
/
Exercícios
/
Carga embaralhada
Carga embaralhada

Carga embaralhada

Exercício de aprendizagem

Introdução

Bem-vindo ao Factor! Factor é uma linguagem concatenativa: em vez de chamar funções como square(add(2, 3)), você escreve uma sequência de palavras da esquerda para a direita, 2 3 + square, que passam valores umas para as outras através de uma pilha de dados compartilhada. Imagine uma pilha de caixas de carga num cais, com as mais recentes em cima.

Comentários

Um ! inicia um comentário de linha: o Factor ignora tudo de ! até o fim da linha. Os exemplos abaixo usam ! para anotar o que o código faz.

A pilha de dados

Escrever um literal o empurra para o topo da pilha. O código é lido da esquerda para a direita.

1 2 3    ! stack (bottom → top): 1 2 3

Cada palavra lê suas entradas do topo da pilha e escreve suas saídas de volta lá. . desempilha o valor do topo e o imprime; .s imprime a pilha inteira sem consumir nada, o que é útil para ver o que um trecho deixou para trás.

Efeitos de pilha

Cada palavra é documentada com um efeito de pilha no formato ( inputs -- outputs ). É o contrato da palavra: ela desempilha as entradas do topo da pilha e deixa as saídas no lugar delas. Os nomes ali dentro são documentação para humanos: a pilha em si é posicional, não nomeada. O topo da pilha é o nome da direita.

Definindo uma palavra

: inicia a definição de uma palavra, o efeito de pilha vem em seguida, depois o corpo, e então ; a encerra. O compilador do Factor verifica se o corpo realmente deixa na pilha o que o efeito de pilha declara.

: restow ( a b -- b a ) swap ;

Palavras de embaralhamento

Essas palavras do kernel reorganizam o topo da pilha sem fazer nenhuma aritmética: elas apenas movem as caixas de lugar:

dup  ( x   -- x x   )    ! copy the top crate
drop ( x   --       )    ! remove the top crate
swap ( x y -- y x   )    ! flip the top two
over ( x y -- x y x )    ! copy the second crate onto the top
nip  ( x y -- y     )    ! remove the second crate
rot  ( x y z -- y z x )  ! roll the third crate up to the top

Recorra a dup quando uma caixa precisa alimentar duas palavras, a drop para jogar uma caixa fora, a swap quando as duas do topo estão na ordem errada, a over ou nip para trabalhar com a caixa de baixo, e a rot para trazer ao topo uma caixa soterrada.

A família mais ampla (-rot, dupd, swapd, 2dup, …) segue a mesma ideia; você vai conhecer essas palavras mais adiante.

Como as palavras se compõem

Palavras escritas em sequência são executadas da esquerda para a direita: cada palavra age sobre a pilha que a palavra anterior deixou. Veja o que swap nip faz com a pilha 1 2 (de baixo para cima), uma palavra de cada vez:

1 2     ! 1 2     the starting crates
swap    ! 2 1     swap flipped the top two
nip     ! 1       nip dropped the 2nd-from-top crate (the 2)

E aqui está dup rot sobre as mesmas caixas iniciais, também uma palavra de cada vez:

1 2     ! 1 2     the starting crates
dup     ! 1 2 2   dup copied the top crate
rot     ! 2 2 1   rot rolled the 3rd-from-top crate up to the top

Convenções de nomenclatura

As palavras usam lowercase-kebab-case: letras minúsculas unidas por hífens.

Tour: embaralhamento de pilha

Instruções

Você é um tripulante de convés que está reorganizando caixas de carga no cais. Cada tarefa é uma única palavra cujo corpo usa apenas palavras de embaralhamento, sem aritmética.

1. Troque as duas caixas de cima

Defina a palavra swap-crates. Ela tira duas caixas da pilha e as deixa em ordem inversa.

1 2 swap-crates .s
! 2
! 1

2. Remova a caixa derramada

Defina a palavra clear-spill. Ela tira três caixas da pilha e deixa as duas de baixo, descartando a de cima.

1 2 3 clear-spill .s
! 1
! 2

3. Guarde uma cópia da caixa de baixo

Defina a palavra peek-under. Ela tira duas caixas da pilha e as deixa com uma cópia da caixa de baixo em cima.

1 2 peek-under .s
! 1
! 2
! 1

4. Organize o convés

Defina a palavra tidy-deck. Ela tira três caixas da pilha, na ordem x y z, e deixa z z y: descarte a caixa de baixo e depois deixe duas cópias da caixa de cima por baixo da caixa do meio.

1 2 3 tidy-deck .s
! 3
! 3
! 2
Editar via GitHub O link abre em uma nova janela ou aba
Factor Exercism

Tudo pronto para começar Carga embaralhada?

Crie sua conta no Exercism para aprender e dominar Factor com 47 conceitos163 exercícios e mentoria humana de verdade, tudo de graça.