Arc Forumnew | comments | leaders | submitlogin
1 point by akkartik 4857 days ago | link | parent

Ok, I'm starting to see. So the code in each branch binds all variables upto that point?

When I see:

  first    first
I'm inclined to read this as, "if you just see a variable (call it first) and nothing else after, just return first." I imagine the evaluation going to the next case and saying[1], "oops, nothing left, ok, go back and execute code for the previous case." Am I on the right track? Hmm, I've never seen anything like this.

And the nil is a branch with an empty 'guard'. Ahhhh.. this is cool :)

[1] Dijkstra hated anthropomorphizing code.



2 points by rocketnia 4857 days ago | link

You're on the right track. ^_^ Like I said, 'delisting just exists to better organize a pattern I use all the time.

A visual example would probably work wonders. Here's the pattern:

  (iflet (<var1> . <rest>) body
    (iflet (<var2> . <rest>) <rest>
      (iflet (<var3> . <rest>) <rest>
        <three-or-more-arg case>
        <two-arg case>)
      <one-arg case>)
    <zero-arg case>)
And here's the same code using (this version of) 'delisting:

  (delisting <rest> body
            <zero-arg case>
    <var1>  <one-arg case>
    <var2>  <two-arg case>
    <var3>  <three-or-more-arg case>)
Any version of 'delisting should have basically the same elements. I'm just not sure where to put them.

Incidentally, halfway through writing that post with 'delisting and 'aif, the 'aif code read (decomposing body ...). XD

-----

1 point by akkartik 4857 days ago | link

Ok, I see the light. That explanation suits me perfectly :)

-----

1 point by rocketnia 4857 days ago | link

I just hope my code doesn't all devolve into "decomposing body" and "ifdecap." >< Talk about anthropomorphizing code.

-----