2013-10-04 18 views
0

我有三個功能用於我正在努力的練習考試。Curriculum using Scheme

一個函數,它接受謂詞「pred」和一個集合「x」,並返回集合中所有元素的謂詞是否爲真。

我是想:

(define (all? pred x) 
    (lambda (t) 
    (equal? (pred t) x))) 

由於預計值牛逼返回x,其中謂詞是真實的子集,我試圖把它比原來的設定......這顯然是不一樣去做吧。

一個函數,它接受一個操作「op」和一個集合「x」並返回一個新的集合,其中基本上已將op函數映射到整個集合。基本上地圖相等的,所以你會覺得我不應該問的這個幫助...

我試圖:

(define (map op x) 
    (lambda (t) 
    (map (op t)))) 

我必須失去討好,因爲一些基本的方面我覺得這些行動應該是簡單..

+1

你需要知道的接口'set'來回答這個問題。 –

+0

描述的操作似乎都不需要currying。什麼是每個咖喱參數? –

+0

@AdamBurry問什麼是重要的。這是否使用了與您在之前的問題中提到的相同的集合表示形式[表示具有lambda函數的集合](http://stackoverflow.com/q/19129413/1281433),其中集合由其特徵函數表示,給定一個潛在元素,如果元素在集合中則返回true,否則返回false。例如,其中'(lambda(x)(> x 2))'是大於2的數字集合,「even?'是偶數集合? –

回答

1

所以你試圖做類似andmap

您可以定義計算一個列表,看看閹所有的元素都#T值的功能。

(define full-true? 
    (λ (lst) 
    (if (empty? lst) #t 
    (if (car lst) (full-true? (cdr lst)) 
     (car lst))) 
)) 

然後,你的主要職能是:

(define for-all? 
(lambda 
    (pred lst-of-items) 
    (full-true? (map (lambda (x) (pred x)) lst-of-items)) 
))