Reprezentace znalostí a Prolog

Loggik

Reprezentace znalostí a Prolog
« kdy: 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?


VojtaF

Re:Reprezentace znalostí a Prolog
« Odpověď #1 kdy: 08. 03. 2018, 09:39:12 »
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) .

Loggik

Re:Reprezentace znalostí a Prolog
« Odpověď #2 kdy: 08. 03. 2018, 12:49:08 »
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.