3 ms·
That happens in so many languages bar the name and even in some Lisps they aren't called that. Even in Common Lisp, the names typically used are “first” and “r
by Blikkentrekker 6y ago
That happens in so many languages bar the name and even in some Lisps they aren't called that.
Even in Common Lisp, the names typically used are “first” and “rest”, not “car” and “cdr”
- phoe-krk 6y agoI must disagree. I see a lot of CAR and CDR calls in code that I see daily. Also, it's a style error to use FIRST and REST when one operates on cons cells, because those imply a different meaning - that one operates on lists. Sure, the language doesn't care whether you use CAR or FIRST, but the programmer does - and they might know that you treat a cons cell as a pair unto its own, rather than an element of a linked list.
- kazinator 6y agoFeel free to substitute the Python version of getting the first and rest of a list (well, the array that Python calls a list). My comment is not about names, but semantics.
- Blikkentrekker 6y ago`list[0]` and `list[1:]`? Almost any language has convenient ways to get the first element of a sequence, and all but the first, even C, this is not unusual at all to lisps.
- kazinator 6y agoBut car and cdr in Lisp and Scheme only retrieve values; they do not copy any aggregate object. When was the last time you saw recursion on list[0] and list[1:] in a production Python program, or even a tutorial?
- Blikkentrekker 6y ago> But car and cdr in Lisp and Scheme only retrieve values; they do not copy any aggregate object. That's because lists are mutable in Python. Do it on tuples and they retrieve and do not copy. Of course in C, one can simply do `ptr[0]` or `ptr+1` which also only retrieves. > When was the last time you saw recursion on list[0] and list[1:] in a production Python program, or even a tutorial? That is purely a difference of culture, not of what the language facilities, both Scheme and Python allow either style.
- lhjn 6y agoLists are mutable in CL
- Blikkentrekker 6y agoThat would be another thing then where the two Lisps are very far apart, and Python is closer to one of them. Lists are not mutable in Clojure, they are “technically mutable” in R6RS Scheme, but it requires opening up a specific module that many Scheme implementations do not even provide unless compiled with specific flags.