-1

所以我有这个程序需要使用具有以下属性的 Racket 在 Scheme 中编写,我很难过。sublist?使用两个输入调用该函数SL这两个输入都是列表。它检查 S 是否是的子列表L并返回#tor #f

示例类似于:

sublist? of (A A) and (A B C) is #f
sublist? of (A B C) and (A B D A B C D) is #t
sublist? of (A (B)) and (C ((A (B))) (C)) is #t

extractLists需要创建一个名为的小函数来提取列表,并(atomicSublist S L)用于检查两个提取的列表是否每个元素S都在L.

到目前为止我有

(define (atomicSublist S L)
  (cond ((null? L) #f)
        ((equal? S (car L)) #t)
        (else (atomicSublist S (cdr L)))))

第二部分并没有真正做任何事情,甚至不输出 S 的提取值。

更新的代码: 只是为了测试我atomicSublist现在用来检查。

4

3 回答 3

1

从一个更简单的问题开始,然后进行概括。

你将如何编写一个函数来检查一个符号是否'a是一个列表?

于 2012-05-30T19:39:00.950 回答
0

这个问题有点模棱两可。这应该返回什么?(子列表?'(a(b))'(abcde))??

无论如何,这是我写的:

(define (sublist? s l)  
  (cond ((null? s) true)
        ((atom? (car s))
         (cond ((exists? (car s) l) (sublist? (cdr s) (remove-elm (car s) l)))
               (else false)))
        (else 
         (cond ((sublist? (car s) l) (sublist? (cdr s) (remove-elm (car s) l)))
               (else false)))))


(define (exists? elm l)
  (cond ((null? l) false) 
        ((atom? (car l))
         (cond ((symbol=? elm (car l)) true)
               (else (exists? elm (cdr l)))))
        (else
         (cond ((exists? elm (car l)) true)
               (else (exists? elm (cdr l)))))))



(define (remove-elm elm l)
  (cond ((null? l) '())
        ((null? elm) l)
        ((atom? elm)
         (cond ((atom? (car l)) 
                (cond ((symbol=? elm (car l)) (cdr l))
                      (else (cons (car l) (remove-elm elm (cdr l))))))
               (else
                (cons (remove-elm elm (car l)) (remove-elm elm (cdr l))))))
        (else
         (remove-elm (cdr elm) (remove-elm (car elm) l)))))


(define (atom? elm)
  (and (not (null? elm)) (not (pair? elm))))

(sublist? '(aa) ('abcde)) 返回 #f。(sublist? '(abc) '(adbecf)) 返回 #t。(sublist? '(a (b)) '(c ((a (b)) ef))) 返回#t。(sublist? '(a (b) b) '(c ((a (b)) ef))) retrns #f。但是,(sublist? '(a (b)) '(abcd)) 返回 #t。

于 2012-05-31T05:01:05.040 回答
0

我认为您不需要此检查((equal? S (car L) ) #t),因为 L 的汽车永远不会等于列表 S。

这是我为 atomicSublist 想出的内容。

    (define (atomicSublist S L)
        (cond
            [(null? S) #t]
            [(member? (car S) L) (atomicSublist (cdr s) L)]
            [else #f]))
于 2012-05-30T20:51:47.123 回答