On Sat, Nov 19, 2016 at 11:55 PM, Panicz Maciej Godek <godek.mac...@gmail.com> wrote: > > > 2016-11-19 19:34 GMT+01:00 Jan Synáček <jan.syna...@gmail.com>: >> >> Hi, >> >> scheme@(guile-user)> ,use (srfi srfi-1) >> scheme@(guile-user)> (take (list 1 2 3) 4) >> ERROR: In procedure list-head: >> ERROR: In procedure list-head: Wrong type argument in position 1 >> (expecting pair): () >> >> scheme@(guile-user) [1]> (drop (list 1 2 3) 4) >> ERROR: In procedure list-tail: >> ERROR: In procedure list-tail: Wrong type argument in position 1 >> (expecting pair): () >> >> Please, tell me that this is just a mistake... This can't be true. I >> still can't believe it. This is from 2.0.11. Please, tell me that the >> implementation is fixed in 2.2. >> >> Yours truly puzzled, > > > I don't know why you find it so puzzling. You can't take or drop something > that "isn't there" (you can't take a car or cdr from an empty list as well, > although e.g. in the language of "The Little Prover" (car '()) and (cdr '()) > both evaluate to '() to assure their totality). If you need, you can define > your own variants that take/drop at most n elements of list.
Not only that you "can", it's also IMHO a fool-proof implementation and I can't see any reason why it should behave differently. https://hackage.haskell.org/package/base-4.8.2.0/docs/Data-List.html#v:take Cheers, -- Jan Synáček