gpt4 book ai didi

scheme - 检查列表是否共享 Racket 中的一个或多个元素

转载 作者:太空宇宙 更新时间:2023-11-03 18:53:23 24 4
gpt4 key购买 nike

我有两个列表,lst1lst2。我想定义一个函数来检查它们是否共享某些元素。例如:

  • (share-some-elements? '(a b) '(a c)) ⇒ true
  • (share-some-elements? '(a b) '(d e f)) ⇒ false
  • (share-some-elements? '(a b) '(a b d e)) ⇒ true

我有一个实现:

(define (share-some-elements? lst1 lst2)
(ormap (λ (x) (member x lst1)) lst2))

它检查 lst2 中的每个元素是否是 lst1 的成员,如果是,则返回 true。

我的问题是:

  1. 还有哪些其他方法可以做到这一点?
  2. 我如何扩展它以支持任意数量的列表? IE。
    • (all-share-some-elements? '(a b) '(a c) '(a d)) ⇒ true
    • (all-share-some-elements? '(a b) '(a c) '(b d)) ⇒ false
    • (all-share-some-elements? '(a b) '(a c) '(b d a)) ⇒ true

有一个关于如何在 python 中的两个列表上执行此操作的类似问题: Checking if two lists share at least one element ,这并不能完全回答我的问题。

最佳答案

这两个问题都可以使用带有可变数量参数的单个过程来解决。假设至少传递了一个列表,我们有:

(define (all-share-some-elements? . lists)
(not (null? (apply set-intersect lists))))

解释:

  • 我们申请set-intersect在所有名单上。
  • 如果交集后的结果为非空,则列表至少共享一个元素。

使用你的例子:

(all-share-some-elements? '(a b) '(a c))
=> #t
(all-share-some-elements? '(a b) '(d e f))
=> #f
(all-share-some-elements? '(a b) '(a b d e))
=> #t

(all-share-some-elements? '(a b) '(a c) '(a d))
=> #t
(all-share-some-elements? '(a b) '(a c) '(b d))
=> #f
(all-share-some-elements? '(a b) '(a c) '(b d a))
=> #t

关于scheme - 检查列表是否共享 Racket 中的一个或多个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47908137/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com