summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--share/txr/stdlib/awk.tl8
-rw-r--r--txr.163
2 files changed, 70 insertions, 1 deletions
diff --git a/share/txr/stdlib/awk.tl b/share/txr/stdlib/awk.tl
index dabff1fc..3c92286a 100644
--- a/share/txr/stdlib/awk.tl
+++ b/share/txr/stdlib/awk.tl
@@ -176,7 +176,13 @@
(set ,flag-new nil))
(or (set flag ,flag-new) ,flag-old)))
(qref ,awc rng-exprs))
- rng-temp)))
+ rng-temp))
+ (ff (. opip-args)
+ ^(symacrolet ((f (rslot ,',aws-sym 'fields 'f-to-rec)))
+ (set f [(opip ,*opip-args) f])))
+ (mf (. opip-args)
+ ^(symacrolet ((f (rslot ,',aws-sym 'fields 'f-to-rec)))
+ (set f (mapcar (opip ,*opip-args) f)))))
,*body)))
(defmacro awk (:env e . clauses)
diff --git a/txr.1 b/txr.1
index e42696ee..04297f56 100644
--- a/txr.1
+++ b/txr.1
@@ -37865,6 +37865,69 @@ is evaluated. If it is true, then the range stays active for
the current record, but is deactivated when the processing of
the record completes.
+.coNP Macro @ ff
+.synb
+.mets (ff < opip-arg *)
+.syne
+.desc
+The awk macro
+.code ff
+(filter fields)
+provides a shorthand for filtering the field list
+.code f
+trough a pipeline of chained functions expressed using
+.code opip
+argument syntax.
+
+The following equivalence holds, except that
+.code f
+refers to the awk variable even if the
+.code mf
+invocation occurs in code which establishes
+a binding which shadows
+.codn f .
+
+.cblk
+ (ff a b c ...) <--> (set f [(opip a b c ...) f])
+.cble
+
+.TP* Example:
+.cblk
+ ;; convert all fields from string to floating-point
+ (ff (mapcar flo-str))
+.cble
+
+.coNP Macro @ mf
+.synb
+.mets (mf < opip-arg *)
+.syne
+.desc
+The awk macro
+.code mf
+(map fields)
+provides a shorthand for mapping each field
+individually trough a pipeline of chained functions expressed using
+.code opip
+argument syntax.
+
+The following equivalence holds, except that
+.code f
+refers to the awk variable even if the
+.code mf
+invocation occurs in code which establishes
+a binding which shadows
+.codn f .
+
+.cblk
+ (mf a b c ...) <--> (set f (mapcar (opip a b c ...) f))
+.cble
+
+.TP* Example:
+.cblk
+ ;; convert all fields from string to floating-point
+ (mf flo-str)
+.cble
+
.SS* Environment Variables and Command Line
Note that environment variable names, their values, and command line