История изменений
Исправление ados, (текущая версия) :
(aif (get-data) (fwrite t it)) напечатает t, а не ожидаемый результат (get-data).
Опять почему неожидаемый? Вот смысл макроса aif понятен - он загрязняет формы понятием it. Сделано это ради удобства. А вот какой смысл макроса fwrite?
(defmacro fwrite (stream x)
`(aif ,stream (format it "~a" ,x) nil))
Этим кодом ты говоришь лиспу: понимай в коде fwrite понятие it подобно aif. Это тоже сделано ради удобства? Тогда почему результат (aif (get-data) (fwrite t it)) для тебя неожидаем?
Если мы ожидаем в результате напечатать именно (get-data), значит у макроса совсем другой смысл и он не должен на свой код распространять понятие it, раскрывая из себя aif.
(defmacro fwrite (stream x)
(alexandria:once-only (x)
`(aif ,stream (format it "~a" ,x) nil)))
Я конечно согласен в том что CL заслуживает некоторой критики за свои несовершенства, но в данном случае я на стороне CL.
Исправление ados, :
(aif (get-data) (fwrite t it)) напечатает t, а не ожидаемый результат (get-data).
Опять почему неожидаемый? Вот смысл макроса aif понятен - он загрязняет формы понятием it. Сделано это ради удобства. А вот какой смысл макроса fwrite?
(defmacro fwrite (stream x)
`(aif ,stream (format it "~a" ,x) nil))
Этим кодом ты говоришь лиспу: понимай в коде fwrite понятие it подобно aif. Это тоже сделано ради удобства? Тогда почему код (aif (get-data) (fwrite t it)) для тебя неожидаем?
Если мы ожидаем в результате напечатать именно (get-data), значит у макроса совсем другой смысл и он не должен на свой код распространять понятие it, раскрывая из себя aif.
(defmacro fwrite (stream x)
(alexandria:once-only (x)
`(aif ,stream (format it "~a" ,x) nil)))
Я конечно согласен в том что CL заслуживает некоторой критики за свои несовершенства, но в данном случае я на стороне CL.
Исправление ados, :
(aif (get-data) (fwrite t it)) напечатает t, а не ожидаемый результат (get-data).
Опять почему ожидаемый? Вот смысл макроса aif понятен - он загрязняет формы понятием it. Сделано это ради удобства. А вот какой смысл макроса fwrite?
(defmacro fwrite (stream x)
`(aif ,stream (format it "~a" ,x) nil))
Этим кодом ты говоришь лиспу: понимай в коде fwrite понятие it подобно aif. Это тоже сделано ради удобства? Тогда почему код (aif (get-data) (fwrite t it)) для тебя неожидаем?
Если мы ожидаем в результате напечатать именно (get-data), значит у макроса совсем другой смысл и он не должен на свой код распространять понятие it, раскрывая из себя aif.
(defmacro fwrite (stream x)
(alexandria:once-only (x)
`(aif ,stream (format it "~a" ,x) nil)))
Я конечно согласен в том что CL заслуживает некоторой критики за свои несовершенства, но в данном случае я на стороне CL.
Исходная версия ados, :
(aif (get-data) (fwrite t it)) напечатает t, а не ожидаемый результат (get-data).
Опять почему ожидаемый? Вот смысл макроса aif понятен - он загрязняет формы понятием it. Сделано это ради удобства. А вот какой смысл макроса fwrite?
(defmacro fwrite (stream x)
`(aif ,stream (format it "~a" ,x) nil))
Этим кодом ты говоришь лиспу: понимай в коде fwrite понятие it подобно aif. Это тоже сделано ради удобства? Тогда почему код (aif (get-data) (fwrite t it)) для тебя неожидаем?
Если мы ожидаем в результате напечатать именно (get-data), значит у макроса совсем другой смысл и он не должен на свой код распространять понятие it, раскрывая из себя aif.
(defmacro fwrite (stream x)
(alexandria:once-only (x)
`(aif ,stream (format it "~a" ,x) nil)))
Я конечно согласен в том что CL заслуживает некоторой критики за свои несовершенства, но в данном случае я на строне CL.