История изменений
Исправление theNamelessOne, (текущая версия) :
В сишечке тебе сначала надо ВЫПОЛНИТЬ функцию, и полученный результат подставить в код.
Лол, прям как лиспе.
Т.е. для вычисления factorial(2) ты сначала вычисляешь factorial(1), и получаешь _результат_ равный 1
Объясни мне, пожалуйста, чем это отличается от лиспа:
* (defun fact (n) (if (zerop n) 1 (* n (fact (1- n)))))
FACT
* (trace fact)
(FACT)
* (fact 5)
0: (FACT 5)
1: (FACT 4)
2: (FACT 3)
3: (FACT 2)
4: (FACT 1)
5: (FACT 0)
5: FACT returned 1
4: FACT returned 1
3: FACT returned 2
2: FACT returned 6
1: FACT returned 24
0: FACT returned 120
120
*
?
Если тебе не хватает мозгов, я могу разжевать. Для вычисления (fact 5)
мы сначала вычисляем (fact 4)
, для которого, в свою очередь, вычисляем (fact 3)
, и так до тех пор, пока (fact 0)
не вернёт единицу, которую мы подставляем в формулу 1 * 1
, получаем единицу, которую подставляем в формулу 2 * 1
, получаем двойку, которую подставляем в
формулу 3 * 2
… В конечном итоге мы получаем формулу 5 * 24
, что в результате нам даёт 120.
Прям как в сишечке.
А вот в CL ты в качестве результата factorial(2) получаешь _константу_ 1. Разница между «числом» и «константой» тебе понятна?
Нет, всё-таки ты тупой.
Исходная версия theNamelessOne, :
В сишечке тебе сначала надо ВЫПОЛНИТЬ функцию, и полученный результат подставить в код.
Лол, прям как лиспе.
Т.е. для вычисления factorial(2) ты сначала вычисляешь factorial(1), и получаешь _результат_ равный 1
Объясни мне, пожалуйста, чем это отличается от лиспа:
* (defun fact (n) (if (zerop n) 1 (* n (fact (1- n)))))
FACT
* (trace fact)
(FACT)
* (fact 5)
0: (FACT 5)
1: (FACT 4)
2: (FACT 3)
3: (FACT 2)
4: (FACT 1)
5: (FACT 0)
5: FACT returned 1
4: FACT returned 1
3: FACT returned 2
2: FACT returned 6
1: FACT returned 24
0: FACT returned 120
120
*
?
Если тебе не хватает мозгов, я могу разжевать. Для вычисления (fact 5)
мы сначала вычисляем (fact 4)
, для которого, в свою очередь, вычисляем (fact 3)
, и так до тех пор, пока (fact 0)
не вернёт единицу, которую мы подставляем в формулу 1 * 1
, получаем единицу, которую подстваляем в формулу 2 * 1
, получаем двойку, которую подставляем в
формулу 3 * 2
… В конечном итоге мы получаем формулу 5 * 24
, что в результате нам даёт 120.
Прям как в сишечке.
А вот в CL ты в качестве результата factorial(2) получаешь _константу_ 1. Разница между «числом» и «константой» тебе понятна?
Нет, всё-таки ты тупой.