Quali sono alcuni buoni IDE Prolog?

Migliore risposta

Emacs fino in fondo!

Per uno sviluppo serio di Prolog, consiglio GNU Emacs con la modalità Prolog mantenuta da Stefan Bruda. La homepage di SWI-Prolog spiega come configurarlo e include anche puntatori ad altro materiale:

Uso di SWI-Prolog con GNU Emacs

In effetti, SWI-Prolog viene fornito anche con il proprio clone di Emacs, utile per attività di editing più piccole. Puoi invocarlo con? – emacs.

Per alcuni suggerimenti alternativi, dai unocchiata a questa discussione:

What “sa good Prolog IDE per Linux?

Risposta

Prolog non sta morendo. Generalmente, viene insegnato a tutti gli studenti di Comp Sci che lavorano per un dottorato di ricerca! Comunque la tua domanda potrebbe essere in in parte dovuto al fatto che “hai notato che nonostante tutti siano costretti ad impararlo, la quantità di codice Prolog appena scritto non è allaltezza dei linguaggi giovani, meno” provati e veri “? Negli ultimi due anni, valuta quanti nuovi progetti o post sul blog sono presenti: Clojure, F #, Brain4uck, Go, Cobra, miniKanren e Scala. Purtroppo, anche il più piccolo di questi ha superato il numero di nuove biblioteche e progetti Prolog messi insieme negli ultimi 10 anni! (Scusa se alcune di queste lingue non sono molto giovani .. ma pensa a quanta trazione ognuna ha guadagnato in periodi di tempo così brevi)

Penso che nei prossimi due anni Prolog supererà almeno due o tre le lingue di cui sopra nei post del blog e nei nuovi progetti.

Altre riflessioni

Sto scrivendo un comune compilatore lisp in Prolog .. sembra un progetto di circa 2 mesi. Funziona facendo in modo che il compilatore converta il codice sorgente lisp in Prolog e quindi ottimizzi il codice prologo piuttosto che lasciare che il backend compili il prologo. Questo flusso di dati sembra già difficile per Haskell o Idris. Sento che il vero problema fondamentale è che le ultime due lingue non sono abbastanza espressive per descrivere ciò che ho appena detto in modo dichiarativo a livello di dettaglio per realizzarlo.

Ecco un esempio di “dettagli descrittivi” (per il sistema dei pacchetti) https://github.com/TeamSPoon/wam\_common\_lisp/blob/master/prolog/wam\_cl/package.pl

Oppure lottimizzatore: https://github.com/TeamSPoon/wam\_common\_lisp/blob/master/prolog/wam\_cl/mizepro.pl

È facile fare in modo che Haskell ottimizzi i suoi sorgenti prima di eseguirlo? Mi aspetto anche che in Haskell occorra una sorta di rappresentazione Haskell intermedia che possa interpretare. Probabilmente, non sarebbe troppo difficile scrivere un interprete Lisp in Haskell .. il compilatore è molto più faticoso?

I livelli di indottrinamento di Haskell sono adatti per scopi accademici e, di conseguenza, Haskell ha più Ph.D. Mogli trofeo di Prolog. Cè molta più complessità e manuali su come compiacere i loro mariti (il programmatore Haskell legge il libro HoTT dopo il libro HoTT) Ma penso che potrebbero non rendersi conto di essere in una relazione violenta: ciò che è perverso è che pensano (sperano) il loro il marito, di nome Haskell, concederà loro gli stessi privilegi delle mogli Prolog (portandole nelle stesse vacanze) (Non sono consapevoli dellesistenza effettiva delle mogli prolog comunque o sono soggette alla propaganda dei loro mariti (come visto in questo thread) ) …. ottengono i privilegi solo se si comportano molto bene. Penso che un matrimonio del genere sarebbe adatto solo per il nubile .. quello che non sanno è che non saranno mai “abbastanza buoni” per ottenere le stesse vacanze (capacità del programma) a cui viene detto che tali desideri sono sbagliati e fatti per rinfrescarsi guardando un altro video di Wadler.

Non fraintendermi, Prolog to ha indottrinamento. . “non usare tagli .. non usare setarg / o asserta /” Ma in Haskell, se raffini la tua metodologia, scoprirai che la tua intenzione è sbagliata. In Prolog, se raffini la tua metodologia, scopri che la tua intenzione non ha mai sbagliato.

Altri aspetti della relazione disfunzionale:

Sia Haskell che Prolog sono sistemi dichiarativi per descrivere la mitigazione degli stati. Entrambi i linguaggi che il programmatore sembra avere per sviluppare un linguaggio intorno alle transizioni di dati. In Prolog, è espresso tramite proposizioni. (Ma in Haskell queste proposizioni devono essere di tipo)

Entrambi costruiscono noiosamente un percorso ad ostacoli per roditori usando rotoli di carta igienica … La battaglia intellettualmente è facendo muovere quel roditore in modi estremamente intelligenti. In Prolog costruisci i rotoli di carta igienica, poi crei generatori di rotoli di carta igienica chiamati meta-predicati invece del calcolo dei costruttori.

Per me, vedo Haskell come avente un extra delle mie proposizioni logiche di prolog devono diventare tipi (uno per cla uso). Sembra che possa essere piuttosto noioso (i rotoli di carta igienica hanno nomi univoci) (provare a caratterizzare alcune delle mie clausole prologo sarebbe difficile) Poiché la maggior parte dei miei programmi prologo che fanno cose sorprendenti contengono migliaia di clausole. Lunico motivo per rendere questo difficile per me sarebbe rendere le cose più facili per il verificatore di tipo?Non sono sicuro che questi giri in più nella sfilza di sconforto mi aiuterebbero. Inoltre, non devo fare in modo che ogni clausola (proposizione) si adatti a un sistema di tipi (in un tipo)!

In Prolog, improvvisamente, progetto il mio sistema di tipi dinamicamente .. non risolvibile termini. (infiniti termini non associati come uso nellimplementazione dellambiente Lisp) Haskell vorrebbe che lo perdessi. Eppure cosa offre in cambio? Un po di coerenza? Perché un programmatore Prolog dovrebbe iscriversi alla microgestione filosofica?

Tutto ciò che Haskell vuole è che io perda le capacità? Se fossi un programmatore nubile, questo sembra un matrimonio peggiore che non avrei conosciuto meglio.

Haskell ha un “culto” dellindottrinamento. Forse per la maggior parte dei programmatori OO, visto che vedrebbero Haskell come una mossa verso lalto verso i veri generici.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *