所以我试图回答一个Scheme问题,该问题是定义一个函数,该函数查找一个传递给定谓词的表达式中的所有原子,即
(foo symbol? '(a (2 (c 3) 4)))
=> (a c)
或
(define (foo predicate expression)
(cond [(eqv? predicate number?) (filter number? (flatten expression))]
[(eqv? predicate symbol?) (filter symbol? (flatten expression))]))
我已经提出了以下功能,我认为它提供了正确的输出,但我想知道这是否可行,或者有更好的方法吗?
public async Task Invoke(HttpContext context)
答案 0 :(得分:2)
我不明白你为什么不这样做:
(foo (lambda (v) (or (odd? v) (negative? v))) '(-5 6 8 10 11))
你如何编写你的函数它只能用两个精确的函数而不是例如:
{{1}}
答案 1 :(得分:1)
我喜欢@Sylwester的解决方案。但我认为如果数据转换更明确,函数会更清晰。也就是说,过滤的内容并不是它的术语。
(define (foo predicate expression)
(let ((terms (flatten expression))
(filter predicate terms)))
或者
(define (foo predicate expression)
(define terms (flatten expression))
(filter predicate terms))
我发现以这种方式编写函数更容易,而不是尽可能密集。