Common Lisp Loop工具中的语法错误

Pau*_*han 4 common-lisp

这拒绝编译.注释掉该(setf roll行可以编译.但是,(setf roll...它本身在REPL中正确评估.

程序:

;; 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))))
Run Code Online (Sandbox Code Playgroud)

信息:

*** - LOOP: illegal syntax near (SETF ROLL (ROLLD6)) in (LOOP FOR I FROM 1 TO N (SETF ROLL (ROLLD6)))
Run Code Online (Sandbox Code Playgroud)

Zak*_*Zak 8

循环宏在循环体之前需要"do".你有

(loop for i from 1 to n
   (stuff)
Run Code Online (Sandbox Code Playgroud)

而你需要

(loop for i from 1 to n do
   (stuff))
Run Code Online (Sandbox Code Playgroud)