Discussion:
[Lisp] ``,@',
Lars Brinkhoff
2012-09-25 06:44:28 UTC
Permalink
Nestade backquoteuttryck är roliga. Jag har nog aldrig haft anledning
att skriva ,@', förut.

(defun map-flet-subforms (bindings body)
(flet ((map-lambda-list (lambda-list)
(mapcar (lambda (arg)
(destructuring-case arg
((x y . z) ``(,',x ,(%map ,y) ,@',z))
(x `',x)))
lambda-list)))
``(flet (,,@(mapcar
(lambda (binding)
(destructuring-bind (name lambda-list . body) binding
``(,',name (,,@(map-lambda-list lambda-list))
,,@(mapcar (lambda (x) `(%map ,x)) body))))
bindings))
,,@(mapcar (lambda (x) `(%map ,x)) body))))
Lars Brinkhoff
2012-09-25 12:17:13 UTC
Permalink
Någon som använt trippel-`, förresten?
Jag vet inte om jag ska vara imponerad på ett bra eller dåligt
vis. Gick det inte göra på nåt annat vis?
Jo "tyvärr", så jag tyckte det var bäst att posta koden innan jag
gjorde om den till att bara ha en backquotenivå.
Måste väl erkänna att jag ofta tycker FLET gör saker mer än lovligt
hårigt, även om jag inser hur det kan vara nyttigt ibland.
Observera att det var två-tre olika flet inblandade. En flet
analyseras, och sedan byggs en ny upp. Dessutom finns en
hjälpfunktion definerad med flet.

Om du syftade på att flet är krånglig att analysera, kan jag verkligen
instämma. Men om man vill göra en komplett kodpromenerare, får man
bara bita i det håriga äpplet.

Håller med om att det ibland är trevligre att använda en ny defun i
stället för flet/labels. Undantaget är väl främst om man vill kunna
använda den lexikala miljön kring flet.

Loading...