From 2e15c0fd5067318601e2f3b70ee6fc16ef58200d Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Sun, 27 May 2018 18:28:23 -0700 Subject: Some tweaks/cleanup on the nomsu code as well as adding variable mangling to 'parse % as %' to make almost hygienic macros. --- core/math.nom | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) (limited to 'core/math.nom') diff --git a/core/math.nom b/core/math.nom index ed2cdb6..677230b 100644 --- a/core/math.nom +++ b/core/math.nom @@ -74,16 +74,22 @@ compile [min of %items, smallest of %items, lowest of %items] to Lua value "utils.min(\(%items as lua expr))" compile [max of %items, biggest of %items, largest of %items, highest of %items] to Lua value "utils.max(\(%items as lua expr))" -compile [min of %items by %value_expr] to - Lua value ".." - utils.min(\(%items as lua expr), function(_) - return \(%value_expr as lua expr) - end) -compile [max of %items by %value_expr] to - Lua value ".." - utils.max(\(%items as lua expr), function(_) - return \(%value_expr as lua expr) - end) +parse [min of %items by %item = %value_expr] as + result of + <- {%best:nil, %best_key:nil} + for %item in %items + %key <- %value_expr + if: (%best = (nil)) or (%key < %best_key) + <- {%best:%item, %best_key:%key} + return %best +parse [max of %items by %item = %value_expr] as + result of + <- {%best:nil, %best_key:nil} + for %item in %items + %key <- %value_expr + if: (%best = (nil)) or (%key > %best_key) + <- {%best:%item, %best_key:%key} + return %best # Random functions action [seed random with %] -- cgit v1.2.3