方案:如何检查列表的所有元素是否相同

Jos*_*eph 5 lambda scheme equality list

我想创建一个Scheme函数,如果它传递一个完全由相同元素组成的列表,则生成true.这样的清单将是'(1 1 1 1).它会像'(1 2 1 1)那样产生错误.

这是我到目前为止:

    (define (list-equal? lst)
      (define tmp (car lst))
      (for-each (lambda (x) 
                   (equal? x tmp))
                 lst)
      )
Run Code Online (Sandbox Code Playgroud)

显然这是不正确的,我是新手.我想我无法表达在那里我应该返回步骤#t#f.

提前致谢!

编辑:我摆弄了一点,找到了一个似乎工作得很好的解决方案,并且只需要很少的代码:

(define (list-equal? lst)
 (andmap (lambda (x) 
        (equal? x (car lst)))
      lst))
Run Code Online (Sandbox Code Playgroud)

再次感谢大家的帮助.

Dan*_*iel 0

(define (list-equal? lst)
    (if (= (cdr lst) null)
        true
        (and (equal? (car lst) (cadr lst))
             (list-equal? (cdr lst)))))
Run Code Online (Sandbox Code Playgroud)