return
не делает то, что делает на других языках:] Вы ищете return-from translate-number
, но это не идиоматично.
Во-первых, знаете ли вы, что функция format
имеет~R
"римская" директива?
(format nil "~R" 1) ;; => one
Если вы действительно хотите использовать заглавные буквы, используйте string-upcase
или директиву формата ~( ... ~)
с модификаторами @:
:
(format nil "~@:(~R~)" 1)
;; "ONE"
https://lispcookbook.github.io/cl-cookbook/strings.html#to-upper-case--
CL краткий справочник с директивами формата: http://clqr.boundp.org/
Итак:
(mapcar (lambda (nb)
(format nil "~@:(~R~)" nb))
'(1 2 3))
("ONE" "TWO" "THREE")
Для многих if
подряд вы можетеиспользуйте case
или cond
.
(defun translate-number (num)
(case num
(1 "ONE")
(2 "FOO")))
Нет необходимости в пустоте ()
для второй формы if
.
https://learnxinyminutes.com/docs/common-lisp/;)