gpt4 book ai didi

list - 如何在 Scheme 中使用 Car 和 Cdr break (11 (12 13))

转载 作者:行者123 更新时间:2023-12-05 00:45:19 25 4
gpt4 key购买 nike

我只需要从列表中返回那些奇数值,所以我试图使用 car 和 cdr 函数来打破我的列表。我有一个递归函数调用,它检查 Car 是否返回一个列表,然后使用 car 和 cdr 进一步打破它,否则只需将第一个元素传递给函数调用检查是否为奇数。

特殊情况 (10 11 (12 13)) 的问题在于汽车返回 10cdr 返回 (11 (12 13))

然后在第二次迭代中汽车返还 (11 (12 13))cdr 返回 (11 (12 13))

所以我怎样才能使用 car 和 cdr 进一步打破我的列表。我需要在最终答案中保留方括号,并且只返回具有奇数整数值的列表。

最佳答案

对于需要在任意嵌套列表上工作的函数,我发现首先编写平面列表版本(在我们的例子中是 filter-odd)然后编辑它以生成嵌套版本(我将其称为 filter-奇*)

首先是正常的过滤器奇数

(define filter-odd
(lambda (ls)
(cond
[(null? ls) '()]
[(odd? (car ls)) (cons (car ls) (filter-odd (cdr ls)))]
[else (filter-odd (cdr ls))])))

现在进行 filter-odd*(右侧将留作练习(尽管您似乎知道问题的答案))

(define filter-odd*
(lambda (ls)
(cond
[(null? ls) '()]
[(list? (car ls)) #| Do something with both car and cdr of ls |# ]
[(odd? (car ls)) (cons (car ls) (filter-odd* (cdr ls)))]
[else (filter-odd* (cdr ls))])))

请注意,此设计模式可用于帮助编写任何递归程序并将其从仅处理平面列表转换为处理任意深度列表。

关于list - 如何在 Scheme 中使用 Car 和 Cdr break (11 (12 13)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10124194/

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