libera/#lisp - IRC Chatlog
Search
5:25:44
a-m-g
Hi all. In Common Lisp, how would I bind variables (ie using let) only if a variable is true?
5:33:01
samebchase
a-m-g: I'm assuming you want something like Clojure's `if-let`? There's no built-in in CL which allows you to do that, however, there are some Clojure-inspired libraries which have an `if-let`. In any case, it should not be too difficult to whip up your own.
5:33:46
moon-child
a-m-g: if so, you could say (progv (if cond '(*var*) '()) (if cond (list value) '()) body)
5:41:16
a-m-g
Hey all. What I'm trying to do is check a switch, and if the switch is true, then bind these variables.
5:49:59
moon-child
if you are looking for something lexical, then, modulo mutation, something like (let ((x (if cond new-value x))) ...) would do the trick
5:51:10
moon-child
with mutation ... I don't think it would be possible to do better than duplicating the entire body (though of course that is a cinch with #n= et #n#)
8:13:12
holycow
what is the (, bit of the form? I have never seen that before an never seen that used anywhre. google returns nothing similar to that
8:20:31
holycow
i mean, that sounds right, i have never seen a flop inside a bracket and before any function / list item
8:25:43
wasamasa
> <program> and each <arg> are implicitly quasiquoted. <program> can be a string, symbol, number, or an unquote expression ,e that evaluates to a value of one of those types. Each <arg> follows the same rules as <program>, but can additionally be an unquote-splicing expression ,@e that evaluates to a list of multiple arguments where each element is a string, symbol, or number.
8:26:32
wasamasa
the idea is that normally, a macro invocation treats all of its arguments as if they're quoted, but an unquote would allow exceptions to this
8:26:34
holycow
oh. looks like i have a bunch of new learning to do. thank you kindly wasamasa. i really appreciate that!
8:28:12
wasamasa
note that this trick doesn't work universally in all the lisps, elisp for example doesn't support it
8:28:55
holycow
i have been avoiding macros, but i guess it is time to dig in. i did not expect the great links tho