2011-02-02 63 views
3

例如,我要一個函數,給我分配到一個我給所有的值:該函數返回與符號相關聯的所有值

- >(giveme「X」((XY)(XZ) (BD)(XQ)))

- >(YZQ)

所以函數應該返回在這種情況下,YZ和q,因爲這些在對關聯於x。我想問這個問題的原因是因爲我知道在一行中有一個映射函數。

+2

`本身map`不會做,但`地圖`與`filter`配對。 – 2011-02-03 00:14:47

回答

2

Common Lisp中:

CL-USER > (defun give-me (item list) 
      (mapcan (lambda (e) 
         (and (eq item (first e)) (list (second e)))) 
        list)) 
GIVE-ME 

CL-USER > (give-me 'x '((x y) (x z) (b d) (x q))) 
(Y Z Q) 
0
(define (giveme key dict) 
     (map cadr 
      (filter 
      (lambda (x) (eq? key (car x))) 
      dict 
     ) 
     ) 
) 
1

的Common Lisp:

(defun giveme (key pairs) 
    (loop for (k v) in pairs when (eq k key) collect v)) 

方案:

(define (giveme key pairs) 
    (apply append 
    (map (lambda (p) (if (eq? key (car p)) (cdr p) '())) 
     pairs)))