Вот мои два цента. Это действительно может сбивать с толку.
Во-первых, простое определение: точка x
является "неподвижной точкой" функции f
, если f(x) == x
.
Иными словами, x = f(x)
.
Может ли вышеизложенное иметь какой-то смысл? Кажется маловероятным. В конце концов, он использует определяемое значение.
Однако x
не обязательно простое число. Это может быть функция или ленивый бесконечный список, и f
может привести к его частичному определению. Затем путем повторной оценки
x = f(x) = f( f(x)) = f( f( f(x))) = f( f( f( f(x)))) = ....
значение определяется все больше и больше. Теперь это действительно напоминает нам числовой пример вычисления фиксированной точки f(y) = (y + n/y)/2
посредством повторного вычисления,
n=25; f(1.0)=13.0; f(13.0)=7.4615383; f(7.4615383)=5.406027;
f(5.406027)=5.0152473, f(5.0152473)=5.0152473; f(5.0152473)=5.0
Важнейшая часть состоит не в том, чтобы ждать, пока закончится бесконечная цепочка оценок (она никогда не заканчивается), а в том, чтобы иметь ленивый список, записывающий последовательность шагов оценки. Затем постепенно определяется наша ценность — бесконечный список: сначала он вообще не определен; тогда его первый (головной) элемент определен, а остальные еще нет; то определены два его первых элемента; и т.д. и т.п. : [1.0,13.0,7.4615383,5.406027,5.0152473,5.000023,5.0,5.0,5.0 ...]
.
И точно так же, как числовые значения сходятся к некоторому числу, все ближе и ближе приближаясь к «конечному» значению (которое никогда не достигается полностью, но расстояние становится все меньше и меньше), так и бесконечный список результатов сходится к своему конечному значению. , полностью определенный бесконечный список со всеми его определенными элементами (совершенно невозможный подвиг, конечно), все ближе и ближе по определенности к этому конечному значению (проще говоря, когда его элементы определяются одним один, но математики любят сложные).
Аналогично с функциями. Если g(h,n) = n<2 -> 1 ; else -> n*h(h,n-1)
, то g(error)
является (каррированной) функцией одного аргумента, определенной только для n < 2
, так как для любого другого аргумента она будет расходиться (вызывать ошибку). Но g( g(error))
определено для всех n < 3
; g( g( g(error)))
- для всех n < 4
и т. д. Опять же, у нас есть последовательность значений, которая все больше и больше определяется... Итак, предел этой последовательности, "конечное значение", фиксированная точка функции g
является такой функцией f
, что f = g(f)
определена для любого n
, каким бы большим он ни был. По совпадению это факториальная функция, определенная без использования рекурсии.
person
Will Ness
schedule
27.08.2014