gpt4 book ai didi

scheme - 如何在列表中搜索谓词

转载 作者:行者123 更新时间:2023-12-02 06:46:39 25 4
gpt4 key购买 nike

我想创建一个高阶函数,它接受 S-Expr 和谓词作为参数,并返回给定 s-表达式内传递给定谓词的所有原子的列表

例如

(fetch number? '(the (quick 6 fox 8 9) slick 2)) 

方案将返回(6 8 9 2)

希望有人能给我指明正确的方向,自己在家学习

我从什么开始

(define (fetch pred? ls)
(cond
[(null? '())]
[(number?)]
[(symbol?)]))

最佳答案

这是解决该问题的另一种方法。在处理对时,它使用累加器而不是 append 来消除由 append 完成的一次又一次重复复制列表结构:

(define (flat-filter pred x)
(let recur ((x x)
(initial '()))
(cond ((null? x) initial)
((pair? x)
(recur (car x) (recur (cdr x) initial)))
((pred x) (cons x initial)) ;; the one CONS call per element added
(else initial))))

这可能是比 Óscar López 更先进的解决方案,但它很容易抽象为折叠函数(故意选择参数顺序来反射(reflect) foldfold-right 随大多数方案实现一起提供,作为 SRFI 1 的一部分):

(define (flat-fold-right func initial x)
(cond ((null? x) initial)
((pair? x)
(flat-fold-right func (flat-fold-right func initial (cdr x)) (car x)))
(else (func x initial)))) ;; the one call to FUNC per element of input

(define (flat-filter pred x)
(flat-fold-right (lambda (elem res)
(if (pred elem)
(cons elem res)
res))
'() x))

奖金免费赠品:

(define (flat-map func x)
(flat-fold-right (lambda (elem res)
(cons (func elem) res))
'() x))

(define (flatten x)
(flat-fold-right cons '() x))

关于scheme - 如何在列表中搜索谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25386387/

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