4 ms·
Maybe you could use something along the lines of &rest to optionally support a pattern shorter than the matched list?
by IHackedHN 18y ago
Maybe you could use something along the lines of &rest to optionally support a pattern shorter than the matched list?
- pg 18y agoYou could do that with a dot now. The trouble is, you end up creating a junk variable: arc> (let (x . y) '(a b c) y) (b c)
- IHackedHN 18y agoMaking users create junk variables seems to me like better behavior than the current implicit behavior. It's your decision, though, of course. Anyway, is it safe to assume that you're not going to try to get me arrested or anything?
- pg 18y agoI feel like unnecessary variables are extra bad; in cognitive terms they feel like they add more than one token to the length of a program. Do you mean your username is actually descriptive? Since you are obviously a Lisp hacker, I'd be happy to have a truce. Can you send me an email?
- IHackedHN 18y agoThank you. I've sent you an email.
- simonb 18y agoBut at the same time this junk variable is code-as-documentation professing the incomplete destructuring is intentional. You could go a step further and have a special ignore symbol, (for instance * ) like most pattern matching languages/libraries have with the property that it can appear multiple times: arc> (let (x * y . *) '(a b c d e f) y) c
- wingo 18y agoYou don't have to name it. It could be _. (let (x . _) '(a b c) x) It sounds like you're treating list destructuring like CL's mvbind. While it's subjective of course, I'm more comfortable with the runtime doing what I mean when I control the number of values (modulo `(apply values ...)'). I'm not comfortable with destructuring values "flexibly" when I don't control the data coming in.
- parenthesis 18y agoExcept "_" is a perfectly good name for a symbol in Arc. "nil" could be used instead, since nil isn't allowed to be rebound. (let (x . nil) '(a b c) x) even works already, since (unless it's been changed in some newer version of Arc I haven't installed yet) Arc just silently ignores the let-ing of nil: (let nil t nil) ---> nil