Като упражнение преобразувах следния комбинатор в нотация без точки:
h f g x y z = f x (g y z)
с обичайната конвенция за f
, g
, h
като функции и x
, y
, z
като изрази. (Това не е проблем за домашна работа, а просто за забавление и за да видя дали разбирам преобразувания без точки.)
След дълъг процес на ръчно пренаписване, подпомаган от ghci
, стигнах до следното:
h = ((flip (.)) (flip (.)) . (flip (.))) . ((.)(.))
Забелязах, че h
се състои само от два комбинатора, "compose" (.)
и "reverse compose" flip (.)
. С това оригиналният комбинатор може да бъде написан накратко като:
c = (.) -- compose
r = flip c -- "reverse compose"
h = ((r r) . r) . (c c)
= c(c(r r)r)(c c)
Структурата (броят и редът на) на операциите "съставяне" и "обратно композиране" изглежда по някакъв начин е свързана със структурата на оригиналния комбинатор.
Смятам, че това е пряко свързано с комбинаторната логика и SKI смятането. Въпросите ми са така:
Може ли някой с по-добра представа да обясни какво се случва тук: как структурата на „съставяне“ и „обратно композиране“ в комбинатора без точки е свързана със структурата на функциите и изразите в точковия комбинатор?
Може ли това да се обобщи до произволни комбинатори (т.е. брой функции, брой изрази и техният ред е произволен)? По-конкретно, може ли всеки комбинатор да бъде израз по отношение на „съставяне“ и „обратно композиране“ и има ли схема за извличане на комбинацията от „съставяне“ и „обратно композиране“ директно от структурата на точковият комбинатор (т.е. без преминаване през целия процес на пренаписване)? Например, възможно ли е директно да се извлекат безточковите версии на
\ f g x y z -> (f x y) g z
само от разглеждане на функционалната структура?Какво е името в комбинаторната логика за
c
иr
?
Актуализация:
Изглежда, че c
е B
комбинаторът, а r
е CB
от B, C, K , система W. Но все пак ще се радвам да получа повече информация за въпросите си, особено за въпроси 1 и 2.