2010-02-21 64 views
4

這拒絕編譯。註釋掉(setf roll行可以編譯。但是,(setf roll...本身在REPL中正確評估。Common Lisp Loop設施中的語法錯誤

計劃:

;; loop n times 
; sum up number of hits over value v 
(defun num-hits (n v) 
    (let 
    ((roll) 
     (table)) 
    (setq table (make-hash-table)) 
    ;;until i == n 
    (loop for i from 1 to n 
     (setf roll (rolld6)) 
;  (if (nilp (view_hash table)) 
;   (oxuassign_hash table roll 1) 
;  (assign_hash table (+ 1 (view_hash table roll)))) 
    ) 
    (+ (view_hash table 5) (view_hash table 6)))) 

消息:

*** - LOOP: illegal syntax near (SETF ROLL (ROLLD6)) in (LOOP FOR I FROM 1 TO N (SETF ROLL (ROLLD6))) 

回答

8

循環宏要求的循環體之前 「做」。你有

(loop for i from 1 to n 
    (stuff) 

,你需要

(loop for i from 1 to n do 
    (stuff)) 
+0

Durp。謝啦! – 2010-02-21 08:47:29