[alexandria-devel] Implementation of DELETE-FROM-PLIST

Stas Boukarev stassats at gmail.com
Sun Feb 24 01:23:18 UTC 2013


Robert Smith <quad at symbo1ics.com> writes:

> On Sat, Feb 23, 2013 at 4:19 PM, Stas Boukarev <stassats at gmail.com> wrote:
>> It's wrong because it's completely useless, why would anyone use
>> delete-from-plist without using the value returned by it, if the
>> original list it modifies has the wrong result? Having to prepend two
>> NILs is just bogus.
>
> 1. Because some people like or prefer to modify data structures
> (especially when you have elaborate data structures), and not
> bindings.
Well, those people should learn that it's not possible in
general. Particularly with lists, because of NIL.

> 2. Having to prepend two NILs is fine I think. Yes it is hacky, but I
> don't see any inherent issue with it. It just establishes a (few)
> conses that act as the "head" or "entry point" to the list.
What if the key you want to remove is NIL?

>> But that part shouldn't be in alexandria (or any sane library, for that
>> matter) either way, because it encourages erroneous usage, seemingly
>> doing the right thing, but breaks when it comes to returning NIL.
>
> I don't think it's erroneous. We aren't conflating the ideas of
> modifying a data structure and modifying a binding. By not doing that
> extra mutation, we rely on the user to "finish the job" by re-setting
> their variable to the new value.
There's no other way to obtain the correct results otherwise. Having it
to work in 99% is worse than having it not to work at all, because
people might forget about the remaining 1% case more easily. So you end
up with doing extra work which has no use. The goal is simplicity, not
having to memorize in which cases it's alright and which it's not. Just
use the return value and be merry.

>> And there's alexandria:delete-from-plistf for people who are afraid of
>> an extra SETF.
>
> In this, we are trading a purely functional (i.e., non-special/macro)
> solution for a macro solution. Doesn't that go against the grain of
> the prevalent ideology of Lisp?
There's no trading, delete-from-plistf is just a define-modify-macro for
delete-from-plist.

-- 
With best regards, Stas.




More information about the alexandria-devel mailing list