Runtime evaluation/In an environment: Difference between revisions
Content added Content deleted
(→{{header|Octave}}: add note about nonglobalness) |
(→{{header|Tcl}}: provide another solution for clarified requirements) |
||
Line 176: | Line 176: | ||
=={{header|Tcl}}== |
=={{header|Tcl}}== |
||
⚫ | |||
<lang tcl>package require Tcl 8.5 |
|||
⚫ | |||
set x $a |
set x $a |
||
set 1st [expr $func] |
set 1st [expr $func] |
||
set x $b |
set x $b |
||
set 2nd [expr $func] |
set 2nd [expr $func] |
||
expr {$2nd - $1st} |
expr {$2nd - $1st} |
||
} |
} |
||
puts [eval_twice {2 ** $x} 3 5];</lang> |
puts [eval_twice {2 ** $x} 3 5] ;# ==> 24</lang> |
||
Here's another take, similar to other answers. It passes a code block to be <code>eval</code>ed, not just an expression for <code>expr</code> |
|||
<lang tcl>proc eval_with_x {code val1 val2} { |
|||
expr {[set x $val2; eval $code] - [set x $val1; eval $code]} |
|||
} |
|||
eval_with_x {expr {2**$x}} 3 5 ;# ==> 24</lang> |