According to the SRFI-1 spec, 'length+' must be passed a proper or circular list. It should raise an error when passed a non-pair or an improper list, but instead it returns #f in such cases: --8<---------------cut here---------------start------------->8--- scheme@(guile-user)> (use-modules (srfi srfi-1)) scheme@(guile-user)> (length+ 5) $1 = #f scheme@(guile-user)> (length+ 'x) $2 = #f scheme@(guile-user)> (length+ '(x . y)) $3 = #f --8<---------------cut here---------------end--------------->8--- One side effect of this is that SRFI-1 'map', which uses 'length+' to validate the arguments and find the shortest length, accepts improper lists and non-pairs as arguments as long as one of the arguments is a proper list: --8<---------------cut here---------------start------------->8--- scheme@(guile-user)> (map + '(1 2) '(1 2 3 . 4)) $4 = (2 4) scheme@(guile-user)> (map + '() 2) $5 = () scheme@(guile-user)> (map + '(1) 2) ERROR: In procedure cdr: ERROR: In procedure cdr: Wrong type (expecting pair): 2 --8<---------------cut here---------------end--------------->8--- The attached patch fixes these problems. Mark