函数返回Racket中的其他递归函数

时间:2014-05-12 10:08:04

标签: scheme racket

假设我们有一个函数f。该函数将列表l作为参数,并返回一个参数g的函数。函数g作为参数x并在列表l中查找x。如果它发现它返回true,则返回false。

我对不使用内置功能的解决方案感兴趣。 我的开始代码:

(define (f l) 
(lamda (x) 
.......... 
)))

1 个答案:

答案 0 :(得分:2)

你可以这样做:

(define (f l)
  (lambda (x)
    (and (member x l) #t)))

(define g (f '(a b c e)))
(g 'a)
=> #t
(g 'd)
=> #f

如果您需要避免使用内置member程序,则可以自行推送member?

(define (member? e l)
  (and (not (null? l))
       (or (eq? (car l) e) (member? e (cdr l)))))

(define (f l)
  (lambda (x)
    (member? x l)))

或将member?作为内部程序,如果您愿意:

(define (f l)
  (define (member? e l)
    (and (not (null? l))
         (or (eq? (car l) e) (member? e (cdr l)))))
  (lambda (x)
    (member? x l)))