2010-07-12 17 views
1

Comment pouvons-nous atteindre les variables que nous avons définies dans la syntaxe (local ...) dans Scheme? Par exemple, dans le code ci-dessous,Atteindre des variables dans la syntaxe locale dans l'environnement Scheme

(define (erkan x) 
    (local 
     ((define y 10)) 
     (* x y))) 

Comment puis-je obtenir directement la valeur de y?

+1

Je ne comprends pas votre question. Vous obtenez la valeur de 'y' - c'est ainsi que' x' est multiplié par 10. Voulez-vous dire que vous voulez accéder 'y' en dehors de la fonction? – Chuck

+0

oui, exactement. Je veux utiliser y en dehors de la fonction- edit: got the answer. J'ai raté le concept, c'est "local" après tout. : P – erkangur

Répondre

1

Soit c'est une question étrange, ou vous ne l'avez pas faite correctement ... Votre exemple de code utilise y, donc il y a accès. Peut-être que vous essayez d'obtenir juste la valeur de y:

(define (erkan x) (local [(define y 10)] y)) 

Ou peut-être que vous voulez créer une sorte d'une « chose d'objet » - cela est possible, mais implique un code plus avancé. Voici un exemple rapide juste pour vous montrer comment c'est fait, (mais si vous passez par HtDP, vous feriez mieux de laisser cela pour plus tard).

(define (erkan x) 
    (local [(define y 10) 
      (define (handler message) 
      (cond 
       [(eq? message 'get-x) x] 
       [(eq? message 'get-y) y] 
       [(eq? message 'compute) (* x y)] 
       [else (error "bad message")]))] 
    handler)) 
(define some-erkan (erkan 3)) 
(some-erkan 'get-x) 
(some-erkan 'get-y) 
(some-erkan 'compute) 

(Notez BTW que ce n'est pas bon schéma, mais les dialectes étudiants d'enseignement utilisés dans HTDP.)

+0

oui, l'étude de HtDP. quand j'appelle (erkan 3), le résultat est (lambda (a1) ...) dans DrScheme. C'est intéressant (: Quel est le nom de cette méthode? Peut-être que je peux le regarder à partir du livre – erkangur

+0

Il est vraiment préférable d'aller avec le livre dans l'ordre - il couvrira également certaines des choses les plus avancées, et d'une manière qui sera plus compréhensible qu'un morceau de code aléatoire ... –

2

Vous êtes accès y lorsque vous faites (* x y).

Si vous voulez accéder à y depuis l'extérieur du local -block: vous ne pouvez pas faire cela. Toutes les définitions effectuées à l'intérieur d'un bloc local sont locales à ce bloc et ne sont pas accessibles depuis l'extérieur.