Распечатать ключи из plist на основе значений?

Как выполнить итерацию и распечатать ключи 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

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


person schmoopy    schedule 09.05.2011    source источник


Ответы (2)


Что-то типа

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

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

person Rainer Joswig    schedule 09.05.2011

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

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