Тази min
дефиниция по-долу работи с две църковни числа и връща най-малкото голямо. Всяко число се превръща в продължение, което изпраща своето предшестващо число към другото, зиг и заг, докато се достигне нула. Освен това, едно от числата добавя f към резултата всеки път, когато се извика, така че в крайна сметка ще имате (\ f x -> f (... (f (f x)) ...))
, където броят на 'f' вдясно е броят пъти, когато е извикано първото продължение.
min a b f x = (a_continuator b_continuator)
a_continuator = (a (\ pred cont -> (cont pred)) (\ cont -> x))
b_continuator = (b (\ pred cont -> (f (cont pred))) (\ cont -> x))
Изглежда, че min
не може да се въведе на System-F. Например, за да го стартирам на GHC, трябваше да използвам unsafeCoerce
два пъти:
import Unsafe.Coerce
(#) = unsafeCoerce
min' = (\ a b f x -> (a (\ p c -> (c # p)) (\ c -> x) (b (\ p c -> (f (c # p))) (\ c -> x))))
toInt = (\ n -> (n (+ 1) 0))
main = print (toInt (min'
(\ f x -> (f (f (f (f (f x)))))) -- 5
(\ f x -> (f (f (f (f (f (f (f (f x)))))))))) -- 8
:: Int)
Възможно ли е да въведете min
в System-F (или в Изчислението на конструкциите)?
(cont -> x)
. Има ли и\
? - person chi   schedule 18.11.2015CN = forall a. (a->a)->a->a
. Тъй като политиповете не могат да бъдат изведени, бих започнал с анотиране на променливи с цифрови стойности сCN
-- има шанс да ги използвате в различни типове. - person chi   schedule 18.11.2015T
(което може да се приложи само към функцииT->T
) -- това ограничение обаче е много неудобно. В многотипен език можете да присвоите типCN
на числа, така че те да могат да работят с всяка функция от типT->T
, независимо от типаT
. - person chi   schedule 18.11.2015a (\ p c -> c p)
не може да бъде въведен в SystemF (дори след добавяне на някои параметри на типа). Типът му изглежда зависи от действителната стойност наa
. Предполагам, че в CoC може да бъде въведен, но само след добавяне не само на променливи на типа/аргументи на типа, но и на други термини, които кодират как полученият тип зависи отa
. - person chi   schedule 18.11.2015GHC.Generics
и неговите употреби. За по-напреднали общи вселени можете да погледнете това или това. - person András Kovács   schedule 19.11.2015