gpt4 book ai didi

scheme - 在方案列表中检测#

转载 作者:行者123 更新时间:2023-12-01 15:04:37 26 4
gpt4 key购买 nike

我有一个返回值列表的函数。其中一些值本身可能是空列表,而另一些则不是。但是,在每个列表的末尾,都有一个 #<unspecified>。现值。我理解当函数不返回任何内容时返回此值。

我想修剪这个值以及其他空列表。

我的 list 是这样的:
(() () MD- MC+. #<unspecified>)

我打算对这个列表应用过滤功能。我将应用的标准是 null? .
但是,当这应用于 #<unspecified>值,它给我假的。我怎样才能删除 #<unspecified>列表中的值?

应用过滤器函数后,此列表的输出应为: (MD- MC+)

我该怎么做?

最佳答案

您的列表不是正确的列表,而是虚线列表。 filterfoldmap 等所有高阶函数都要求列表正确,因此无法使用此类列表。

我想知道您坚持使用该列表的原因是否可能是因为生成该列表的过程中存在错误。通常如果你有一个递归过程..

(define (list-add1 lst)
(if (pair? lst)
(cons (add1 (car lst)) (list-add1 (cdr lst)))))

现在,每个策划者都会立即看出这与:

(define (list-add1 lst)
(if (pair? lst)
(cons (add1 (car lst)) (list-add1 (cdr lst)))
'UNDEFINED-IMPLEMENTATION-SPECIFIED-VALUE))

并且在使用时您会将适当的列表更改为虚线列表:

(list-add1 '(1 2 3)) ; ==> (2 3 4 . UNDEFINED-IMPLEMENTATION-SPECIFIED-VALUE)

解决方法是修复使虚线列表处理 if 的两个分支的过程。例如。

(define (list-add1 lst)
(if (pair? lst)
(cons (add1 (car lst)) (list-add1 (cdr lst)))
'()))

(list-add1 '(1 2 3)) ; ==> (2 3 4)

当然,如果不是这种情况,您可以通过将最终值保留在其自身的 cons 中或删除它来将点分转换为正确的:

(define (dotted->proper lst keep-value)
(cond ((pair? lst) (cons (car lst) (dotted->proper (cdr lst) keep-value)))
((null? lst) '())
(keep-value (cons lst '()))
(else '())))

(dotted->proper '(1 2 . 3) #f) ; ==> (1 2)
(dotted->proper '(1 2 . 3) #t) ; ==> (1 2 3)

关于scheme - 在方案列表中检测#<unspecified>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28910911/

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