Common Lisp循环工具中的语法错误

4

这段代码无法编译。注释掉(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))))

信息:

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

8
循环宏要求在循环体之前加上“do”。你的代码中没有。
(loop for i from 1 to n
   (stuff)

and you need

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接