you are missing a * when passing the parameters again to the function
def lst(*l):
if l==():return None
else: return cons(l[0],lst(*l[1:]))
You are passing the empty tuple as a first positional parameter which means that in the next recursion l is actually equal to ((),) (a tuple containing one empty tuple) when it should be ()