检查对象是否是" listdiff"在Scheme中

时间:2017-02-28 10:43:12

标签: scheme lisp racket difference-lists

  

listdiff是一对汽车为L并且其cdr为eq的一对?到L,或到(cdr L),或到(cdr(cdr L)))等.listdiff的cdr不必是列表;它可能是任何物体。

     

listdiff D表示(cd D)之前的(车辆D)的前缀。例如,假设ils是不正确的列表(e i o u.y)。然后(cons ils)返回一个空的listdiff,(cons ils(cdr(cdr ils)))返回一个listdiff,其元素与列表(ae)相同,并且(cons(cdr ils)' y)返回与(eiou)元素相同的listdiff。相反,(cons'()ils)和(consil(追加'(e e o o u)' y))都不会返回listdiff。

我想在Racket上创建以下程序:

  

(listdiff?obj)

     

如果obj是listdiff,则返回#t,否则返回#f。

有人可以给我指示吗?

1 个答案:

答案 0 :(得分:0)

这是您可以使用的骨架。

(define (listdiff? pair)
  (define l (car pair))      ; l
  (define needle (cdr pair)) ; needle is what to look for in l
  (define (search haystack)
    ;; #t when haystack looks the same as needle
    ;; #f if haystackk is the empty list
    ;; otherwise recurse to (cdr haystack)
    )

  (search l))