Hacker News new | ask | show | jobs
by chubot 314 days ago
let’s implement split-by-double-dash, a function (or a program) that would return two lists: args that come before -- and ones that come after.

split-by-double-dash a b c -- d e f should return the lists [a, b, c] and [d, e, f]

FWIW in YSH (https://oils.pub/ysh.html), you can do this in a style that's like Python and JavaScript, but you can also combine it with shell idioms.

First create it and pretty print it:

    ysh-0.34$ var li = :| a b c -- d e f |  # shell word style, ['a', 'b'] style is also accepted

    ysh-0.34$ = li  # pretty print with =
    (List)  ['a', 'b', 'c', '--', 'd', 'e', 'f']
Then test out the indexOf() method on strings:

    ysh-0.34$ = li.indexOf('--')
    (Int)   3
Then write the function:

    ysh-0.34$ func splitBy(li) {
            >   var i = li.indexOf('--')
            >   assert [i !== -1]
            >   return ( [li[ : i], li[i+1 : ]] )  # same slicing as Python
            > }
Call it and unpack it

    ysh-0.34$ var front, back = splitBy(li)

    ysh-0.34$ = front
    (List)  ['a', 'b', 'c']
Use it in shell argv, with @myarray as splicing:

    ysh-0.34$ write -- @back
    d
    e
    f
1 comments

YSH looks very nice here, thanks. I thought to mention YSH, but have no experience with it, so I hoped you would comment.

(I guess we're duplicating threads at this point :D)