2017-04-13 151 views
0

我目前有一個函數,它包含一系列函數和一個單詞列表,並將這些函數中的每一個應用到單詞列表並編譯一個列表。我想返回一個函數,檢查一個單詞是否在#t#f的列表中,但是我不確定如何做到這一點,而不被允許使用set。以下是我迄今爲止創建列表:從lambda表達式使用返回值?

(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都是函數,也就是說是的話'((h i)(h e l l o))的列表。

+2

什麼是'gen-checker'? http://stackoverflow.com/help/mcve – ceving

+2

我不是100%清楚你想要的功能。你能提供一個期望行爲的例子嗎? –

+1

gen-checker是一個錯字遺憾的應該是列表檢查。這個函數的功能應該是這樣的: ((list-checker(list wordToScrambled wordToReverse)words)'(hello)) 在這個例子中,列表檢查器獲取兩個函數的列表,它們對單詞進行加擾並將其逆轉, 。然後它應該返回一個函數,用於檢查給定單詞是否位於由傳入的函數創建的新列表中 – user1775500

回答

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)))) 
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