Lispy多次运行函数的方式

时间:2015-04-28 21:46:44

标签: common-lisp

我正在使用函数d生成随机数,我将其收集在列表中,然后对它们进行平均:

 (/ (apply #'+ (list (d 6) (d 6) (d 6) (d 6) (d 6) (d 6))) 6.0)

我想运行函数(d n) i次,将返回的值一起添加,然后除以idotimes不会返回值。我将如何在Common Lisp中执行此操作?

2 个答案:

答案 0 :(得分:8)

(defun r (n f arg)
  "Calls the function F N times with ARG. Returns
the arithmetic mean of the results."
  (/ (loop repeat n sum (funcall f arg))
     n))

(r 6 #'d 6)
  

dotimes不会返回值。

它确实:

CL-USER 21 > (let ((sum 0))
               (dotimes (i 10 sum)        ; <- sum is the return value
                 (incf sum (random 10))))
45

答案 1 :(得分:3)

IRC非常善良的灵魂给了我这个解决方案:

(loop repeat 6 collect (d 6))