Recursion 使用Lisp递归检查连续数字

Recursion 使用Lisp递归检查连续数字,recursion,lisp,Recursion,Lisp,我试图编写一个递归函数来检查列表中的元素是否连续增加 (defun test (lst) (if (null lst) 1 (if (= (car lst) (1- (test (cdr lst)))) 1 0))) (setq consecutive '(1 2 3 4)) (setq non-consecutive '(2 5 3 6)) 结果是: CL-USER> (test non-consecutive) 0 CL-USER>

我试图编写一个递归函数来检查列表中的元素是否连续增加

(defun test (lst)   
 (if (null lst)
   1
   (if (= (car lst) (1- (test (cdr lst))))
    1     
    0)))

(setq consecutive '(1 2 3 4))
(setq non-consecutive '(2 5 3 6))
结果是:

CL-USER> (test non-consecutive)
0
CL-USER> (test consecutive)
0

(连续测试)
应返回1。如何正确编写此函数?

检查序列中的数字是否连续,即。, 随着步骤1的增加,您需要:

(defun list-consecutive-p (list)
  (or (null (cdr list))
      (and (= 1 (- (second list) (first list)))
           (list-consecutive-p (rest list)))))
然后

NB。数字不能很好地替代布尔人


PS。我想知道这是否与…有关,以检查序列中的数字是否连续,即。, 随着步骤1的增加,您需要:

(defun list-consecutive-p (list)
  (or (null (cdr list))
      (and (= 1 (- (second list) (first list)))
           (list-consecutive-p (rest list)))))
然后

NB。数字不能很好地替代布尔人


PS。我想知道这是否与……

您的递归测试(car lst)与(1-“返回测试调用”)有关,即始终是(1-0)或(1-1)如何以递归方式正确安排该部分?应该返回什么
(test'(1 3 5 7))
返回?@sds连续奇数根本不需要检查。嗯,如果我能检查一下“(1234)序列,我想我也能检查一下。顺便问一下,(1234)序列在英语中也叫“连续数字”吗?对于这样一个序列,最正确的名称是什么,即数字是一个接一个地增加吗?@Romario:你是在测试连续的还是增加的?你的递归测试(car lst)与(1-“测试调用的返回”),始终是(1-0)或(1-1)如何以递归的方式正确排列该部分?应该如何
(test'(1 3 5 7))
return?@sds连续奇数根本不需要检查。嗯,如果我能检查一下“(1234)序列,我想我也能检查一下。顺便问一下,(1234)序列在英语中也叫“连续数字”吗?对于这样一个序列,最正确的名称是什么,即数字是一个接一个地增加吗?@Romario:你是在测试连续还是增加?看起来不错。“or”&“and”结构是我最初想到的,但我做不到。那是因为你试图返回数字而不是布尔值。是的。起初,我使用布尔值(即nil&t)进行编译,但是Lisp编译器抛出了诸如“nil不是整数”之类的错误,并且每当我尝试运行它时,CLISP编译器就会退出。所以我试着用数字来做,但没有成功:)那是因为你试图把步骤和返回值混为一谈。看起来不错。“or”&“and”结构是我最初想到的,但我做不到。那是因为你试图返回数字而不是布尔值。是的。起初,我使用布尔值(即nil&t)进行编译,但是Lisp编译器抛出了诸如“nil不是整数”之类的错误,并且每当我尝试运行它时,CLISP编译器就会退出。所以我试着用数字来做这件事是徒劳的:)那是因为你试图把步骤和返回值混为一谈。