Pergunta

Alguém pode me ajudar a entender os vários modos de passagem de parâmetros no Scheme?Eu sei que o Scheme implementa passagem de parâmetros por valor.Mas e quanto a outros modos?

Existe alguma boa documentação para passagem de parâmetros no Scheme?

Foi útil?

Solução

Esquema tem apenas chamadas de função chamada por valor.Existem outras alternativas que podem ser implementadas dentro da linguagem, mas se você é iniciante é melhor nem experimentá-las neste momento.Se você está procurando uma maneira de passar valores "por referência" - então uma opção que pode funcionar é usar macros, mas você realmente não deveria ir por aí.Em vez disso, algumas implementações de esquema como o esquema PLT fornecem um "valor de caixa":este é um tipo de contêiner usado assim:

  • Você cria uma caixa contendo <something> com (box <something>)
  • Você obtém o valor que está armazenado em uma caixa com (unbox <some-box>)
  • Você altera o valor que está armazenado em uma caixa com (set-box! <some-box> <new-value>)

Dados esses dois, você pode usar esses objetos de caixa "por valor", mas seu conteúdo é na verdade uma referência.Isso é muito parecido com C, onde todos os valores (a maioria, na verdade) são passados ​​por valor, mas alguns desses valores podem ser ponteiros que você pode alterar.Aliás, é melhor evitar até mesmo estes:no Scheme, a programação funcional é a escolha mais comum e, portanto, é melhor começar com ela.

(Quando você estiver mais fluente com o Scheme e estiver usando um Scheme com abstrações suficientes, também poderá aprender como imitar muitas alternativas.)

Outras dicas

Para adicionar um pouco mais ...

As quatro convenções fundamentais que passam por parâmetros são chamadas por valor, chamada por referência, chamado por nome e chamada por necessidade. Esquema, como uma linguagem "principalmente funcional", depende de chamada de chamada; As variáveis, uma vez criadas, geralmente não são alteradas. As outras três convenções são bem semelhantes e você ainda pode fazê -las no esquema, passando seus valores em caixas (usando caixa e unbox), e as caixas atuam como ponteiros para os valores.

Geralmente, se você achar que precisa usar a referência de chamada em uma função, provavelmente deve repensar como está implementando a função e torná-la puramente funcional. Modificando uma variável depois de ser criada usando set! é um "efeito colateral" e geralmente é evitado em programação funcional.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top