I've begun to pine for a pattern-matching version of that construct, though. Not sure how well it would fly, but it would nicely generalize pattern matching. The reason I like 'named let' is because it lets you compactly introduce a recursive function while keeping the initial arguments in a place that makes the whole construct easier to understand.
Here's what the 'length' function looks like right now:
(define (length l)
(define fun
acc () -> acc
acc (hd . tl) -> (fun (+ 1 acc) tl)
(fun 0 l)))
And here's what it might look like with a pattern-matching 'named let' variant:
(define (length l)
(let loop (0 l)
acc () -> acc
acc (hd . tl) -> (loop (+ 1 acc) tl)))
Visually I think it should be easy to distinguish from a normal let by the lack of extra levels of parens in the 'binding' spot... and this is in addition to the obvious -> symbols.
One bad side-effect of this is that
let
could no longer be done with defmacro
(as in lib/derived.scm
), and would require a special hack in the parser...
Oooh, here's another possible syntax, this might be even better:
ReplyDelete(let (loop 0 1)
...)
Check out what bonuses are available for the users of BetOnline by clicking right here. BetOnline lately changed a number of} issues on its web site whereas reserving the 카지노 사이트 old design for members preferring it. This will give old players sufficient time to grow accustomed to the new new} version.
ReplyDelete