Логическое программирование в Lua? - PullRequest
9 голосов
/ 18 февраля 2012

Есть ли способ сделать логическое программирование (вспомните Пролог) на Lua?

В частности: есть ли модуль Lua для логического программирования ( miniKanren реализация будет лучшей, но это не обязательно)?Потому что я не смог найти ни одного [1].И если нет, то есть ли какие-либо известные (желательно испытанные) способы, как выполнять логическое программирование в Lua?

Кроме того: есть ли кто-нибудь, кто пытался сделать что-то вроде логического программирования в Lua?


[1] До сих пор я нашел только сообщение в блоге , в котором упоминается возможность написания одного в Metalua, но я бы предпочел, чтобы оно было совместимо со стандартом Lua.

Ответы [ 3 ]

1 голос
/ 14 августа 2016

В Lua есть механизм логического вывода, называемый lua-face . В дополнение к MiniKanRen, есть несколько других систем логического программирования на JavaScript , которые могут быть автоматически переведены на Lua с помощью Castl .

Я также написал переводчик , который преобразует подмножество Lua в Пролог. Учитывая этот вход:

function print_each(The_list)
    for _, Item in pairs(The_list) do
        print(Item)
    end
end

выдаст этот вывод в прологе:

print_each(The_list) :- 
    forall(member(Item,The_list),(

        writeln(Item)
    )).
0 голосов
/ 26 ноября 2018

Будет ли полезен ASP?https://potassco.org/

См. Раздел 3.1.14 руководства https://github.com/potassco/guide/releases/download/v2.1.0/guide.pdf

0 голосов
/ 28 августа 2012

Логическое программирование - это парадигма, и, таким образом, это просто форма определенного синтаксиса, где вы формулируете некоторые факты и основываете результат на логическом уравнении этих фактов, тогда как сами факты могут быть результатами других уравнений.

Lua специально не предназначен для этого, но вы можете легко смоделировать это поведение, определив все операторы логического программирования как функции - то есть function and(...), которые будут возвращать true только если все его аргументы верны, и т. Д., И сделав определение ваши "факты" в виде таблицы с ленивой оценкой, предоставленной metatable.

...