List 方案:连续3个数字,执行

List 方案:连续3个数字,执行,list,scheme,List,Scheme,目前我有一个元素1 2 1 2 0 1 0的列表 我试图编写的函数的要点是,它应该显示一种可能性,即在一行中显示相同数字的3,这将是一个“获胜”案例 我想要的输出是1 2 1 2 0 1 0。 调用该函数时,其格式为 显示下2个列表 我想我会选择名单上的那辆车,如果有办法储存/记住我得到的那辆车,以防我再次要求它,并想检查它是否匹配 最接近基本循环的是命名的let构造。下面是一个简单的实现,可以解决您的问题: (define (next e lst) ; l1 : part of the l

目前我有一个元素1 2 1 2 0 1 0的列表

我试图编写的函数的要点是,它应该显示一种可能性,即在一行中显示相同数字的3,这将是一个“获胜”案例

我想要的输出是1 2 1 2 0 1 0。 调用该函数时,其格式为 显示下2个列表


我想我会选择名单上的那辆车,如果有办法储存/记住我得到的那辆车,以防我再次要求它,并想检查它是否匹配

最接近基本循环的是命名的let构造。下面是一个简单的实现,可以解决您的问题:

(define (next e lst)
  ; l1 : part of the list already processed (reversed)
  ; l2 : part of the list still to be processed
  ; c-2: element before previous
  ; c-1: previous element
  ; res: result (list of winning cases
  (let loop ((l1 null) (l2 lst) (c-2 null) (c-1 null) (res null))
    (if (null? l2)
        (reverse res)
        (let ((ca (car l2)) (cd (cdr l2)))
          (loop (cons ca l1) cd c-1 ca
                (if (and (= ca 0) (= c-2 e) (= c-1 e))
                    (cons (append (reverse l1) (cons c-1 cd)) res) ; build winning case
                    res))))))
然后


非常感谢你!但是我有一个问题,如果我想用a,b,c这样的字母来代替它,我怎样才能使它工作,这样它就不会说下一个a'a b。。。a是一个未绑定的变量吗?好奇,但解释得很好:在字母的情况下,什么将代表空位置-也就是0?它能与诸如“e”之类的表示空位置的东西一起工作吗?如果没有,只是好奇。最后,如果我想阻止一个玩家连续拥有3个,那么我将如何修改现有代码,让我们假设1是玩家1,以便下一个1'1 2 1 2 0 0 1 0返回1 2 1 2 1 0 1 0?
> (next 2 '(1 2 1 2 2 0 0 1 0))
'((1 2 1 2 2 2 0 1 0))

> (next 2 '(1 2 1 2 2 0 2 2 0))
'((1 2 1 2 2 2 2 2 0) (1 2 1 2 2 0 2 2 2))

> (next 1 '(1 2 1 2 2 0 1 1 0))
'((1 2 1 2 2 0 1 1 1))