2011-02-02 68 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)))