soma.cell

Collections

Collections, in the reference of the Soma programming language (soma 3.2.4). A block marked ✓ is a whole program that soma check accepts; the others are excerpts.

// List
let items = list(1, 2, 3)           // or: let items = [1, 2, 3]
let items = push(items, 4)          // append
let pairs = enumerate(items)        // list of {index, value} maps
let first = items[0]                // bracket index (or nth(items, 0))
items[0] = 99                       // index assignment (in place)
let two = with(items, 1, 88)        // functional: copy with element 1 replaced
let rev = reverse(items)
let r = range(0, 10)                // [0..9]
let down = range(9, -1, -1)         // [9,8,..,0] — step may be negative
let evens = range(0, 10, 2)         // [0,2,4,6,8]; a zero step raises kind range
let sorted = sort(items)            // ascending
let sorted = sort(items, "desc")    // descending
let n = len(items)

// Map
let m = map("name", "Alice", "age", 30)
let name = m.name                   // field access
let age = m["age"]                  // bracket index (or m.get("age"))
m["email"] = "[email protected]"              // index assignment
let keys = m.keys()                 // or keys(m); m.keys without parentheses also answers
let vals = m.values()
let updated = m |> with("city", "NYC")
let smaller = without(m, "age")     // copy minus one key
let merged = merge(m, map("x", 1))  // right side wins on conflicts

// String — bracket index returns the 1-char string at that position
let s = "hello"
let h = s[0]                        // "h" ; out-of-bounds raises