LINUX.ORG.RU

История изменений

Исправление 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. Разница между «числом» и «константой» тебе понятна?

Нет, всё-таки ты тупой.