我目前有一个函数,它接受一个函数列表和一个单词列表,并将这些函数中的每一个应用到单词列表中并编译一个列表。我想返回一个函数,用#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
wordToScrambled
,wordToReverse
为函数,单词为单词列表{{1} }。
答案 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