1 point by akkartik 4163 days ago | link "What other list operations do you have in mind?"Well, I've already changed reclist and some so things like this work:`````` > (find 3 3) 3 > (find 3 '(2 . 3)) 3 > (find 4 '(2 . 3)) nil `````` More: https://github.com/nex3/arc/blob/76d078bcd0/arc.arc.t. I expect I've still missed some cases, and I'll keep tweaking them as I run into them until someone objects.-----
 1 point by akkartik 4162 days ago | link Hmm, it seems to work:`````` arc> (= x '(1 2 3)) (1 2 3) arc> (pushnew nil x) (nil 1 2 3)``````-----
 2 points by rocketnia 4162 days ago | link I think the membership check you're using is like this:`````` (The final cdr is an element iff it isn't nil.) If the list is... A cons cell: If the car is the value we're looking for, succeed. Otherwise, continue by searching the cdr. Nil: Fail. A non-cons, non-nil value: Continue by comparing the list to the value we're looking for. `````` I feel we could simplify this specification by rewriting the last two cases in one of these ways, ordered from my least to most favorite:`````` (The final cdr is an element.) (This breaks (pushnew nil ...) in existing Arc code.) ... A non-cons value: Continue by comparing the list to the value we're looking for. (The final cdr is not an element.) ... A non-cons value: Fail. (The final cdr is always nil and is not an element.) (Arc 3.1 already uses this.) ... Nil: Fail. A non-cons, non-nil value: Raise an exception. `````` By using the "element iff it isn't nil" approach, you're able to use 'pushnew to traverse the simple argument lists you build as intermediate results of that 'make-br-fn implementation. But I don't know if it's worthwhile to complicate the notion of "list" just to accommodate a special case of argument lists.-----