let mult = \ xs -> \ k -> begin setX 1; setY xs; setZ ""; while isCons getY do begin let n = car getY in if n == 0 then k 0 else begin setX (getX*n); setY (cdr getY); setZ (getZ ++ " " ++ n) end end; getX end in let list = cons 1 (cons 2 (cons 3 (cons 0 (cons 4 (cons 5 nil))))) in let result = callcc (\ k -> mult list k) in pair result getZ