I learned Prolog in university and it was instructive. But has anyone ever professionally used it?
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.
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.