LINUX.ORG.RU

Интересное поведение eLisp

 , , ,


0

1

Хрестоматийный пример факториала на eLisp, скопированный отсюда, раздел 16,2. При вызове с передачей положительного численного аргумента возвращает 0:

 (defun factorial (integer)
            "Compute factorial of INTEGER."
            (if (= 1 integer) 
               1
              (* integer 
                (factorial 
                   (1- integer)))))

А это пример с сайта Алекса Отта. Возвращает то, что надо:

(defun рекурсивный-треугольник (число)
  "Возвращает сумму чисел от 1 до ЧИСЛО включительно.
Использует рекурсию."
  (if (= число 1)                    ; рекурсивная-проверка
      1                               ; then-часть
    (+ число                         ; else-часть
       (рекурсивный-треугольник          ; рекурсивный вызов
        (1- число)))))               ; выражение-следующего-вызова

Разные в функциях только арифметические операции умножение и сложение. Подскажите пожалуйста причину такого поведения. А то как то...забавно что-ли.



Последнее исправление: cetjs2 (всего исправлений: 2)

ах да. emacs 24.3.1 . Платформа - Win7.

nixorn
() автор топика

При вызове с передачей положительного численного аргумента возвращает 0:

Не правда. Проверил, выдает нужный факториал.

iVS ★★★★★
()

Для небольших чисел правильно считает (до 30 включительно), для 31 отрицательное число, а потом 0.

qaqa ★★
()
Ответ на: комментарий от nixorn

Ну, мне нечего добавить к ответу qaqa, ограничение на максимальное целое.

iVS ★★★★★
()
Последнее исправление: iVS (всего исправлений: 1)

Lisp предназначен для серьёзного промышленного программирования, а для вычисления факториалов лушче взять Haskell.

CARS ★★★★
()
Ответ на: комментарий от CARS

Common List предназначен для серьёзного промышленного программирования. А Emacs Lisp предназначен для того чтобы курсор ввода по экранчику передвигать.

kim-roader ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.