Как вызвать функцию, которая печатает список в lisp? - PullRequest
1 голос
/ 04 мая 2019

Я пытаюсь вызвать функцию в lisp, которая присваивает свои параметры списку и печатает их на консоли, но ничего не печатает на консоли.Код выглядит следующим образом

(defun make-cd (title artist rating ripped)
  (list :title title :artist artist :rating rating :ripped ripped))
(make-cd "Roses" "Kathy Mattea" 7 t)

Вызов функции make-cd должен возвращать

(:TITLE "Roses" :ARTIST "Kathy Mattea" :RATING 7 :RIPPED T)

Как я могу решить эту проблему?

Ответы [ 3 ]

1 голос
/ 04 мая 2019

Вы можете посмотреть здесь: В чем разница между write, print, pprint, princ и prin1?

format также может использоваться для печати списков, в REPL или в любых выходных потоках (файлы, каналы и т. Д.).

(format t "~a" (list "Peter" 15 "Steven" 59.4d0))
    => (Peter 15 Steven 59.4d0)

Вы можете просмотреть материал в CLHS: http://www.lispworks.com/documentation/lw50/CLHS/Body/f_format.htm Или в Практическом Common Lisp, из которого вы получили ваш пример, я верю: http://www.gigamonkeys.com/book/a-few-format-recipes.html

1 голос
/ 08 мая 2019

Вы можете просто вернуть значение, отправив его в список компакт-дисков, что, как я полагаю, приведено в примере из используемой вами книги (а позже вы отформатируете каждый компакт-диск в своей базе данных при печати):

(defun make-cd (artist title rating ripped)
   (push (list :artist artist :title title :rating rating :ripped ripped)
     *cds*))

Поэтому, если я вызову функцию, она вернет содержимое компакт-диска на консоль:

(make-cd "Cece Winans" "Mercy Said No" 10 t)
((:ARTIST "Cece Winans" :TITLE "Mercy Said No" :RATING 10 :RIPPED T))

Значение возвращается на консоль в случае, если вы нажмете компакт-дискв базу данных компакт-дисков.

1 голос
/ 04 мая 2019
(defun make-cd (title artist rating ripped)
  (print (list :title title :artist artist :rating rating :ripped ripped)))

решает, извините.

...