aboutsummaryrefslogtreecommitdiff
path: root/stdlib.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib.tcl')
-rw-r--r--stdlib.tcl40
1 files changed, 40 insertions, 0 deletions
diff --git a/stdlib.tcl b/stdlib.tcl
new file mode 100644
index 0000000..e406a4f
--- /dev/null
+++ b/stdlib.tcl
@@ -0,0 +1,40 @@
+# Create a single word alias (proc) for one or more words
+# e.g. alias x info exists
+# if {[x var]} ...
+proc alias {name args} {
+ set prefix $args
+ proc $name args prefix {
+ uplevel 1 $prefix $args
+ }
+}
+
+# Creates an anonymous procedure
+proc lambda {arglist args} {
+ set name [ref {} function lambda.finalizer]
+ uplevel 1 [list proc $name $arglist {*}$args]
+ return $name
+}
+
+proc lambda.finalizer {name val} {
+ rename $name {}
+}
+
+# Like alias, but creates and returns an anonyous procedure
+proc curry {args} {
+ set prefix $args
+ lambda args prefix {
+ uplevel 1 $prefix $args
+ }
+}
+
+# Returns the given argument.
+# Useful with 'local' as follows:
+# proc a {} {...}
+# local function a
+#
+# set x [lambda ...]
+# local function $x
+#
+proc function {value} {
+ return $value
+}