Racket 程序的问题 - 无法为程序的解决方案提供更多代码,该解决方案提供了一个列表的子集与另一个列表的子集

Issues with Racket program - unable to come up with further code for the program's solution that comes up with subset of one list compared to another

我是一名刚开始学习代码的编码员,我已经开始了数周的 Racket 之旅。我正在实现一个名为 my-subset 的函数?它有两个参数 lst1 和 lst2,当 lst1 的每个元素都是 lst2 的成员时 return 为真。在这种情况下,空列表被视为所有其他列表的子集。对于这个函数,我不想使用内置的子集函数。

这是我自己写的一些代码,我一直无法完成代码,希望得到一些帮助。第一个函数是一个辅助函数,它将某个值与列表中的每个元素进行比较。第二个函数是实际的子集函数,我在 cond 之后的部分遇到了麻烦,因为我不知道如何编写没有子集的情况,我必须 return false。我正在将 lst 1 中的值与 lst 2 中的每个值进行比较。

(define (member x lst)
  (cond [(empty? lst) #f]
        [(equal? x (first lst)) #t]
        [else (member x (rest lst))]))

(define (my-subset? lst1 lst2)
  (cond [(empty? lst1) #t]
        [(member (first lst1)(list lst2)) #t]
        [else (my-subset? (rest lst1) (list lst2))]))

您离解决方案很近了:

(define (member x lst)
  (cond 
    [(empty? lst)           #f]
    [(equal? x (first lst)) #t]
    [else                   (member x (rest lst))]))

(define (my-subset? lst1 lst2)
  (cond 
    [(empty? lst1)              #t]
    [(member (first lst1) lst2) (my-subset? (rest lst1) lst2)]
    [else                       #f]))

也就是说,如果lst1的第一个元素是lst2的成员,那么 如果 lst1 的其余元素也是 lst2 的一部分,则 lst1lst2 的子集。