diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2015-08-13 21:47:02 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2015-08-13 21:47:02 -0700 |
commit | f2e197dcd31d737bf23816107343f67e2bf6dd8e (patch) | |
tree | ecdefacfe4177012fae54ae74d8c309eab336767 | |
parent | 4b308561021d4dedd7e83e5df30534d1fdde2216 (diff) | |
download | txr-f2e197dcd31d737bf23816107343f67e2bf6dd8e.tar.gz txr-f2e197dcd31d737bf23816107343f67e2bf6dd8e.tar.bz2 txr-f2e197dcd31d737bf23816107343f67e2bf6dd8e.zip |
New function, clamp.
* eval.c (eval_init): Register clamp as intrinsic function.
* lib.c (clamp): New function.
* lib.h (clamp): Declared.
* txr.1: Documented.
-rw-r--r-- | eval.c | 1 | ||||
-rw-r--r-- | lib.c | 5 | ||||
-rw-r--r-- | lib.h | 1 | ||||
-rw-r--r-- | txr.1 | 38 |
4 files changed, 45 insertions, 0 deletions
@@ -4349,6 +4349,7 @@ void eval_init(void) reg_fun(intern(lit("/="), user_package), func_n0v(numneqv)); reg_fun(intern(lit("max"), user_package), func_n1v(maxv)); reg_fun(intern(lit("min"), user_package), func_n1v(minv)); + reg_fun(intern(lit("clamp"), user_package), func_n3(clamp)); reg_fun(intern(lit("pos-max"), user_package), func_n3o(pos_max, 1)); reg_fun(intern(lit("pos-min"), user_package), func_n3o(pos_min, 1)); reg_fun(intern(lit("in"), user_package), func_n4o(in, 2)); @@ -2293,6 +2293,11 @@ val minv(val first, val rest) return reduce_left(func_n2(min2), rest, first, nil); } +val clamp(val low, val high, val num) +{ + return max2(low, min2(high, num)); +} + val exptv(val nlist) { return reduce_right(func_n2(expt), nlist, one, nil); @@ -583,6 +583,7 @@ val max2(val a, val b); val min2(val a, val b); val maxv(val first, val rest); val minv(val first, val rest); +val clamp(val low, val high, val num); val expt(val base, val exp); val exptv(val nlist); val exptmod(val base, val exp, val mod); @@ -23686,6 +23686,44 @@ Thus means .codn (max (max a b) c) . +.coNP Function @ clamp +.synb +.mets (clamp < low < high << val ) +.syne +.desc +The +.code clamp +function clamps value +.meta val +into the range +.meta low +to +.metn high . + +The +.code clamp +function returns +.meta low +if +.meta val +is less than +.metn low . +If +.meta val +is greater than or equal to +.metn low , +but less than +.metn high , +then it returns +.metn val . +Otherwise it returns +.meta high . + +More precisely, +.code (clamp a b c) +is equivalent to +.codn (max a (min b c)) . + .coNP Functions @, int-str @ flo-str and @ num-str .synb .mets (int-str < string <> [ radix ]) |