Есть ли способ получить тот же вывод, что и этот: (Рука - это список карт)
(loop for card in hand
with i = 1
do
(format t "~&~a. ~a~%" i card)
(incf i))
1. (5 . HEARTS)
2. (5 . CLUBS)
3. (10 . DIAMONDS)
4. (JACK . DIAMONDS)
5. (8 . CLUBS)
, но использовать только один вызов для форматирования? Пока что у меня есть это, но я не знаю, как увеличить индекс.
(format nil "~{~%1. ~a~}~%" hand)
1. (5 . HEARTS)
1. (5 . CLUBS)
1. (10 . DIAMONDS)
1. (JACK . DIAMONDS)
1. (8 . CLUBS)
Я также пытался использовать замыкание рядом с директивой Call Function, но вы должны сбрасывать счетчик для каждого звоните, и это просто кажется очень грязным.
(let ((counter 0))
(defun increment (output-stream format-argument colonp at-sign-p &rest directive-parameters)
(declare (ignore colonp at-sign-p directive-parameters))
(incf counter)
(format output-stream "~a. ~a" counter format-argument))
(defun reset-counter ()
(setf counter 0)))
(format t "~&~{~&~/increment/~}" '(a c b d))
1. A
2. C
3. B
4. D