Схема нехватки памяти с использованием cond вместо if

Я работаю над своей домашней работой в схеме. Я прошу помощи с этим. По сути, мы создали факультетскую процедуру, и она сработала. Затем мы переписали оператор if с помощью cond. Когда процедура выполняется сейчас, Racket не хватает памяти. Я полагаю, мы попали в бесконечный цикл. Но почему?

Во-первых, вот код

Первая реализация для факультета им.

(define (facult n)
  (define (iter product counter)
    (if (> counter n)
        product
        (iter (* counter product)(+ counter 1))))
  (iter 1 1))

Теперь мы заменим if, используя этот пользовательский оператор cond.

(define (new-if-statement predicate then-clause else-clause)
  (cond(predicate then-clause)
       (else else-clause)))

Изменение оригинальной процедуры факультета на:

(define (facult n)
  (define (iter product counter)
    (new-if-statement (> counter n)
            product
            (iter (* counter product)(+ counter 1))))
  (iter 1 1))

Вещи, которые я знаю: если вы можете использовать только один оператор, когда выполняется оператор then (то же самое с else). Условный позволяет использовать более одного оператора после каждого предиката.

Но как это поможет мне найти решение для бесконечного цикла?

0 ответов

Другие вопросы по тегам