Hi! I noticed the 'daemon function does a fine job distinguishing builtin C functions from lisp functions. However, it redefines the function to evaluate all arguments, rather than letting the function decide for itself. Here is an example transcript:
: (setq a 3) -> 3 : (while (gt0 (dec 'a)) (prinl @)) 2 1 -> 1 : (daemon 'while (prinl "while called")) -> (@ (prinl "while called") (pass $268284695)) : (setq a 3) -> 3 : (while (gt0 (dec 'a)) (prinl @)) 3 while called # infinite loop -- UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe