The discussion of [If we had no if] got me thinking - what core commands can be written in terms of other core commands, and which are just syntactic sugar or optimizations? Maybe if we could hook into [eval] to redo tcl's read-eval-print loop then things like [proc] become a simple lookup into a hashtable, a few [set]s and another eval.. Maybe something like proc eval {command args} { if {[info procs $command] == $command} { foreach [info args $command] $args break eval [info body $command] } elseif {[info commands $command] == $command} { $command $args } } A little rough around the edges, but I never claimed to have fully thought it through ... ---- [Salvatore Sanfilippo]: This idea may be used to write a TCL specification that includes just the subset (excluding all the libraries) of TCL that is enough to define all the rest (still excluding libraries). After all TCL is a way to describe a computation using substitutions that can be fully separated from its library and from the higher level abstractions built using it. I wonder if '''if''' can be used to write '''while''' (hint: it will be more clean to implement some form of escaping continuations so that the TCL core will only include '''if''' ;)) ---- Are there not already [core] [tcl] commands that are defined as tcl procs? [AMG]: You mean like [[[clock]]]? Sure. ---- TIP 90 removed the last barrier to being able to create a [proc] for each built-in Tcl command that behaves exactly like that built-in Tcl command. That is, for every built-in [[foo]], you can now create a corresponding [[myFoo]] that is a proc and behaves the same. The proc replacement ''may'' need to call the original built-in command, if it exposes functionality not available any other way, for example consider [[socket]]. ---- [RS] 2006-08-28: Some built-ins can equivalently be implemented in [pure-Tcl] (showing a slight redundancy): interp alias {} eval {} uplevel 0 proc list args {set args} ---- [CMcC] 2007-01-13: One of the virtues of [tcl in tcl] is that it serves as templates for creation of [little language]s in pure tcl. For example, an aspect of [expect] is a [switch]-like language. The pattern is '''[[action]]''':'''match'''->'''[[consequence]]''' '''...''', which is reminiscent of [Dijkstra]'s guarded if, as is [switch]. I mention this because I'm writing something akin to pattern-matching. ---- [category internals]