我需要尝试展示一个找到列表最小值的函数,我觉得我快要得到它但实际上无法得到它。
导师给了我们这个功能:
(defun minlist (l)
(if (<= (len l) 1)
(first l)
(if (<= (first l) (minlist (rest l)))
(first l)
(minlist (rest l)))))
然后说
;;; TODO: Write a little theory that verifies that the minlist of a list is
;;; less than or equal to any element of the list
;;; Hint: Use this declaration to generate a non-empty list
;;; (n :value (random-between 1 10)
;;; l :value (random-natural-list-of-length n))
然后我做了:
(defproperty-program minlist-<=-member (n)
(if ((n :value (random-between 1 10)
l :value (random-natural-list-of-length n)))
(<= (min-list l) (first l))
(nil)))
Proof Pad 中的哪个给了我一个错误,我无法弄清楚我做错了什么。
错误是:
硬 ACL2 错误:缺少 N 的 :value 参数
TOP-LEVEL 中的 ACL2 错误:尝试对表单进行宏扩展
(EXPAND-VARS (N)
(IF ((N :VALUE (RANDOM-BETWEEN 1 10)
L
:VALUE (RANDOM-NATURAL-LIST-OF-LENGTH N)))
(<= (MIN-LIST L) (FIRST L))
(NIL))),
宏体的评估导致以下错误:
评估中止。要调试,请参见 :DOC print-gv,参见 :DOC 跟踪,并参见 :DOC wet。