2014-07-01 1 views

ответ

3

Как вы заявили проблему, нет, потому что после назначения a не имеет связи с b + c (только с заданным числовым значением).

Однако вы можете перефразировать проблему, чтобы вы могли восстановить правую часть задания. Например:

kill (a, b, c); /* remove any existing values */ 
b : 2; 
c : 3; 
a : '(b + c); 
    => c + b 
''a; 
    => 5 
a; 
    => c + b 

kill (a, b, c); 
a : b + c; 
    => c + b 
b : 2; 
c : 3; 
''a; 
    => 5 
a; 
    => c + b 

В обоих случаях b + c не замещен числовыми значениями, когда он назначен a, либо путем предотвращения оценки (первый пример) или путем присвоения, прежде чем b и c приведены числовые значения. Наконец, вот еще один подход, который позволяет избежать присвоения числовых значений b и c:

kill (a, b, c); 
a : b + c; 
    => c + b 
subst ([b = 2, c = 3], a); 
    => 5 
a; 
    => c + b 

Я думаю, что это последний метод, который использует subst, является предпочтительным, поскольку другие подходы используют цитаты кавычки оператора '', который является слишком тонкий и, следовательно, имеет эффект, который может быть неожиданным.

+0

Кристально чистый ответ, как всегда Роберт, спасибо! – mmj

 Смежные вопросы

  • Нет связанных вопросов^_^