2016-10-29 2 views

Répondre

3

C'est une question difficile à répondre, car vous pourriez avoir un certain nombre de raisons différentes de vouloir cela.

1) vous voulez être en mesure de changer à quoi est liée une liaison.

Dans ce cas, vous seriez peut-être satisfait de set!. par exemple:

#lang racket 
(define x 3) 
(write x) 
(set! x 5) 
(write x) 

2) Vous souhaitez exécuter du code sur plusieurs implémentations de schéma.

Dans ce cas, utilisez quelque chose comme #lang r5rs.

3) Vous trouvez define esthétiquement plus agréable que set!

Voici la réponse est plus compliquée: Racket est un langage de programmation programmable, et vous pouvez facilement faire votre propre version de Racket qui a la sémantique que vous voulez. Cependant, Racket est délibérément conçu pas pour avoir cette sémantique, parce que la lecture de code écrit dans ce style est difficile; Dans un fichier volumineux et dans un langage permettant plusieurs définitions, un lecteur peut facilement trouver la mauvaise définition et supposer que c'est la seule.

Est-ce que cela aide?

+0

Je suppose que cela pourrait aider à comprendre ce que mon raisonnement pour faire cela est. J'essaie de convertir des programmes OCaml en Racket, et comme ce comportement est valide dans OCaml, un moyen rapide de le faire dans Racket serait utile. Cela étant dit, je ne suis pas très familier avec la façon de programmer les règles de syntaxe de l'utilisateur, les macros, etc. dans Racket. Est-ce quelque chose comme limiter un mot-clé à "utiliser définir si l'identifiant est unbound, sinon, utilisez set!" être possible dans Racket? – podington

+1

@podington Essayez la solution dans ce fil récent: https://groups.google.com/forum/#!topic/racket-users/vMvHN-OMv7A – soegaard

+0

Cela a fait l'affaire. Merci! – podington