gpt4 book ai didi

list - 方案过滤器 - "wrong value to apply: #f"

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

我试图根据我自己编写的谓词过滤掉一个列表,但是当我运行过滤器时,我得到了

ERROR: Wrong value to apply: #f

谓词代码:

;;;Predicate for checking if a string is not empty or full of whitespaces
(define (notwhitespace? str)
(if (equal? str "") #F (
(call-with-current-continuation
(lambda (return)
(for-each
(lambda (c)
(if (not (char-whitespace? c)) #T #F))
(string->list str))
#F))
)
)
)

这是我对过滤器的实现(在 let 语句中):

(updated-strlist(filter notwhitespace? strlist))

有什么想法吗?谢谢!

最佳答案

所以 (call-with-current-continuation ...) 在你的代码中被包裹在额外的括号中,这意味着 Scheme 应该获取结果并在它得到它时将它作为过程运行.

通常在 LISP 评估器中,apply 是运行过程的过程。例如。

(define (test) (display "hello"))
(define (get-proc) test)
((get-proc)) ; ==> undefined, displays "hello"

但是您的代码尝试执行此操作 (#f) 并且由于 #f 不是过程 apply 无法像运行它一样运行它。

评论那里的其余部分。如果你不使用 return 你真的不应该使用 call-with-current-continuationfor-each 做一些完全不同的事情比你想象的要多。 nowhitespace? 在您解决问题后将始终计算为 #f,因为延续 lambda 主体中的最后一个表达式是 #f (返回值)。

我猜你正在寻找类似的东西:

;; needs to import (srfi :1)
(define (notwhitespace? str)
(every (lambda (x) (not (char-whitespace? x)))
(list->string str)))

;; needs to import (srfi :13)
(define (notwhitespace2? str)
(not (string-index str char-whitespace?)))

关于list - 方案过滤器 - "wrong value to apply: #f",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24945251/

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