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]]]