scheme吧 关注:1,488贴子:962
  • 3回复贴,共1

【请教】 在list里面鉴定是不是一样的元素

只看楼主收藏回复

请教怎样在scheme写这个, 我从C++刚过来学习,有点搞不清了
我想从一个list里面找相同element,如果有就输出#f, 如果没有就输出#t
比如(diff? '(2 7 1 4 1) ;表示这这个list里面的element是不是都是不一样
#f
如果 (diff? (1 2 3 4 5 6))
#t
(define diff?
(lambda (L)
(cond
((null? L) #f)
((equal? (car L) (car(cdr L))) (diff (cdr L)))
((diff? (cdr L)))
)))
(all-different? '(1 2 3 1))
我这里有error出现:
car: contract violation
expected: pair?
given: '()


IP属地:美国1楼2017-02-21 12:58回复
    这是我的代码:
    (define all-different?
    (lambda (ls)
    (if [or (null? ls) (null? (cdr ls))]
    #t
    (and (not (member (car ls) (cdr ls)))
    (all-different? (cdr ls))))))
    你的第二个case中,(cdr L)如果是'(),就不能取car了


    2楼2017-08-05 22:26
    回复