> 1 <

Автор Сообщение

Яков Замир Кацман (нью)

Members


Статус

22 сообщений

Где: Russia
Род занятий:
Возраст:

#7802   2017-11-18 22:03 GMT+3 часа(ов)      
( setq values   
'(
( "one" . 1 )
( "two" . 2 )
( "three" . 3 )
( "four" . 4 )
( "five" . 5 )
( "six" . 6 )
( "seven" . 7 )
( "eight" . 8 )
( "nine" . 9 )
)
)
 
( setq s (cdr (assoc "four" values :test #'equal)))
( if s s 999 )

Яков Замир Кацман (нью)

Members


Статус

22 сообщений

Где: Russia
Род занятий:
Возраст:

#7816   2017-12-09 21:56 GMT+3 часа(ов)      
;; Хеши для "большиx" людей. 
;;[1]https://www.it.uu.se/edu/course/homepage/avfunpro/ht10/notes/html/f05-macros.html
(defmacro defmap (name options &rest entries)
(declare (ignore options))
(let ((table (make-hash-table)))
(dolist (entry entries)
(setf (gethash (car entry) table) (cadr entry)))
`(defvar ,name ',table)))
 
(defmacro do-hash-table (key-value-ht &rest body)
(destructuring-bind (key value ht) key-value-ht
(let ((iterator (gensym "ITERATOR"))
(next (gensym "NEXT")))
`(with-hash-table-iterator (,iterator ,ht)
(loop
(multiple-value-bind (,next ,key ,value) (,iterator)
(unless ,next (return nil))
,@body))))))
 
(defmap *a* ()
(azure 42)
(bar 99)
(clojure 123)
(data 987)
(email 1009))
 
(do-hash-table (key var *a*) (format t "[~w ~w ]~%" key var))


[DATA 987 ]
[CLOJURE 123 ]
[BAR 99 ]
[EMAIL 1009 ]
[AZURE 42 ]

skelter

Members


Статус

39 сообщений

Где: ---
Род занятий:
Возраст:

#7817   2017-12-10 00:50 GMT+3 часа(ов)      
При объявлении макросов можно использовать более сложные лямбда-списки, чем для функций: например,
defmacro do-hash-table ((key value ht) &body body)
> 1 <


Онлайн :

0 пользователь(ей), 29 гость(ей) :




Реклама на сайте: