Я только начал изучать Lisp и у меня возникли проблемы с пониманием того, что this code from Rosetta Code говорит:Треугольник Паскаля в Лиспе
(defun pascal (n) (genrow n '(1))) (defun genrow (n l) (when (< 0 n) //is the command "when" something like if in Java? (print l) (genrow (1- n) (cons 1 (newrow l))))) (defun newrow (l) (if (> 2 (length l)) '(1) (cons (+ (car l) (cadr l)) (newrow (cdr l)))))
Я смотрел на некоторых веб-сайтах о лепет, но он по-прежнему запутанным. Единственным языком программирования, который я знаю, является Java. Если кто-то может объяснить на Java, что говорят смелые части, я был бы благодарен.
Итак, когда я вызываю метод genrow, я передаю n и список? – Miley
Точно. Я просто видел, что вы спрашивали о «когда». Функция 'when' (на самом деле макрос) похожа на инструкцию' if' в Java. Разница в том, что в Lisp нормальная функция 'if' имеет только одно выражение« then », за которым следует инструкция« else ». Макрос 'when' позволяет использовать несколько« then »операторов. Подробнее см. [This] (http://www.gnu.org/software/emacs/manual/html_node/elisp/Conditionals.html). – nonex
Большое вам спасибо за помощь: D – Miley