aboutsummaryrefslogtreecommitdiff
path: root/core/collections.nom
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2018-10-30 23:42:04 -0700
committerBruce Hill <bruce@bruce-hill.com>2018-10-30 23:42:36 -0700
commitea3197aaffba00318920ed5e1e33ca5f2a5e6c5c (patch)
tree2ec4aff13c7a54a3730994525b591ac60528b5ad /core/collections.nom
parente7e84c9eda38c930f5475301de4a449dcf59e8b6 (diff)
Fully working version of (action [foo]: baz) -> ((foo) means: baz)
refactor and misc other changes.
Diffstat (limited to 'core/collections.nom')
-rw-r--r--core/collections.nom57
1 files changed, 31 insertions, 26 deletions
diff --git a/core/collections.nom b/core/collections.nom
index 3877d31..ae7f5f1 100644
--- a/core/collections.nom
+++ b/core/collections.nom
@@ -1,4 +1,4 @@
-#!/usr/bin/env nomsu -V4.8.8.6
+#!/usr/bin/env nomsu -V4.8.10
#
This file contains code that supports manipulating and using collections like lists
and dictionaries.
@@ -45,17 +45,17 @@ test:
# List Comprehension
test:
assume (((% * %) for % in [1, 2, 3]) == [1, 4, 9])
-parse [%expression for %item in %iterable] as (..)
+(%expression for %item in %iterable) parses as (..)
result of:
%comprehension = []
for %item in %iterable:
%comprehension::add %expression
return %comprehension
-parse [..]
+[..]
%expression for %index in %start to %stop via %step
%expression for %index in %start to %stop by %step
-..as (..)
+..all parse as (..)
result of:
%comprehension = []
for %index in %start to %stop via %step:
@@ -66,15 +66,15 @@ parse [..]
test:
assume (((% * %) for % in 1 to 3) == [1, 4, 9])
-parse [%expression for %var in %start to %stop] as (..)
+(%expression for %var in %start to %stop) parses as (..)
%expression for %var in %start to %stop via 1
test:
assume (("\%k,\%v" for %k = %v in {x:1}) == ["x,1"])
-parse [..]
+[..]
%expression for %key = %value in %iterable
%expression for %key %value in %iterable
-..as (..)
+..all parse as (..)
result of:
%comprehension = []
for %key = %value in %iterable:
@@ -84,7 +84,9 @@ parse [..]
# Dict comprehensions
test:
assume (((% * %) = % for % in [1, 2, 3]) == {1:1, 4:2, 9:3})
-parse [%key = %value for %item in %iterable, %key %value for %item in %iterable] as (..)
+[..]
+ %key = %value for %item in %iterable, %key %value for %item in %iterable
+..all parse as (..)
result of:
%comprehension = {}
for %item in %iterable:
@@ -93,20 +95,20 @@ parse [%key = %value for %item in %iterable, %key %value for %item in %iterable]
test:
assume ((%k = (%v * %v) for %k = %v in {x:1, y:2, z:3}) == {x:1, y:4, z:9})
-parse [..]
+[..]
%key = %value for %src_key = %src_value in %iterable
%key %value for %src_key %src_value in %iterable
-..as (..)
+..all parse as (..)
result of:
%comprehension = {}
for %src_key = %src_value in %iterable:
%comprehension.%key = %value
return %comprehension
-parse [..]
+[..]
%key = %value for %item in %start to %stop via %step
%key %value for %item in %start to %stop via %step
-..as (..)
+..all parse as (..)
result of:
%comprehension = {}
for %item in %start to %stop via %step:
@@ -117,14 +119,14 @@ parse [..]
test:
assume (((% * %) = % for % in 1 to 3) == {1:1, 4:2, 9:3})
-parse [..]
+[..]
%key = %value for %item in %start to %stop
%key %value for %item in %start to %stop
-..as (%key = %value for %item in %start to %stop via 1)
+..all parse as (%key = %value for %item in %start to %stop via 1)
test:
assume (([[1, 2], [3, 4]] flattened) == [1, 2, 3, 4])
-action [%lists flattened]:
+externally (%lists flattened) means:
%flat = []
for %list in %lists:
for %item in %list: %flat::add %item
@@ -132,29 +134,30 @@ action [%lists flattened]:
test:
assume ((entries in {x:1}) == [{key:"x", value:1}])
-parse [entries in %dict] as ({key:%k, value:%v} for %k = %v in %dict)
+(entries in %dict) parses as ({key:%k, value:%v} for %k = %v in %dict)
test:
assume ((keys in {x:1}) == ["x"])
-parse [keys in %dict, keys of %dict] as (%k for %k = %v in %dict)
+[keys in %dict, keys of %dict] all parse as (%k for %k = %v in %dict)
test:
assume ((values in {x:1}) == [1])
-parse [values in %dict, values of %dict] as (%v for %k = %v in %dict)
+[values in %dict, values of %dict] all parse as (%v for %k = %v in %dict)
# Metatable stuff
test:
%t = {}
set %t 's metatable to {__tostring:[%] -> "XXX"}
assume ("\%t" == "XXX")
-compile [set %dict 's metatable to %metatable] to (..)
+(set %dict 's metatable to %metatable) compiles to (..)
Lua "setmetatable(\(%dict as lua expr), \(%metatable as lua expr));"
-compile [%'s metatable, %' metatable] to (..)
+
+[% 's metatable, % 'metatable] all compile to (..)
Lua value "getmetatable(\(% as lua expr))"
test:
assume (({} with fallback % -> (% + 1)).10 == 11)
-compile [%dict with fallback %key -> %value] to (..)
+(%dict with fallback %key -> %value) compiles to (..)
Lua value "\
..(function(d)
local mt = {}
@@ -177,8 +180,10 @@ test:
%keys = {1:999, 2:0, 3:50}
sort %x by % = %keys.%
assume (%x == [2, 3, 1])
-compile [sort %items] to (Lua "table.sort(\(%items as lua expr));")
-parse [sort %items by %item = %key_expr, sort %items by %item -> %key_expr] as (..)
+(sort %items) compiles to (Lua "table.sort(\(%items as lua expr));")
+[..]
+ sort %items by %item = %key_expr, sort %items by %item -> %key_expr
+..all parse as (..)
do:
%keys = ({} with fallback %item -> %key_expr)
lua> "table.sort(\%items, function(x,y) return \%keys[x] < \%keys[y] end)"
@@ -187,12 +192,12 @@ parse [sort %items by %item = %key_expr, sort %items by %item -> %key_expr] as (
test:
assume ((sorted [3, 1, 2]) == [1, 2, 3])
-action [%items sorted, sorted %items]:
+externally [%items sorted, sorted %items] all mean:
%copy = (% for % in %items)
sort %copy
return %copy
-parse [%items sorted by %item = %key, %items sorted by %item -> %key] as (..)
+[%items sorted by %item = %key, %items sorted by %item -> %key] all parse as (..)
result of:
%copy = (% for % in %items)
sort %copy by %item = %key
@@ -200,7 +205,7 @@ parse [%items sorted by %item = %key, %items sorted by %item -> %key] as (..)
test:
assume ((unique [1, 2, 1, 3, 2, 3]) == [1, 2, 3])
-action [unique %items]:
+externally (unique %items) means:
%unique = []
%seen = {}
for % in %items: