Функция, которая возвращает все значения, связанные с символом - PullRequest
3 голосов
/ 03 февраля 2011

Например, я хочу функцию, которая дает мне все значения, назначенные для того, что я даю:

-> (giveme 'x' ((xy) (xz) (bd) (xq)))

-> (yzq)

Поэтому в этом случае функция должна возвращать yz и q, так как они связаны с x в парах.Причина, по которой я спрашиваю об этом, потому что я знаю, что в одной строке есть функция карты.

Ответы [ 3 ]

2 голосов
/ 03 февраля 2011

В 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)
1 голос
/ 04 февраля 2011

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 )))
0 голосов
/ 03 февраля 2011
(define (giveme key dict)
        (map cadr 
          (filter 
            (lambda (x) (eq? key (car x)))
            dict
          )
        )
)
...