2m: Container from Noun

++ly

List from raw noun

Takes a null-terminated noun and produces a list.

Accepts

a is a null-terminated noun.

Produces

A list.

Source

    ++  ly
      le:nl

Examples

    > (ly [1 2 3 ~])
    ~[1 2 3]

    > (ly "abc")
    ~['a' 'b' 'c']

Discussion

ly is an alias for le:nl.


++my

Map from raw noun

Takes a null-terminated noun and produces a map.

Accepts

a is a noun composed of ordered pairs and terminated with ~.

Produces

A map.

Source

    ++  my
      my:nl

Examples

    > (my [['a' 1] ['b' 2] ~])
    [n=[p='b' q=2] l={[p='a' q=1]} r={}]

Discussion

my is an alias for my:nl.


++sy

Set from raw noun

Takes a null-terminated noun and produces a set.

Accepts

a is a null-terminated noun.

Produces

A set.

Source

    ++  sy
      si:nl

Examples

    > (sy [1 2 3 ~])
    [n=2 l={1 3} r={}]

    > (sy (ly [1 2 3 ~]))
    [n=2 l={1 3} r={}]

    > (sy "abc")
    [n='b' l={'a' 'c'} r={}]

Discussion

sy is an alias for si:nl.


++nl

Noun-to-container operations

Core whose arms contain functions that create various typed nouns from raw nouns.

Source

    ++  nl
      |%

++le:nl

Construct list

Takes a null-terminated noun and produces a list.

Accepts

a is a null-terminated noun.

Produces

A list.

Source

      ++  le
        |*  a=(list)
        ^+  =<  $
          |%  +-  $  ?:(*? ~ [i=(snag 0 a) t=$])
          --
        a

Examples

    > (le:nl [1 2 3 ~])
    ~[1 2 3]

    > (le:nl "abc")
    ~['a' 'b' 'c']

++my:nl

Construct map

Takes a null-terminated noun and produces a map of the same type of the p and q passed in.

Accepts

a is a noun composed of ordered pairs and terminated with ~.

Produces

A map.

Source

      ++  my
        |*  a=(list (pair))
        =>  .(a ^+((le a) a))
        (~(gas by `(map _p.i.-.a _q.i.-.a)`~) a)

Examples

    > (my:nl [['a' 1] ['b' 2] ~])
    [n=[p='b' q=2] l={[p='a' q=1]} r={}]

++si:nl

Construct set

Takes a null-terminated noun and produces a set.

Accepts

a is a null-terminated noun.

Produces

A set.

Source

    ++  si
      |*  a=(list)
      =>  .(a ^+((le a) a))
      (~(gas in `(set _i.-.a)`~) a)

Examples

    > (si:nl `(list [@t *])`[['a' 1] ['b' [2 3]] ~])
    [n=['b' [2 3]] l={['a' 1]} r={}]

++snag:nl

Index

Produces the element at the index a of null-terminated noun b and failing if the noun is null. Lists are 0-indexed.

Accepts

a is a noun.

b is a null-terminated noun.

Produces

A noun.

Sources

    ++  snag
      |*  [a=@ b=(list)]
      ?~  b
        ~_  leaf+"snag-fail"
        !!
      ?:  =(0 a)  i.b
      $(b t.b, a (dec a))

Examples

    > =b [[2 3] [1 4] ~]
    > (snag:nl 0 b)
    [2 3]

    > (snag:nl 2 b)
    ! snag-fail
    ! exit

++weld:nl

Concatenate

Produces a list that is the concatenation of null-terminated nouns a and b.

Accepts

a is a null-terminated noun.

b is a null-terminated noun.

Produces

A list.

Source

    ++  weld
      |*  [a=(list) b=(list)]
      =>  .(a ^+((le a) a), b ^+((le b) b))
      =+  42
      |-
      ?~  a  b
      [i=i.a t=$(a t.a)]

Examples

    > =b [[2 3] [1 4] ~]

    > (weld:nl b [8 9 ~])
    [i=[2 3] t=[i=[1 4] t=~[8 9]]]