[Закрыть]
 
popoff.donetsk.ua
Иные считают, что у них доброе сердце, а это всего лишь слабые нервы. /Мария Эбнер-Эшенбах/
Начало | Новости | Статьи | Форум | Опросы | Карта сайта | Обо мне
popoff.donetsk.ua - Клуппы Yato - ДонНТУ - Функциональное и логическое программирование - Вопросы и ответы - Обработка списков на Лиспе
Я это делаю
Персональное меню
Голосование
Клуппы Yato Постоянный адрес этого вопроса
Ваш возраст (не обязательно):

Введите целое число от 3 до 99.
Почему? (не обязательно):
Другие вопросы
Поиск по сайту
Реклама
Программное обеспечение любой сложности
koins.com.ua
Статистика

Обработка списков на Лиспе

Постоянный адрес статьи

Внимание!

Здесь опубликованы только НЕПРАВИЛЬНЫЕ ОТВЕТЫ!

Этот сборник неправильных ответов предназначен для составления тестов, но может быть также использован Вами для того, чтобы узнать, чем не является то или иное понятие.

Подробнее о том, для чего здесь собраны эти вопросы и ответы:
http://popoff.donetsk.ua/forum/WhyQuestionsAndAnswers.html

Что такое рекурсия?
  • Существует два вида рекурсии: внутренняя и внешняя.

  • Рекурсия - это неоднократный вызов функции из вспомогательной или из самой себя.

    Комментарий: а если вызов однократный - это уже не рекурсия?

  • Рекурсия - это особый способ построения функции, при котором в результате обработки входных данных происходит самовывоз.

  • Рекурсия - это функция, вызывающая себя до выполнения условия.

  • Рекурсия - это свойство функции, когда она вызывает саму себя большое количество раз для замещения циклов.

    Рекурсия - вызывание функции внутри себя для организации цикла.

    Распространённое заблуждение, что рекурсия используется для замещения циклов. В действительности, там где лучше использовать циклы - рекурсия будет излишней. Там, где лучше использовать рекурсию - циклы будут неэффективны или усложнят программный код.

Что такое условие завершения рекурсии?
  • Условие завершения рекурсии - это условие, по которому рекурсия прекращает своё действие (прекращение рекурсии).

    Комментарий: о рекурсии нельзя говорить, что «она действует» или «она заканчивается». Могут быть или не быть рекурсивные вызовы, может быть рекурсивная функция. Функция может вызывать или не вызывать себя рекурсивно.

  • Условие завершения рекурсии - это условие, при истинности которого завершается рекурсия.

  • Условие завершения рекурсии - это условие, при выполнении которого заканчивается вызов функции и выход из неё.

  • Условие завершения рекурсии - это возврат рекурсивной функцией значения.

    Комментарии: 1. Об условии нельзя говорить, что «оно возвращает значение». Значение может вернуть только функция.

    2. Если говорить о функциях, которые могут возвращать значения, то такие функции возвращают значения всегда, не зависимо от того, рекурсивные ли они, и если они рекурсивные, то независимо от того, сработало ли условие завершения рекурсии.

  • Условие завершения рекурсии - это такое логическое выражение, при истинном значении которого рекурсивная функция не вызывает себя, а возвращает результат в вызвавшую её функцию.

    Комментарий: Если говорить о функциях, которые могут возвращать значения, то такие функции возвращают значения всегда, не зависимо от того, рекурсивные ли они, и если они рекурсивные, то независимо от того, сработало ли условие завершения рекурсии.

  • Условие завершения рекурсии - условие, при котором функция прекращает себя вызывать и передаёт управление функции, вызвавшей её.

    Комментарий: это произойдёт и без выполнения условия. Более того, такой эффект, когда функция передаёт управления в вызвавшую её функцию в связи с выполнением этого условия, имеет место совсем небольшое количество раз по сравнению с тем, сколько раз это происходит при ложном условии.

  • Условие завершения рекурсии - это необходимое условие для обеспечения конечности выполнения рекурсии. Обычно представляет собой принудительное возвращение какого-то заранее известного результата для конкретных ситуаций, которые выделены как «конечные», «скалярные».

    Комментарий: функции, возвращающие результат - возвращают какой-нибудь результат всегда, не зависимо от каких-то расположенных внутри тела этой функции условий.

  • Условие завершения рекурсии - условие, при котором происходит выход из программы и восхождение по дереву рекурсии.

    Комментарий: 1. Выход из программы не происходит - только из функции.

    2. Выход из функции произойдёт в любом случае, не зависимо от того, сработало это условие или нет.

    3. По этому условию возникает только одна-единственная стрелка вверх в дереве моделирования рекурсии - самая первая. Остальные стрелки вверх существуют при том, что в соответствующих им вызовам функций это условие было ложно.

  • Условие завершения рекурсии - условие, при котором функция прекращает вызывать саму себя и начинает обращаться к предыдущим итерациям.

    1. Если говорить о возможности выхода из функции, то из функции выход есть всегда, не зависимо от выполнения этого условия.

    2. О функциях нельзя говорить, что «они обращаются к предыдущим итерациям». Они могут вернуть результат в вызвавшую функцию, но не обратиться к ней. «Обратиться к функции» означает - вызвать её. «Вызвать предыдущую итерацию» невозможно, так как даже если и вызвать вызвавшую функцию по имени, то это будет новый рекурсивный вызов, никак не связанный с предыдущими вызовами.

    3. Об итерациях нельзя говорить, что «к ним обращаются функции». Итерация - это результат повторного выполнения какого-либо одного кода. У итерации есть показатель, например, мы можем говорить, о первой, второй или третьей итерации. Обратиться (то есть вызвать) можно только к функции, но не к итерации.

    4. В очень немногих языках программирования есть специальные (но при этом почти всегда считающиеся нестандартными) средства, которые позволяют функции что-то узнать о вызывающих её функциях. Да и то, эта функциональность, как правило, ограничивается тем, что внутри текущей функции мы можем узнать, откуда эта функция вызвана и какие аргументы были переданы на вход вызывающей функции.

  • Условие завершение рекурсии - это дохождение функции до определённой точности, т.е. значение функции меньше заданного eps.

    Если не учитывать некорректную формулировку варианта ответа, то проверка на достижение определённой точности - это один из возможных видов условия завершения рекурсии. В других задачах условия завершения рекурсии могут быть совсем другими.

  • Условие завершения рекурсии - это условие, при выполнении которого не происходит запуск очереди ветви рекурсии.

    Не ясно, что означает термин «запуск очереди ветви рекурсии».

Что такое хвостовая рекурсия?
  • Хвостовая рекурсия - это функция, которая использует возвращаемые значения следующего рекурсивного вызова самой себя. Например, суммирует возвращаемые значения.

  • Хвостовая рекурсия - это функция, которая получает результат своей работы, используя значение, возвращаемое собственным рекурсивным вызовом.

    Комментарий: Этим свойством обладают и другие рекурсивные функции.

  • Хвостовая рекурсия - это рекурсия, которая движется с конца.

    Комментарий: о рекурсии нельзя сказать, что «она движется». Можно говорить, к примеру, о том, что происходят рекурсивные вызовы функции.

  • Хвостовая рекурсия - это такая рекурсия, которая вычисляет значение функции с хвоста.

  • Хвостовая рекурсия - это рекурсивный вызов функции, которая позволяет возвращать результат, начиная с конца.

    Комментарий: 1. Согласно этому определению получается, что рекурсивный вызов какой-нибудь другой (то есть такой, которая не позволяет так возвращать результат, начиная с конца) - это уже не будет хвостовой рекурсией. На самом же деле понятие хвостовой рекурсии имеет отношение к обрабатываемым данным, но не к вызываемым функциям.

    2. О результате нельзя сказать, что «у него есть начало или конец». Если говорить о результате, то он всегда один, он цельный и неделимый.

  • Хвостовая рекурсия - это когда функция, вызванная по рекурсии возвращает значения в вызывающую её функцию.

    Комментарий: любые (в том числе и рекурсивные) функции всегда возвращают через своё имя значение только в вызвавшую функцию, и никогда - в какое-либо другое место.

  • Хвостовая рекурсия - это обратный ход рекурсии.

  • Хвостовая рекурсия - это когда функция вызывает хвост.

    Обычно вызывают Смольный, а здесь вызывают хвост. Поэтому, там - «Смольный на проводе», а здесь - «хвост на проводе».

  • Рекурсия является хвостовой, если выполняется условие: рекурсивный вызов является самой последней подцелью выражения и ранее в предложении не было возвращаемых точек.

    То, где расположен рекурсивный вызов, никак не влияет на то, будет ли рекурсия хвостовой.

    Подцели - это в Прологе. В Лиспе понятия подцелей нет.

    О точке программы нельзя сказать, что «её можно вернуть». Вернуть можно данное, но не точку выполнения.

  • Хвостовая рекурсия - это особый вид рекурсии, когда условия вызова функции находятся в конце тела функции.

  • Хвостовая рекурсия - это случай рекурсии, когда условия рекурсии находится после тела рекурсии.

    Интересно посмотреть на пример такой рекурсивной функции.

  • Сначала рекурсивные вызовы доходят до конца списка, а потом с конца в начало просчитываются значения.

  • Хвостовая рекурсия - так называется функция, в теле которой после проверки условия рекурсии следует вызов рекурсии.

    Рекурсия - это способ организации работы функции. Вызвать можно функцию, но не способ организации её работы.

Объясните задачу выбора подфункций в функциональном программировании
  • На самом деле вопрос следовало бы правильно сформулировать так: «объясните выбор задачи подфункции».

    Получается, что нужно объяснить, почему именно так выбрали задачу подфункции. Это, к сожалению, не возможно при неизвестной задаче.

    Возможно, имеется в виду, что нужно объяснить, как выбирать задачи для подфукнций. Этот вопрос, возможно, имеет смысл, но не имеет никакого отношения к заданному.

  • объясните выбор задачи подфункции Это необходимо для получения эффективной рекурсии. Эту подфункцию мы используем в роли аргумента главной функции.

  • Правильная формулировка вопроса: «объяснить задачу выбора подфункций в функциональном языке».

  • Сколько и каких подфункций можно разработать дя реализации основной функции, для её наиболее эффективной работы.

  • Задача выбора подфункций в функциональном программировании: упрощает запись понимания когда программы.

    Не ясно, что означает термин «запись понимания». О понимании нельзя сказать, что его можно записать. Оно может быть или не быть. Его можно повысить (то есть, человек будет теперь лучше понимать, чем раньше) или понизить (то есть, человек начнёт хуже понимать, чем раньше). Но не записать.

  • Задача выбора подфункций в функциональном программировании заключается в определении необходимой функции для данной написанной функции, которая подаётся на вход некоторой функции.

Напишите функцию НЕЧЁТНАЯ_ДЛИНА, которая зависит от одного аргумента - списка L и возвращает T, если L нечётной длины и NIL, если T - чётной длины.
  • (defun НЕЧЁТНАЯ_ДЛИНА (L)
      (if
        (null (cdr L))
        T
        (if
          (null (cddr L))
          nil
          (НЕЧЁТНАЯ_ДЛИНА (cddr L))
        )
      )
    )

    Комментарий: при L=() функция вернёт T, хотя должна вернуть nil.

  • (defun НЕЧЁТНАЯ_ДЛИНА (X L)
      (if
        (null X)
        nil
        (if
          (null (car (cdr X)))
          T
          (НЕЧЁТНАЯ_ДЛИНА (cdr (cdr X)))
        )
      )
    )

    При L=(a nil) функция вернёт T, хотя должна вернуть nil.

    При L=(a b nil c d) функция вернёт nil, хотя должна вернуть T.

    Лишний аргумент L, который внутри функции нигде не используется.

  • (defun НЕЧЁТНАЯ_ДЛИНА (L Ch)
        (if
          (null L)
          Ch
          (НЕЧЁТНАЯ_ДЛИНА (cdr L) (not Ch))
        )
      )

    Комментарий: Ch - лишний аргумент.

  • (defun НЕЧЁТНАЯ_ДЛИНА (L K)
        (if
          (eq K 0)
          (if (null L) T)
          (НЕЧЁТНАЯ_ДЛИНА (cdr L) 1)
        )
      )

    Комментарии: K - лишний аргумент. Неверный синтаксис конструкции (if ...). Функция работает неверно.

  • (defun len
        (lambda (L K)
          (len (cdr L) (not K))
        )
      )

      (defun НЕЧЁТНАЯ_ДЛИНА (L)
        (len L nul)
      )

    Комментарии: Лишняя функция, которая, к тому-же ещё и зависает.

  • (defun НЕЧЁТНАЯ_ДЛИНА (L, K)
        (if
          (null L)
          (L)
          (if
            (= L nil)
            (НЕЧЁТНАЯ_ДЛИНА (T, cdr(L)))
            (НЕЧЁТНАЯ_ДЛИНА (nil, cdr(L)))
          )
        )
      )

    Неверный синтаксис - неправильно разделены аргументы в списке аргументов.

    Неизвестные функции (L), (T) и (nil). Последние две - видимо, функции одного аргумента.

    При рекурсивном вызове функции (НЕЧЁТНАЯ_ДЛИНА) в него передаётся один аргумент, а не два, как было записано при определении этой функции.

Что такое накапливающий аргумент?
  • Это аргумент, в котором накапливается сумма.

Что такое «возвращаемая точка»?
  • это точка программы, которая возвращается в качестве результата

  • это точка программы, которая при возврате передаётся в качестве аргумента в следующий вызов функции

  • это точка программы в которую передаётся управление при возврате

  • это точка программы, которая возвращает результат

  • это число с плавающей точкой, которое возвращается в качестве результата

  • это точечная пара, которая возвращается в качестве результата

  • это список, записанный с использованием точечной нотации и который возвращается в качестве результата

  • это строка которая содержит в себе ровно один символ - точку. Эта строка возвращается в качестве результата

  • это точка, которая возвращает сама себя

  • это вершина в дереве моделирования рекурсии, с которой начинается подъём вверх

Последняя модификация: 06.03.07 18:05

Обсуждение статьи в форуме

26.03.09 21:41 mawa

коллекция впечатляет...
нужно иметь фантазию, чтоб это всё придумать)

Просмотреть все комментарии в режиме форума. Всего комментариев: 1