在ACL2中添加倒数

时间:2018-09-21 22:10:36

标签: lisp acl2

我对ACL2刚起步,所以我了解到某些人可能会觉得这是一个简单的解决方案,以至于您不愿向我寻求帮助。我试图弄清楚如何使我的代码加到第N个倒数平方(即,如果n = 4,那么我正在寻找1/1 + 1/4 + 1/9 + 1/16)

我有一个将加起来为n的函数,它的工作原理如下所示

(defun sum-up-to-n (n)
(if (zp n)
       0
       (+ n (sum-up-to-n (- n 1)))))

倒数平方如下所示

(defun sum-up-to-nSqRecip (n)
   (if (zp n)
       0
         (+  (sum-up-to-nSqRecip (- n 1))) 1/n^2) ))

我收到此错误“ SUM-UP-TO-NSQRECIP包含自由出现的可变符号 | 1 / N ^ 2 |。注意| 1 / N ^ 2 |在条件的情况下发生(NOT(ZP N)) 来自周围的IF测试。”,我不知道如何解决此错误。

包含的东西

(encapsulate nil
  (set-state-ok t)
  (program)
  (defun check-expect-fn (left right sexpr state)
    (if (equal left right)
      (mv nil (cw "check-expect succeeded: ~x0~%" sexpr) state)
      (er soft nil "check-expect failed: ~x0
      Expected: ~x1
      Actual:   ~x2" sexpr right left)))
  (defmacro check-expect (&whole sexpr left right)
    `(check-expect-fn ,left ,right (quote ,sexpr) state))
  (logic))

(include-book "doublecheck" :uncertified-okp t :dir :teachpacks)
(include-book "arithmetic-5/top" :uncertified-okp t :dir :system)

1 个答案:

答案 0 :(得分:5)

ACL2使用LISP语法,这意味着您需要前缀运算符。因此1 / n ^ 2应该是(/ 1(* n n))。

LISP允许将许多字符命名为一个名称,在您的示例中,1 / n ^ 2被视为变量的名称,该变量不绑定任何内容(也不输入)。这就是为什么您会收到“自由出现变量”错误的原因。