2012-02-18 10 views
8

C'è un modo per fare logic programming (pensa al Prolog) a Lua?Programmazione logica a Lua?

In particolare: esiste un modulo Lua per la programmazione logica (miniKanren l'implementazione sarà la migliore, ma non è strettamente necessaria)? Perché non sono riuscito a trovarne [1]. E se no, ci sono dei modi noti (preferibilmente provati) come fare la programmazione logica in Lua?

Inoltre: c'è qualcuno che ha provato a fare qualcosa come la programmazione logica in Lua?


[1] Finora ho trovato solo blog post menzionare la possibilità di scrivere uno in Metalua, ma avrei preferito vedere uno compatibile con lo standard Lua.

+1

non è tutto logica di programmazione? Potresti elaborare un po 'per le persone che non hanno familiarità con la programmazione logica. Sono sicuro che puoi inventare qualcosa usando i metabli. – jpjacobs

+0

Ok, ho aggiunto alcuni suggerimenti sulla programmazione della logica ... Sai, posso provare qualcosa come giocare con i metabli, ma all'inizio volevo sapere se qualcun altro ha provato a fare qualcosa del genere prima di me ... – mnicky

+0

Secondo hit su google per la programmazione logica "Lua", "library" fornisce un pdf sulla programmazione di più paradigmi in Lua, dove la sezione 5 ha alcuni riferimenti al prologo. Anche se non è una libreria completa (non sembra ce n'è una), potrebbe darti alcuni suggerimenti. – jpjacobs

risposta

-1

La programmazione logica è un paradigma e quindi è solo una forma di sintassi specifica in cui si indicano alcuni fatti e risultati di base sull'equazione logica di tali fatti, mentre i fatti stessi potrebbero essere i risultati di altre equazioni.

Lua non è specificamente progettato per questo, ma si può facilmente simulare questo comportamento definendo tutti gli operatori di programmazione logica come funzioni - vale a dire function and(...) che sarebbe tornato true solo se tutti i suoi argomenti vero, ecc, e rendendo definire i "fatti "come una tabella con valutazione pigro fornita da metatable.

1
Ci

è un motore di inferenza forward-chaining in Lua chiamato lua-faces. Oltre a MiniKanRen, ci sono several other logic programming systems in JavaScript che potrebbero essere automaticamente tradotti in Lua usando Castl.

Io anche wrote a translator che converte un sottoinsieme di Lua in Prolog. Dato questo ingresso:

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

che produrrà questa uscita in Prolog:

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

     writeln(Item) 
    )).