hi all, I want to share something very important related to picolisp:
1. Half year ago I was wonder how to implement (prog3) (return third evaluated expression) (without success), Regenaxer implemented it for me. I promised I understand it someday. This day came, *now* I understand how (run) works and why. This is so simple and important as core principle. Look at this two versions of (prog3) from Alexander: (de prog3-1 (A B Res . Prg) (run Prg 1) Res ) (de prog3-2 (A B Res . @) Res) 2. As you may know (do) function has this form: (do 'flg|num ['any | (NIL 'any . prg) | (T 'any . prg) ..]) -> any Someday I was wonder how to implement (do) without NIL and T checks of clauses. I've implemented it via (run) as a try: (de dotimes (N . Prg) (while (ge0 (dec 'N)) (run Prg 1) ) ) (let (A -1 B 0 Prg 777) (dotimes 5 (inc 'A) (setq Prg (>> 1 Prg)) (dec 'B) ) (test T (bool (and (= A 4) (= B -5) (= Prg 24) ) ) ) ) 3. (dotimes) much slower than (do) anyway in this form and understandable why: (bench (do 10000000) ) 0.117 sec (bench (dotimes 10000000) ) 2.403 sec Mike