Pregunta

¿Alguien puede ayudarme a comprender los distintos modos de paso de parámetros en Scheme?Sé que Scheme implementa el paso de parámetros por valor.Pero ¿qué pasa con otros modos?

¿Existe alguna buena documentación para el paso de parámetros en Scheme?

¿Fue útil?

Solución

El esquema tiene solo llamadas a funciones de llamada por valor.Hay otras alternativas que se pueden implementar dentro del lenguaje, pero si eres principiante entonces es mejor ni siquiera probarlas en este momento.Si está buscando una manera de pasar valores "por referencia", entonces una opción que puede lograrlo es usar macros, pero realmente no debería ir allí.En cambio, algunas implementaciones de Scheme como PLT Scheme proporcionan un "valor de cuadro":este es un tipo de contenedor que se usa así:

  • Creas una caja que contiene <something> con (box <something>)
  • Obtienes el valor que se almacena en una caja con (unbox <some-box>)
  • Cambias el valor que se almacena en un cuadro con (set-box! <some-box> <new-value>)

Teniendo en cuenta estos dos, puede utilizar dichos objetos de cuadro "por valor", pero su contenido es en realidad una referencia.Esto es muy parecido a C, donde todos los valores (la mayoría, en realidad) se pasan por valor, pero algunos de estos valores pueden ser punteros que se pueden mutar.Por cierto, es mejor evitar incluso estos:En Scheme, la programación funcional es la opción más común y, por lo tanto, es mejor comenzar con eso.

(Una vez que domines Scheme y estés usando un Scheme con suficientes abstracciones, también podrás aprender a imitar muchas alternativas).

Otros consejos

Para añadir un poco más ...

Los cuatro convenios fundamentales que pasan parámetros son de llamada por valor, llamada por referencia, llamada por nombre, y llamada por necesidad. Esquema, como un lenguaje "sobre todo funcional", se basa en la llamada por valor; las variables, una vez creado, por lo general no se cambian. Las otras tres convenciones son bastante similares y todavía se puede hacerlas en el Esquema pasando alrededor de sus valores en cajas (con caja y unbox), y las cajas actúan como indicadores de valores.

En general, si usted encuentra que es necesario utilizar de llamada por referencia en una función, probablemente debería reconsiderar cómo se va a implementar la función y hacer que sea puramente funcional. La modificación de una variable después de que ha sido creado usando set! es un "efecto secundario" y por lo general se evita en la programación funcional.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top