Печать ключей из plist на основе значений? - PullRequest
7 голосов
/ 09 мая 2011

Как мне перебрать и распечатать ключи plist на основе заданных значений?

Пример:

; plist
(defun my-list() (list :a "hi" :b "no" :c "go"))

; from that list i want to iterate and print out keys based on values like:
for each x in ("hi" "go") print x

; hoping for:
ac

Я новичок в Лиспе - спасибо: -)

Ответы [ 2 ]

13 голосов
/ 10 мая 2011

Что-то вроде

(loop for (key value) on my-list by #'cddr
      when (member value '("hi" "go") :test #'equal)
      do (princ key))

Первая строка перемещает шаблон по списку.

4 голосов
/ 10 мая 2011

Вы можете использовать макрос цикла:

(loop
   for (key value . rest) on list
   by #'cddr
   when (find value '("foo" "bar") :test #'string=)
   do (princ key))
...