Sono nuovo di Prolog e ho notato che "e" danno un comportamento diverso, ma sono curioso di sapere perché. In particolare, quando si carica un file, ?- ['test1.pl'].
funziona, mentre ?- ["test1.pl"].
no.Qual è la differenza tra "e" in Prolog?
risposta
Gli articoli singoli citati sono sempre atomi.
Il significato di virgolette doppie dipende dalla bandierina Prolog double_quotes
:
atom
— con questo valore "a" = a
. Al giorno d'oggi, questo è usato raramente. Ma troverai i libri Prolog in cui è scritto ["abc.pl"]
.
codes
— un elenco di codici di carattere. Questo è spesso il default, ma si porta a risposte molto illeggibili come
?- set_prolog_flag(double_quotes,codes). true. ?- phrase(("Ja tvoi ",("sluga"|"rabotnik"),"!"), Satz). Satz = [74,97,32,116,118,111,105,32,115,108,117,103,97,33] ; Satz = [74,97,32,116,118,111,105,32,114,97,98,111,116,110,105,107,33].
Ancora peggio, se si utilizzano i caratteri al di là di ASCII:
?- phrase(("Я твой ",("слуга"|"работник"),"!"), Satz). Satz = [1071,32,1090,1074,1086,1081,32,1089,1083,1091,1075,1072,33] ; Satz = [1071,32,1090,1074,1086,1081,32,1088,1072,1073,1086,1090,1085,1080,1082,33].
chars
— un elenco di uno -carici di carbone. See this per ulteriori informazioni.
?- set_prolog_flag(double_quotes,chars). true. ?- phrase(("Ja tvoi ",("sluga"|"rabotnik"),"!"), Satz). Satz = ['J',a,' ',t,v,o,i,' ',s,l,u,g,a,!] ; Satz = ['J',a,' ',t,v,o,i,' ',r,a,b,o,t,n,i,k,!]. ?- phrase(("Я твой ",("слуга"|"работник"),"!"), Satz). Satz = ['Я',' ',т,в,о,й,' ',с,л,у,г,а,!] ; Satz = ['Я',' ',т,в,о,й,' ',р,а,б,о,т,н,и,к,!].
Questa notazione fornisce risposte più leggibili. Può essere visualizzato in modo ancora più compatto poiché la notazione a virgolette doppie può essere utilizzata per stampare qualsiasi elenco di atomi a un carattere. C'è library(double_quotes)
per SICStus e SWI.
?- use_module(library(double_quotes)). true. ?- phrase(("Ja tvoi ",("sluga"|"rabotnik"),"!"), Satz). Satz = "Ja tvoi sluga!" ; Satz = "Ja tvoi rabotnik!". ?- phrase(("Я твой ",("слуга"|"работник"),"!"), Satz). Satz = "Я твой слуга!" ; Satz = "Я твой работник!".
Se avete difficoltà nell'installazione double_quotes.pl
come una libreria, è sufficiente mettere nella directory di altri file Prolog e dire: use_module(double_quotes).
Grazie per aver ampliato la risposta sopra. – astay13
@ astay13 Questa risposta è corretta, mentre l'altra no. Non "si espande" sull'altra risposta. –
Le stringhe in Prolog sono scritte tra virgolette singole. I termini scritti tra virgolette vengono immediatamente convertiti in un elenco di codici carattere.
?- write('sdf').
sdf
true.
?- write("sdf").
[115, 100, 102]
true.
[domanda correlata] (http://stackoverflow.com/questions/4391435/how-to-manipulate-strings-in-prolog) – CamilleLDN
* Gli atomi * in Prolog sono racchiusi tra virgolette singole. – Thilo
Forse una qualifica minore: gli atomi sono di solito solo annotati. Solo se altrimenti sarebbero scambiati per qualcos'altro (come per esempio una variabile) li racchiudi tra virgolette singole. Puoi opzionalmente farlo in ogni caso, solo che è inutile. – mat
- 1. Qual è la differenza tra == e = in Prolog?
- 2. Qual è la differenza tra "false" e "no" in Prolog
- 3. Qual è la differenza tra _ e _variable in prolog?
- 4. Qual è la differenza tra = e: =
- 5. Qual è la differenza tra `##` e `hashCode`?
- 6. Qual è la differenza tra dict() e {}?
- 7. qual è la differenza tra:.! e: r !?
- 8. Qual è la differenza tra Verilog! e ~?
- 9. Qual è la differenza tra ("") e (null)
- 10. Qual è la differenza tra? : e ||
- 11. qual è la differenza tra [[], []] e [[]] * 2
- 12. Qual è la differenza tra $ e $$?
- 13. Qual è la differenza tra " " e ""?
- 14. Qual è la differenza tra {0} e ""?
- 15. Qual è la differenza tra {0} e +?
- 16. Qual è la differenza tra .ToString() e + ""
- 17. Qual è la differenza tra "in fp" e "in fp.readlines()"?
- 18. Qual è la differenza tra Metodi e Attributi in Ruby?
- 19. qual è la differenza tra @ id/e @ + id/in android?
- 20. Qual è la differenza tra 'e "in? JavaScript
- 21. Qual è la differenza tra booleano e booleano in Java?
- 22. Qual è la differenza tra target e currenttarget in flex?
- 23. In .NET, qual è la differenza tra AsFoo() e ToFoo()?
- 24. Qual è la differenza tra reindirizzamento e inoltro in Symfony?
- 25. Qual è la differenza tra identità e uguaglianza in OOP?
- 26. Qual è la differenza tra .replace e -replace in powershell?
- 27. Qual è la differenza tra% e %% in un file cmd?
- 28. Qual è la differenza tra `@ Bind` e` @ BindView` in butterknife?
- 29. Qual è la differenza tra ConditionPathExists = e ConditionPathExists = | in systemd?
- 30. Qual è la differenza tra commit() e commitAllowingStateLoss() in Fragments
In SWI-Prolog 7 e versioni successive, sia il lavoro e lo stesso significato. Come qualcuno sicuramente farà notare, questo non è un comportamento conforme a ISO-Prolog. E per favore, non accettare la risposta attualmente accettata perché non è corretta. –
@Boris: con 'set_prolog_flag (double_quotes, atom)' entrambe le query sono le stesse dell'esempio di default in IF/Prolog. Anche SWI7 [può fare di meglio] (http://www.complang.tuwien.ac.at/ulrich/iso-prolog/SWI7_and_ISO#strings_less_non_conforming), anche se nel suo complesso SWI7 non è conforme. – false