我对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)
答案 0 :(得分:5)
ACL2使用LISP语法,这意味着您需要前缀运算符。因此1 / n ^ 2应该是(/ 1(* n n))。
LISP允许将许多字符命名为一个名称,在您的示例中,1 / n ^ 2被视为变量的名称,该变量不绑定任何内容(也不输入)。这就是为什么您会收到“自由出现变量”错误的原因。