~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ F4F1ED303457C97E86CCA5DC8000EB58__1713890400 ✰
Заголовок документа оригинал.:
✰ Fixed-point combinator - Wikipedia ✰
Заголовок документа перевод.:
✰ Комбинатор с фиксированной точкой — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Fixed-point_combinator ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/f4/58/f4f1ed303457c97e86cca5dc8000eb58.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/f4/58/f4f1ed303457c97e86cca5dc8000eb58__translat.html ✰
Дата и время сохранения документа:
✰ 16.06.2024 19:13:24 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 23 April 2024, at 19:40 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Комбинатор с фиксированной точкой — Википедия Jump to content

Комбинатор с фиксированной точкой

Из Википедии, бесплатной энциклопедии

В комбинаторной логике информатики комбинатор с фиксированной точкой (или комбинатор с фиксированной точкой ), [1] : стр. 26 — это функция высшего порядка (т. е. функция, которая принимает функцию в качестве аргумента ), которая возвращает некоторую фиксированную точку (значение, сопоставленное самому себе) своей функции-аргумента, если таковая существует.

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

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

Y-комбинатор в лямбда-исчислении [ править ]

В классическом нетипизированном лямбда-исчислении каждая функция имеет фиксированную точку. Конкретная реализация - это Хаскеля Карри , заданный формулой парадоксальный комбинатор Y [2] : 131  [примечание 1]

(Здесь мы используем стандартные обозначения и соглашения лямбда-исчисления: Y — функция, которая принимает один аргумент f и возвращает все выражение после первой точки; выражение обозначает функцию, которая принимает один аргумент x , рассматриваемый как функция, и возвращает выражение , где обозначает x, примененный к самому себе. Сопоставление выражений обозначает применение функции, является левоассоциативным и имеет более высокий приоритет, чем точка.)

Проверка [ править ]

Следующий расчет подтверждает, что действительно является фиксированной точкой функции :

по определению
путем β-редукции : замена формального аргумента f функции Y фактическим аргументом g
путем β-редукции: замена формального аргумента x первой функции фактическим аргументом
по второму равенству выше

Лямбда-терм вообще говоря, не может β-редуцироваться к члену . Однако, как показано, оба термина β-сводятся к одному и тому же термину.

Использует [ править ]

Применительно к функции с одной переменной комбинатор Y обычно не завершается. Более интересные результаты получаются при применении Y-комбинатора к функциям двух и более переменных. Дополнительные переменные могут использоваться в качестве счетчика или индекса. Полученная функция ведет себя как цикл while или for в императивном языке.

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

Комбинатор Y также можно использовать для реализации парадокса Карри . Суть парадокса Карри заключается в том, что нетипизированное лямбда-исчисление некорректно как дедуктивная система, и комбинатор Y демонстрирует это, позволяя анонимному выражению представлять ноль или даже множество значений. Это противоречит математической логике.

Пример реализации [ править ]

Ниже представлен пример реализации Y-комбинатора на двух языках.

# Комбинатор Y в Python 

 Y   =   лямбда   f  :   (  лямбда   x  :   f  (  x  (  x  )))(  лямбда   x  :   f  (  x  (  x  ))) 

 Y  (  Y  ) 
// Комбинатор Y в C++, используя расширения C++ 14 

 int   main  ()   { 
     auto   Y   =   [](  auto   f  )   { 
         auto   f1   =   [  f  ](  auto   x  )   ->   decltype  (  f  )   { 
             return   f  (  x  (  x  ) ); 
          }; 
          вернуть   f1  (  f1  ); 
      }; 

      Й  (  Й  ); 
  } 

Обратите внимание, что обе эти программы, хотя формально и корректны, на практике бесполезны; они оба выполняются бесконечно , пока не завершатся из-за переполнения стека . В более общем плане, поскольку и Python, и C++ используют строгие вычисления , комбинатор Y обычно бесполезен в этих языках; см. ниже комбинатор Z, который можно использовать в строгих языках программирования .

Комбинатор с фиксированной точкой [ править ]

Комбинатор Y — это реализация комбинатора с фиксированной точкой в ​​лямбда-исчислении. Комбинаторы с фиксированной точкой также можно легко определить в других функциональных и императивных языках. Реализация лямбда-исчисления более сложна из-за ограничений лямбда-исчисления. Комбинатор с фиксированной точкой может использоваться в различных областях:

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

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

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

С другой стороны, функцию можно рассматривать как лямбда-терм, определенный исключительно в лямбда-исчислении.

Эти разные подходы влияют на то, как математик и программист могут относиться к комбинатору с фиксированной точкой. Математик может рассматривать Y-комбинатор, примененный к функции, как выражение, удовлетворяющее уравнению с фиксированной точкой, и, следовательно, как решение.

Напротив, человек, желающий применить комбинатор с фиксированной точкой только для какой-либо общей задачи программирования, может рассматривать его только как средство реализации рекурсии.

Ценности и домены [ править ]

Многие функции не имеют фиксированных точек, например с . Используя кодировку Чёрча , натуральные числа можно представить в лямбда-исчислении, и эту функцию f можно определить в лямбда-исчислении. Однако его домен теперь будет содержать все лямбда-выражения, а не только те, которые представляют натуральные числа. Комбинатор Y, примененный к f , даст фиксированную точку для f , но эта фиксированная точка не будет представлять собой натуральное число. При попытке вычислить Y f на реальном языке программирования произойдет бесконечный цикл.

Функция против реализации [ править ]

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

Функция лямбда-исчисления (или термин) представляет собой реализацию математической функции. В лямбда-исчислении существует ряд комбинаторов (реализаций), которые удовлетворяют математическому определению комбинатора с фиксированной точкой.

Определение термина «комбинатор» [ править ]

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

фиксированной точкой с и комбинаторы Рекурсивные определения

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

Функция факториала [ править ]

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

где n — неотрицательное целое число. Если мы хотим реализовать это в лямбда-исчислении, где целые числа представляются с использованием кодировки Чёрча , мы столкнемся с проблемой, заключающейся в том, что лямбда-исчисление не позволяет использовать имя функции («факт») в определении функции. Это можно обойти, используя комбинатор с фиксированной точкой. следующее.

Определите функцию F двух аргументов f и n :

(Здесь — это функция, которая принимает два аргумента и возвращает свой первый аргумент, если n = 0, и второй аргумент в противном случае; оценивается как n -1.)

Теперь определите . Затем является фиксированной точкой F , что дает

по желанию.

Комбинаторы с фиксированной точкой в ​​лямбда-исчислении [ править ]

Комбинатор Y, открытый Хаскеллом Б. Карри , определяется как

фиксированной точкой с Другие комбинаторы

В нетипизированном лямбда-исчислении комбинаторы с фиксированной точкой не являются особенно редкими. На самом деле их бесконечно много. [5] В 2005 году Майер Голдберг показал, что множество комбинаторов с фиксированной точкой нетипизированного лямбда-исчисления является рекурсивно перечислимым . [6]

Комбинатор Y можно выразить в SKI-исчислении как

Дополнительные комбинаторы ( система B, C, K, W ) позволяют дать гораздо более короткое определение. С комбинатор для самостоятельного применения, поскольку и , вышеизложенное становится

Простейший комбинатор с фиксированной точкой в ​​SK-исчислении, найденный Джоном Тромпом , — это

хотя учтите, что это не в обычном виде, который длиннее. Этот комбинатор соответствует лямбда-выражению

Следующий комбинатор с фиксированной точкой проще, чем Y-комбинатор, и β-сводится к Y-комбинатору; его иногда называют самим Y-комбинатором:

Другой распространенный комбинатор с фиксированной точкой — это комбинатор Тьюринга с фиксированной точкой (названный в честь его первооткрывателя Алана Тьюринга ): [7] [2] : 132 

Его преимущество перед в том, что бета-редуцирует до , [заметка 2] тогда как и только бета-приведение к общему термину.

также имеет простую форму вызова по значению:

Аналогом взаимной рекурсии является поливариадный комбинатор с фиксированной точкой . [8] [9] [10] который можно обозначить Y*.

Строгий комбинатор с фиксированной точкой [ править ]

В строгом языке программирования Y-комбинатор будет расширяться до тех пор, пока не переполнится стек , или никогда не остановится в случае оптимизации хвостового вызова . [11] Z-комбинатор будет работать на строгих языках (также называемых нетерпеливыми языками, где применяется аппликативный порядок вычислений). В комбинаторе Z следующий аргумент определен явно, что предотвращает расширение в правой части определения: [12]

а в лямбда-исчислении это эта -расширение Y - комбинатора:

Нестандартные комбинаторы с фиксированной точкой [ править ]

Если F — комбинатор с фиксированной точкой в ​​нетипизированном лямбда-исчислении, то мы имеем

Термы, которые имеют то же дерево Бема , что и комбинатор с фиксированной точкой, т.е. имеют такое же бесконечное расширение. , называются нестандартными комбинаторами с фиксированной точкой . Любой комбинатор с фиксированной точкой также является нестандартным, но не все нестандартные комбинаторы с фиксированной точкой являются комбинаторами с фиксированной точкой, поскольку некоторые из них не удовлетворяют уравнению с фиксированной точкой, которое определяет «стандартные». Эти комбинаторы называются строго нестандартными комбинаторами с фиксированной точкой ; примером является следующий комбинатор:

где

Множество нестандартных комбинаторов с фиксированной точкой не является рекурсивно перечислимым . [6]

Реализация на других языках [ править ]

Комбинатор Y — это частная реализация комбинатора с фиксированной точкой в ​​лямбда-исчислении. Его структура определяется ограничениями лямбда-исчисления. Нет необходимости или пользы использовать эту структуру при реализации комбинатора с фиксированной точкой на других языках.

простые примеры комбинаторов с фиксированной точкой, реализованных в некоторых парадигмах программирования Ниже приведены .

Ленивая функциональная реализация [ править ]

В языке, поддерживающем отложенное вычисление , например в Haskell , можно определить комбинатор с фиксированной точкой, используя определяющее уравнение комбинатора с фиксированной точкой, которое обычно называют fix. Поскольку в Haskell есть ленивые типы данных, этот комбинатор также можно использовать для определения фиксированных точек конструкторов данных (а не только для реализации рекурсивных функций). Здесь дается определение, за которым следуют некоторые примеры использования. В Hackage исходный образец: [13]

fix  ,   fix'   ::   (  a   ->   a  )   ->   a 
 fix   f   =   let   x   =   f   x   in   x           — лямбда отброшена.   Делюсь. 
                                   -- Исходное определение в Data.Function. 
  -- альтернатива: 
 fix'   f   =   f   (  fix'   f  )                -- Лямбда поднята.   Не делиться. 

  fix   (  \  x   ->   9  )                      — результат равен 9 

 fix   (  \  x   ->   3  :  x  )                    — вычисляет ленивый бесконечный список [3,3,3,...] 

 fact   =   fix   fac                     — вычисляет к функции факториала 
   , где   fac   f   0   =   1 
         fac   f   x   =   x   *   f   (  x  -  1  ) 

 факт   5                             -- оценивается как 120 

Строгая функциональная реализация [ править ]

В строгом функциональном языке, как показано ниже на примере OCaml , аргумент f заранее расширяется, что дает бесконечную последовательность вызовов:

.

Эту проблему можно решить, определив fix с помощью дополнительного параметра.

let   Rec   fix   f   x   =   f   (  fix   f  )   x   (* обратите внимание на дополнительный x; здесь fix f = \x-> f (fix f) x *) 

 let   factabs   fact   =   function     (* factabs имеет дополнительный уровень лямбда-абстракции * ) 
    0   ->   1 
  |    x   ->   x   *   факт   (  x  -  1  ) 

 let   _   =   (  fix   factabs  )   5         (* оценивается как "120" *) 

В мультипарадигмальном функциональном языке (украшенном императивными функциями), таком как Лисп , Ландин (1963) [ нужна полная цитата ] предлагает использовать присвоение переменной для создания комбинатора с фиксированной точкой, как в приведенном ниже примере с использованием Scheme :

(  define   Y! 
   (  лямбда   (  f  ) 
     ((  лямбда   (  i  )                        
        (  set!   i   (  f   (  лямбда   (  x  )   (  i   x  ))))   ;; (set! i expr) присваивает i значение expr 
        i  )                                ; ; заменяя его в текущей лексической области 
      #f  ))) 

Используя лямбда-исчисление с аксиомами для операторов присваивания, можно показать, что Y! удовлетворяет тому же закону фиксированной точки, что и комбинатор Y с вызовом по значению: [14] [15]

В более идиоматичном современном использовании Lisp это обычно обрабатывается с помощью метки с лексической областью действия (метки с лексической областью действия). let выражение), поскольку лексическая область видимости не была введена в Лисп до 1970-х годов:

(  определить   Y* 
   (  лямбда   (  f  ) 
     ((  лямбда   (  i  ) 
        (  let   ((  i   (  f   (  лямбда   (  x  )   (  i   x  )))))   ;; (let ((i expr)) i) локально определяет i как выражение 
	      i  ))                               ;; нерекурсивно: таким образом, i в выражении не является выражением 
      #f  ))) 

Или без внутренней метки:

(  определить   Y 
   (  лямбда   (  f  ) 
     ((  лямбда   (  i  )   (  i   i  )) 
      (  лямбда   (  i  ) 
        (  f   (  лямбда   (  x  ) 
	         (  применить   (  i   i  )   x  ))))))) 

Императивная языковая реализация [ править ]

Этот пример представляет собой слегка интерпретирующую реализацию комбинатора с фиксированной точкой. Класс используется для хранения функции исправления , называемой fixer . Исправляемая функция содержится в классе, наследуемом от fixer. Функция fix обращается к функции, подлежащей исправлению, как к виртуальной функции. Что касается строгого функционального определения, fix явно задается дополнительный параметр x , что означает, что ленивая оценка не требуется.

шаблон   <  имя типа   R  ,   имя типа   D  > 
 класса   фиксатор 
 { 
 public  : 
     R   fix  (  D   x  ) 
     { 
         return   f  (  x  ); 
      } 
 Частное  : 
     виртуальный   R   f  (  D  )   знак равно   0  ; 
  }; 

 класса    факт   :   public   fixer  <  long  ,   long  > 
 { 
     virtual   long   f  (  long   x  ) 
     { 
         if   (  x   ==   0  ) 
         { 
             return   1  ; 
          } 
         вернуть   х   *   исправить  (  х  -1  ); 
      } 
 }; 

  длинный   результат   =   факт  ().   исправить  (  5  ); 

Набираю [ править ]

В Системе F (полиморфное лямбда-исчисление) полиморфный комбинатор с фиксированной точкой имеет тип [ нужна цитата ] ;

∀а.(а → а) → а

где a переменная типа . То есть fix принимает функцию, которая отображает a → a, и использует ее для возврата значения типа a.

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

В просто типизированном лямбда-исчислении комбинатору Y с фиксированной точкой нельзя присвоить тип [16] потому что в какой-то момент это будет касаться подтермина о самостоятельном применении по правилу применения:

где имеет бесконечный тип . На самом деле ни один комбинатор с фиксированной точкой не может быть напечатан; в этих системах любая поддержка рекурсии должна быть явно добавлена ​​в язык.

Введите для Y-комбинатора [ править ]

В языках программирования, поддерживающих рекурсивные типы данных , можно ввести комбинатор Y, соответствующим образом учитывая рекурсию на уровне типа. Необходимостью самостоятельного применения переменной x можно управлять с помощью типа ( Rec a), который определен так, чтобы быть изоморфным ( Rec a -> a).

Например, в следующем коде Haskell у нас есть In и out это имена двух направлений изоморфизма с типами: [17] [18]

In   ::   (  Rec   a   ->   a  )   ->   Rec   a 
 out   ::   Rec   a   ->   (  Rec   a   ->   a  ) 

что позволяет нам написать:

newtype   Rec   a   =   In   {   out   ::   Rec   a   ->   a   } 

 y   ::   (  a   ->   a  )   ->   a 
 y   =   \  f   ->   (  \  x   ->   f   (  out   x   x  ))   (  In   (  \  x   ->   f   (  выход   х   х  ))) 

Или то же самое в OCaml:

type   '  a   recc   =   In   of   (  '  a   recc   ->   '  a  ) 
 let   out   (  In   x  )   =   x 

 let   y   f   =   (  fun   x   a   ->   f   (  out   x   x  )   a  )   (  In   (  fun   x   a   ->   ж   (  вых   Икс   Икс  )   а  )) 

Альтернативно:

пусть   y   f   =   (  fun   x   ->   f   (  fun   z   ->   out   x   x   z  ))   (  In   (  fun   x   ->   f   (  fun   z   ->   out   x   x   z  ))) 

Общая информация [ править ]

Поскольку комбинаторы с фиксированной запятой могут использоваться для реализации рекурсии, их можно использовать для описания конкретных типов рекурсивных вычислений, таких как итерация с фиксированной запятой , итеративные методы , рекурсивное соединение в реляционных базах данных , анализ потока данных , FIRST и СЛЕДУЙТЕ наборам нетерминалов в контекстно-свободной грамматике , транзитивном замыкании и других типах операций замыкания .

Функция, для которой каждый вход является фиксированной точкой, называется тождественной функцией . Формально:

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

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

Такие функции называются идемпотентными (см. также Проекция (математика) ). Примером такой функции является функция, которая возвращает 0 для всех четных целых чисел и 1 для всех нечетных целых чисел.

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

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

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

Комбинатор Y позволяет определить рекурсию как набор правил перезаписи . [19] без необходимости встроенной поддержки рекурсии в языке. [20]

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

См. также [ править ]

Примечания [ править ]

  1. ^ правила синтаксиса, приведенные в Lambda Calculus#Notation . В этой статье для сохранения круглых скобок используются
  2. ^
  3. ^ Эта терминология, по-видимому, во многом фольклорная , но она встречается в следующем:
    • Трей Нэш, Accelerated C# 2008 , Apress, 2007, ISBN   1-59059-873-3 , с. 462—463. В основном взято из Уэса Дайера (см. следующий пункт). блога
    • Уэса Дайера Анонимная рекурсия в C# , 2 февраля 2007 г., содержит по существу аналогичный пример, найденный в книге выше, но сопровождаемый дополнительным обсуждением.

Ссылки [ править ]

  1. ^ Перейти обратно: а б Пейтон Джонс, Саймон Л. (1987). Реализация функционального программирования (PDF) . Прентис Холл Интернэшнл.
  2. ^ Перейти обратно: а б Хенк Барендрегт (1985). Лямбда-исчисление – его синтаксис и семантика . Исследования по логике и основам математики. Том. 103. Амстердам: Северная Голландия. ISBN  0444867481 .
  3. ^ Селинджер, Питер. «Конспекты лекций по лямбда-исчислению (PDF)» . п. 6.
  4. ^ «Для тех из нас, кто не знает, что такое Y-комбинатор и чем он полезен…» Hacker News . Проверено 2 августа 2020 г.
  5. ^ Бимбо, Каталин (27 июля 2011 г.). Комбинаторная логика: чистая, прикладная и типизированная . ЦРК Пресс. п. 48. ИСБН  9781439800010 .
  6. ^ Перейти обратно: а б Гольдберг, 2005 г.
  7. ^ Алан Мэтисон Тьюринг (декабрь 1937 г.). " -функция в - -конверсия». Журнал символической логики . 2 (4): 164. JSTOR   2268281 .
  8. ^ «Многоликость комбинатора с фиксированной точкой» . okmij.org .
  9. ^ Поливариадный Y в чистом Haskell98. Архивировано 4 марта 2016 г. на Wayback Machine , lang.haskell.cafe, 28 октября 2003 г.
  10. ^ "рекурсия - комбинатор с фиксированной точкой для взаимно рекурсивных функций?" . Переполнение стека .
  11. ^ Бене, Адам (17 августа 2017 г.). «Комбинаторы с фиксированной запятой в JavaScript» . Студия Бене . Середина . Проверено 2 августа 2020 г.
  12. ^ «CS 6110 S17 Лекция 5. Рекурсия и комбинаторы с фиксированной точкой» (PDF) . Cornell University . 4.1 Комбинатор CBV с фиксированной точкой.
  13. ^ Исходное определение в Data.Function .
  14. ^ Феллейзен, Матиас (1987). Лямбда-v-CS-исчисление . Университет Индианы.
  15. ^ Талкотт, Кэролайн (1985). Сущность рома: теория интенсиональных и экстенсиональных аспектов вычислений типа Lisp (докторская диссертация). Стэндфордский Университет.
  16. ^ Введение в лямбда-исчисление. Архивировано 8 апреля 2014 г. в Wayback Machine.
  17. ^ Ветка списка рассылки Haskell о том, как определить Y-комбинатор в Haskell , 15 сентября 2006 г.
  18. ^ Геверс, Герман; Остынь, Джоп. О комбинаторах с фиксированной точкой и циклических комбинаторах в теории типов . CiteSeerX   10.1.1.158.1478 .
  19. ^ Дэниел П. Фридман , Маттиас Феллизен (1986). «Глава 9 - Лямбда Ultimate». Маленький Лиспер . Ассоциация научных исследований . п. 179. «В этой главе мы создали Y-комбинатор, который позволяет нам писать рекурсивные функции с одним аргументом без использования определения».
  20. ^ Майк Ваньер. «Y-комбинатор (небольшой возврат) или: как добиться успеха в рекурсии, не прибегая к рекурсии» . Архивировано из оригинала 22 августа 2011 г. «В более общем плане Y дает нам возможность получить рекурсию на языке программирования, который поддерживает первоклассные функции, но не имеет встроенной рекурсии».
  21. ^ The If Works, вывод Y-комбинатора , 10 января 2008 г.

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: F4F1ED303457C97E86CCA5DC8000EB58__1713890400
URL1:https://en.wikipedia.org/wiki/Fixed-point_combinator
Заголовок, (Title) документа по адресу, URL1:
Fixed-point combinator - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)