Paul Nathan
Paul Nathan

Reputation: 40299

Syntax Error in Common Lisp Loop facility

This refuses to compile. Commenting out the (setf roll line lets it compile. However, (setf roll... itself evaluates correctly in the REPL.

Program:

;; 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))))

Message:

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

Upvotes: 4

Views: 1167

Answers (1)

Zak
Zak

Reputation: 1167

The loop macro requires "do" before the loop body. You have

(loop for i from 1 to n
   (stuff)

and you need

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

Upvotes: 8

Related Questions