1

listdiff 是一对其 car 为 L 且其 cdr 为 eq 的对?到 L,或到 (cdr L),或到 (cdr (cdr L))),等等。 listdiff 的 cdr 不必是列表;它可以是任何对象。

一个 listdiff D 表示 (car D) 在 (cdr D) 之前的前缀。例如,假设 ils 是不正确的列表 (aeiou . y)。然后 (cons ils ils) 返回一个空的 listdiff, (cons ils (cdr (cdr ils))) 返回一个与列表 (ae) 具有相同元素的 listdiff,并且 (cons (cdr ils) 'y) 返回一个 listdiff与 (eiou) 相同的元素。相反, (cons '() ils) 和 (cons ils (append '(aeiou) 'y)) 都不会返回 listdiff。

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

(listdiff?obj)

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

任何人都可以给我指示吗?

4

1 回答 1

0

Here is a skeleton you can use.

(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))
于 2017-02-28T15:23:32.470 回答