Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I can't speak to what most people expect from lambdas; I force myself use Tcl's [apply] occasionally just to try slightly different paradigms, so I appreciate your commentary.

One thing to note though, your final [inc 1] has nothing to do w/ $inc. In the interactive REPL (which I'm assuming you used), Tcl will (by default) essentially autocomplete commands if it can, and [inc] completed to [incr], which is "increment". [incr] adds (by default) 1 to the named variable and returns its result. In this case, the variable name happens to be "1", later accessible via "$1", or [set 1], for example.

[edit: I erroneously initially described the "1" in [incr 1] as the integer constant 1; @groovy2shoes reply below reflects my original error. This does go to show another neat feature of Tcl: no keywords.]



I didn't know that tclsh autocompletes commands; that's pretty neat. In this case, it looks like [incr 1] is incrementing a variable called 1, and appears to start from zero if the variable isn't initialized.

I find Tcl's command model interesting because it leads to a very tiny semantics. A few years ago I spent a lot of time thinking about how it could be extended to have lambdas, and I couldn't come up with a way that wouldn't break the command model in some way or another. They aren't something Tcl needs to have, I just thought it'd be convenient. (Tcl's evaluation model allows you to simulate higher-order procs, which, along with `apply`, covers many use cases of lambda).


Ya -- interactive tclsh has a few creature-features. The autocomplete we're discussing, automatic fall-through to exec as if via sh(1), command history, history editing, and perhaps more I'm forgetting.

  kamloops$ tclsh8.6
  % info commands up*
  update uplevel upvar
  % uptime
   7:17PM  up 1 hr, 7 users, load averages: 0.06, 0.12, 0.17
  % ls fu
  ls: fu: No such file or directory
  child process exited abnormally
  % ls -ld fu 
  ls: fu: No such file or directory
  child process exited abnormally
  % ^fu^foo
  ls -ld foo
  -rwxr-xr-x  1 joe  users  7300 Mar 23  2011 foo
  % history 
     1  info commands up*
     2  uptime
     3  ls fu
     4  ls -ld fu
     5  ls -ld foo
     6  history
  % !2
  uptime
   7:20PM  up  1:03, 7 users, load averages: 0.13, 0.12, 0.16


> automatic fall-through to exec as if via sh(1)

That explains why X11.app launched that one time I forgot a `$` before my `x`...


That sounds likely. Note that is strictly for interactively typed commands. Witness:

  kamloops$ cat ls.tcl
  #!/usr/pkg/bin/tclsh8.6

  ls foo

  kamloops$ ./ls.tcl 
  invalid command name "ls"
      while executing
  "ls foo"
      (file "./ls.tcl" line 3)
  kamloops$ tclsh8.6
  % source ls.tcl
  invalid command name "ls"
  % ls foo
  foo
  % 
Now, back to your regularly scheduled Lua topic :)


@groovy2shoes (and anybody else who's interested in modern (or historic, for that matter) Tcl), you should drop by #tcl on irc.freenode.net. We'd love to have you visit.


To my point of no keywords, and touching on the interesting model @groovy2shoes is talking about here[1]:

  $ tclsh

  % set a set
  set
  % puts $a
  set
  % $a b 9
  9
  % set b
  9
  % set set set
  set
  % $set set
  set
  % rename set foo
  % foo set
  set
  % foo a
  set
  % foo a 9
  9
  % puts $a
  9
  %
[1] http://news.ycombinator.com/item?id=3536419

[edit: formatting]




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: