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

问题描述

我是一名刚刚开始学习代码的程序员,我的 Racket 之旅还有几周的时间。我正在实现一个名为 my-subset 的函数?它有两个参数 lst1 和 lst2,仅当 lst1 的每个元素都是 lst2 的成员时才返回 true。在这种情况下,空列表被认为是所有其他列表的子集。对于这个函数,我不想使用内置的子集函数。

这是我个人编写的一些代码,我无法完成代码,希望得到一些帮助。第一个函数是一个辅助函数,它将某个值与列表中的每个元素进行比较。第二个函数是实际的子集函数,我在 cond 之后的部分遇到问题,因为我不知道如何编写没有子集的情况,我必须返回 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))]))

标签: listcomparelogicsubsetracket

解决方案


您非常接近解决方案:

(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它就是 的子集。lst2lst1lst2


推荐阅读