2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 лямбда-исчисление. комбинатор неподвижной точки. рекурсия
Сообщение26.01.2014, 00:17 
ни как не пойму основную идею:
как с помощью комбинатора неподвижной точки
(например такого, при ленивом вычислении $Y=\lambda f.((\lambda x.f(xx))(\lambda x.f(xx)))$)
получить лямбда-выражение, аналогичное следующей функции:
Код:
(func arg)=(if (pred arg) const (h (func (g arg))))

или следующей, если императивно
Код:
func(arg)
{
if(pred(arg))
return const;
else return h(func(g(arg)))
}

где pred, const, h и g - заданные функции,
pred возвращает $(T=\lambda t f.t)$ или $(F=\lambda t f.f)$, и соответственно $if=\lambda c x y. c x y$
?

 
 
 
 Re: лямбда-исчисление. комбинатор неподвижной точки. рекурсия
Сообщение26.01.2014, 00:51 
Аватара пользователя
Тут фишка в том, что если наша функция func определяется рекурсивно, то она является неподвижной точкой какого-то оператора: func = R func, в Вашем случае
Код:
R = λ f . λ x . if (pred x) then const else h( f (g x) ) )

 
 
 
 Re: лямбда-исчисление. комбинатор неподвижной точки. рекурсия
Сообщение26.01.2014, 01:40 
Цитата:
func = R func

стоп, а чему здесь func равно?
описание для func, которое дал я - не является лямбда-выражением

ааа, наверно func = YR

и с какой стороны туда аргумент подавать?
как будет выглядеть выражение с аргументом, скажем input, готовое для бета-редукции?

ааа, оно так и будет выглядеть:
Код:
func input
-> R func input
-> if (pred input) const (h (func (g input)))
/*если (pred input) -> F : */
-> h (func (g input))
/*пропустим вычисление h - она черный ящик*/
-> h (R func (g input))
-> ...


я все понял, спасибо!!!!!!!!!!!!!!!!!!!!!111

 
 
 
 Re: лямбда-исчисление. комбинатор неподвижной точки. рекурсия
Сообщение26.01.2014, 01:51 
Аватара пользователя
Верно :)

 
 
 [ Сообщений: 4 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group