使用lambda表达式方案的返回值?

时间:2017-04-13 14:37:03

标签: lambda scheme racket

我目前有一个函数,它接受一个函数列表和一个单词列表,并将这些函数中的每一个应用到单词列表中并编译一个列表。我想返回一个函数,用#t#f检查单词是否在该列表中,但是我不确定如何执行此操作而不允许使用set。以下是我到目前为止创建列表的内容:

(define list-checker
  (lambda (flist words)
    (cond
      ((null? flist) '())
      (else          (append (map (lambda(x) ((car flist) x)) words)
                             (list-checker (cdr flist) words))))))

示例用法:((list-checker (list wordToScrambled wordToReverse) words) '(h e l l o))应输出#t#f wordToScrambledwordToReverse为函数,单词为单词列表{{1} }。

2 个答案:

答案 0 :(得分:2)

(define (list-checker flist words)
  (let ([transformed-words
         (append* (map (lambda (f) (map f words)) flist))])
    (lambda (word) (and (member word transformed-words) #t))))

答案 1 :(得分:0)

所以你想要编写函数并在每个元素上使用它,然后返回一个函数来检查一个参数,如果它是一个已翻译的值?

(define (get-list-checker fns lst)
  (define trans-lst (map (apply compose fns) lst))
  (lambda (e)
    (and (member e trans-lst) #t)))

(define test (get-list-checker (list add1 (λ (x) (* x x))) '(1 2 3)))
(test 10) ; ==> #t
(test 11) ; ==> #f