例如,我要一個函數,給我分配到一個我給所有的值:該函數返回與符號相關聯的所有值
- >(giveme「X」((XY)(XZ) (BD)(XQ)))
- >(YZQ)
所以函數應該返回在這種情況下,YZ和q,因爲這些在對關聯於x。我想問這個問題的原因是因爲我知道在一行中有一個映射函數。
例如,我要一個函數,給我分配到一個我給所有的值:該函數返回與符號相關聯的所有值
- >(giveme「X」((XY)(XZ) (BD)(XQ)))
- >(YZQ)
所以函數應該返回在這種情況下,YZ和q,因爲這些在對關聯於x。我想問這個問題的原因是因爲我知道在一行中有一個映射函數。
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)
(define (giveme key dict)
(map cadr
(filter
(lambda (x) (eq? key (car x)))
dict
)
)
)
的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)))
`本身map`不會做,但`地圖`與`filter`配對。 – 2011-02-03 00:14:47