Prolog ist eine logische Programmiersprache mit Eigenschaften, die sich sehr von populären Programmiersprachen wie Python und JavaScript unterscheiden. Prolog orientiert sich an der Prädikatenlogik erster Ordnung in der formalen Logik.
# install prolog on ubuntu
sudo apt update ; sudo apt-get install swi-prolog
The basic constructs of logic programming, terms and statements, are inherited from logic. There are three basic statements:
Facts are fundamental assertions about the problem domain (e.g. “Socrates is a man”) Rules are inferences about facts in the domain (e.g. “All men are mortal.”) Queries are questions about that domain (e.g. “Is Socrates mortal?”)
Wie oben erwähnt, hat Prolog-Code drei Attribute: Facts, Rules und Queries. Grob gesagt sind Facts Dinge, die wahr sind, Rules sind Dinge, die mit Wahrheiten zusammenhängen, und Queries sind Fragen.
Introduction to logic programming with Prolog
Die Prolog-Ausführung erfolgt wie folgt:

yuis@yuis:~/pg/prolog$ cat > dev.pl
man(socrates).
mortal(X) :- man(X).
yuis@yuis:~/pg/prolog$ prolog -q
?- mortal(socrates).
ERROR: Undefined procedure: mortal/1 (DWIM could not correct goal)
?- [dev].
true.
?- mortal(socrates).
true.
?-
Folgendes führt zu einem Fehler:

yuis@yuis:~/pg/prolog$ prolog -q
?- man(socrates).
ERROR: Undefined procedure: man/1 (DWIM could not correct goal)
?-
Was ich zu sagen versuche, ist, dass Facts und Rules in einer Datei geschrieben und geladen werden sollten, während Queries auf der interaktiven Shell ausgeführt werden sollten.
Loading files in Prolog - Stack Overflow
Wenn man sich viele Prolog-Referenzartikel ansieht, schreiben sie so, als ob Facts wie man(socrates). auf der interaktiven Shell definiert und ausgeführt werden können, aber das führt zu Fehlern. Es ist wahrscheinlich ein Versionsunterschied oder so etwas.
Wenn Sie also Code direkt in die interaktive Shell einfügen möchten, würden Sie es so schreiben:

yuis@yuis:~/pg/prolog$ prolog -q <<< " $( printf "[dev].\nmortal(socrates)." )"
true.
true.
Um meinen persönlichen Ansatz vorzustellen: Ich bereite zwei Dateien vor, eine für Facts und Rules und eine für Queries, und mache Folgendes:
prolog <<< " $( printf "[dev_facts].\n$( cat dev_queries.pl )" ) "