2010-06-01 5 views
17

Vorrei chiederti quale sistema formale potrebbe essere più interessante da implementare da zero/reverse engineer.Cosa c'è di più interessante o potente: Curry, Mercury o Lambda-Prolog?

Ho esaminato alcuni progetti esistenti e open source di sistemi di programmazione logici/dichiarativi. Ho deciso di inventare qualcosa di simile nel mio tempo libero, o almeno di cogliere l'idea generale di implementazione.

Sarebbe bello se alcuni di questi sistemi fornissero la maggior parte della forza espressiva e della concisione delle moderne indagini accademiche nella logica e nella sua relazione con i modelli computazionali.

Cosa consiglieresti di studiare almeno a livello concettuale? Ad esempio, Lambda-Prolog è interessante in particolare perché consente relazioni di ordine più elevato, ma AFAIK si basa sulla logica intuizionista e quindi manca il principio di escluso-medio; questo è generalmente uno svantaggio per me.

Vorrei anche dare qualche suggerimento sui moderni sistemi di programmazione logica meno popolari ma più espressivi/potenti.

+0

Questa è una domanda simile: http://stackoverflow.com/questions/17675133/most-useful-instructive-functional-logic-language-to-learn?rq=1 –

risposta

16

Prolog è stata la prima lingua che ha cambiato il mio punto di vista alla programmazione. Ma più tardi ho scoperto che non era così di alto livello come mi piacerebbe vederlo.

Curry - Ho provato solo Munster CC e l'ho trovato un po 'scomodo. In realtà, a questo punto, ho deciso di smettere di ignorare Haskell.

Mercurio ha molte cose che volevo vedere in Prolog. Ho davvero buone aspettative sulla possibilità di distinguere le modalità di regole. I programmi scritti in Mercury dovrebbero ispirare il compilatore a fare molte ottimizzazioni (credo).

+4

Prolog è affascinante. Ma ancor più, è quanto sia "semplice" in realtà. – alex

2

Per il progetto finale in un corso di linguaggi di programmazione che ho preso, abbiamo dovuto incorporare un valutatore Prolog in Schema utilizzando continuazioni e macro. Il risultato finale era che si poteva liberamente combinare il codice Scheme e Prolog e persino passare predicati arbitrari scritti in Scheme al motore Prolog.

È stato un esercizio molto istruttivo. Le prime 12 righe di codice (and e or) hanno impiegato circa 6 ore per scrivere e correggere. Era praticamente la logica di ricerca, scritta in modo molto conciso usando le continuazioni. Il resto è seguito un po 'più facilmente. Poi, una volta aggiunto l'algoritmo di unificazione, tutto ha funzionato.

4

Se dovessi provare ad estendere un sistema basato su logica, sceglierei Prolog Cafe poiché è piccolo, open source, conforme agli standard e può essere facilmente integrato in sistemi basati su java.

9

Twelf.

Generalizza lambda-prolog in modo significativo ed è una struttura logica, una struttura metalogica e un linguaggio di programmazione logica. Se hai bisogno di un linguaggio con una particolare attenzione alla logica e al calcolo, è il migliore che io conosca.

+1

Non ci sono stati aggiornamenti su Twelf dal 2013. Sai se è ancora un progetto attivo? –

Problemi correlati