Question

Quelqu'un peut-il me aider à comprendre les différents modes de passage de paramètres dans le schéma? Je sais que le schéma met en oeuvre le passage de paramètres par valeur. Mais que diriez-vous d'autres modes?

Y at-il une bonne documentation pour le passage de paramètres dans le schéma?

Était-ce utile?

La solution

Scheme a uniquement appel par valeur appelle la fonction. Il existe d'autres alternatives qui peuvent être mises en œuvre dans la langue, mais si vous êtes un débutant, il est préférable de ne pas les essayer, même à ce stade. Si vous êtes à la recherche d'un moyen de transmettre des valeurs « par référence » - alors une option qui peut sorte de faire est d'utiliser des macros, mais vous devriez vraiment pas y aller. Au lieu de cela, certaines implémentations de Scheme comme PLT Scheme fournissent une « valeur de la boîte »: ceci est une sorte d'un conteneur qui est utilisé comme ceci:

  • Vous créez une boîte contenant <something> avec (box <something>)
  • Vous obtenez la valeur qui est stockée dans une boîte avec (unbox <some-box>)
  • Vous modifiez la valeur qui est stockée dans une boîte avec (set-box! <some-box> <new-value>)

Compte tenu de ces deux, vous pouvez utiliser ces objets boîte « en valeur », mais leur contenu est en fait une référence. Ceci est très semblable à C, où toutes les valeurs (plus, en fait) sont passés par valeur, mais certaines de ces valeurs peut être pointeurs que vous pouvez muter. BTW, il est préférable d'éviter même ceux-ci. Dans le schéma, la programmation fonctionnelle est le choix le plus commun et il est donc préférable de commencer avec cette

(Une fois que vous êtes plus à l'aise avec le schéma, et si vous utilisez un schéma avec des abstractions suffisantes, alors vous pouvez apprendre à mimer beaucoup d'alternatives aussi.)

Autres conseils

Pour ajouter un peu plus ...

Les quatre conventions fondamentales paramètre passage sont appel par valeur, appel par référence, appel par nom et appel par le besoin. Scheme, en tant que langue « surtout fonctionnelle », repose sur appel par valeur; les variables, une fois créé, ne sont généralement pas changé. Les trois autres conventions sont assez similaires et vous pouvez les faire encore dans le schéma en passant autour de vos valeurs dans des boîtes (en utilisant la boîte et Unbox), et les boîtes agissent comme des pointeurs sur des valeurs.

En général, si vous trouvez que vous devez utiliser appel par référence dans une fonction, vous devez repenser probablement comment vous mettre en œuvre la fonction et la rendre purement fonctionnelle. Modification d'une variable après qu'il a été créé à l'aide set! est un « effet secondaire » et est généralement évitée dans la programmation fonctionnelle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top