所以我有这个程序需要使用具有以下属性的Racket在Scheme中编写,我很难过。该函数名为sublist?
,其中两个输入S
和L
都是列表。它会检查S是否为L
的子列表,并返回#t
或#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
的每个元素是否都在{{1} }}
到目前为止我已经
了L
第二部分并没有真正做任何事情,甚至没有输出提取的S值。
更新了代码:
仅用于测试我现在使用(define (atomicSublist S L)
(cond ((null? L) #f)
((equal? S (car L)) #t)
(else (atomicSublist S (cdr L)))))
来检查。
答案 0 :(得分:1)
从一个更简单的问题开始然后概括。
您如何编写一个检查符号'a
是否为列表的函数?
答案 1 :(得分: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]))
答案 2 :(得分:0)
这个问题有点含糊不清。这会带来什么回报? (子列表?'(a(b))'(a b c d e))??
无论如何这里是我写的:
(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))))
(子列表?'(a a)(' a b c d e))返回#f。 (子列表?'(a b c)'(a d b e c f))返回#t。 (子列表?'(a(b))'(c((a(b))e f)))返回#t。 (子列表?'(a(b)b)'(c((a(b))e f)))后退#f。但是,(子列表?'(a(b))'(a b c d))返回#t。