Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Loggik 07. 03. 2018, 22:39:21
-
Zdravím, když chci reprezentovat formálně například "John fell", můžu použít predikát "fall(John)" (teď ignoruju gramatický čas). Pro "John almost fell" bude "almost(fall)(John)", to je ale výraz vyššího řádu. Jak se dá něco takového zapsat v Prologu, aby se s tím dalo pracovat v dotazech nebo jiných pravidlech? Je případně něco lepšího než Prolog pro tyto účely?
-
No je to uz par dekad co jsme prologoval ale jestli se nepletu tak funkce call() slouzi na higher order. Tedy u vas call(almost, fall, John) .
-
almost(fall)(John)
To se snadno řeší reifikací, fall(John) je nějaké e1 a almost(_,_) dělá z e1 nějaké (co do pravdivostních podmínek jiné) e2, takže celé to je almost(e2,e1) ⋀ fall(e1,John), přičemž e2 je (dokazatelná) pravda iff ten původní výraz je pravda.