I learned Prolog in university and it was instructive. But has anyone ever professionally used it?
Programmer Humor
Post funny things about programming here! (Or just rant about your favourite programming language.)
Rules:
- Posts must be relevant to programming, programmers, or computer science.
- No NSFW content.
- Jokes must be in good taste. No hate speech, bigotry, etc.
no
DataLog is used to verify smart contracts. I don't know any specific examples of prolog used in the industry, though I am sure there are a few. Probably, there are expert systems implemented with prolog that are still used.
Logic programming in general has a few usages, the unification algorithm is used for pretty much every type system. Also, it is quite good for verification systems. For example, I know some symbolic execution systems implemented in OCaml.
Can someone explain where the Y comes from? Is this something like, there exists a mother relation between this X and some Y?
mother can be used in several ways. If both X and Y variables are uninitialized, then it looks for all mother relationships. If one of them is initialized, it looks for matching relationships. If both are initialized, it returns true if such a relationship exists.
Yeah, the Y
is a wildcard in that position. Typically, you would write it as an underscore, primarily because most Prolog compilers will warn about unknown variables, since those could also just be a typo of an existing variable.
I'll admit I don't speak prolog but doesn't this definition lack a recursive case to ensure that the mother is either Eve or a descendent of Eve? And there should probably be a father case in there as well?
Depends on how you want to define your domain knowledge.
The thing you need to define for sure is the predicate mother/2
(Which has arity 2, or in other words, two arguments). From then on, multiple options are available:
- Take
mother(X, Y)
as an "axiom", and define mother terms for all elements:
mother(abel, eve).
mother(isaac, sarah).
- Derive
mother(X, Y)
fromfemale(X)
andparent(X, Y)
terms.
mother(X, Y) :-
parent(X, Y),
female(Y).
- Smash the institutional gender power structures and define only
parent/2
terms instead ofmother/2
andfather/2
.
I never saw such a potent combination of gender politics and prolog
doesn’t this definition lack a recursive case to ensure that the mother is either Eve or a descendent of Eve
We don’t see the definition of mother
. It might already encode that Y is a person.
And there should probably be a father case in there as well?
While every person does also have a father, it’s completely redundant, since being a person can fully be described by [Edit: ~~being~~ having] a mother (or being Adam or Eve).
since being a person can fully be described by being a mother
Can you explain how this is?
Thanks for catching that. I fixed my comment.