>>1
Returning multiple values is not unusual in CL, it's actually pretty useful and can lead to simpler code, however in this case it doesn't return multiple values, it returns a
CONS as found in your alist. The reason for this is that you can specify
key and
test keyword arguments which means your key may be different from the item you're searching for (let's say you're doing a case insensitive search for a string, the value your searched for could be
"string", but item it found could very well be
"STRING" or
"String" and so on. Just because you don't know the reasoning behind some choices in CL doesn't mean it's always for historical reasons. Some thing are, but I'd suggest you consult the documentation or people versed in the history of CL (see comp.lang.lisp) if you want to know the reason something is like it is (if it doesn't make sense to you).
>>2
CL can return multiple values and it's a very useful feature, especially as far as efficiency is concerned(instead of passing consed up lists each time you want to return multiple values), but
assoc (what OP asked about) doesn't return multiple values, it returns the item from the alist that it found.