43

something is a person if it is either Adam or Eve, or if it has a mother. We can express this in a single rule as follows:

person(X) :- (X=adam; X=eve; mother(X, Y)).

top 13 comments
sorted by: hot top controversial new old
[-] bleistift2@sopuli.xyz 13 points 1 week ago

I learned Prolog in university and it was instructive. But has anyone ever professionally used it?

[-] souperk@reddthat.com 3 points 1 week ago

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.

[-] DoctorNope@lemmy.one 7 points 1 week ago
[-] sushibowl@feddit.nl 7 points 1 week ago

Can someone explain where the Y comes from? Is this something like, there exists a mother relation between this X and some Y?

[-] sebastiancarlos@lemmy.sdf.org 7 points 1 week ago

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.

[-] Ephera@lemmy.ml 5 points 1 week ago

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.

[-] xmunk@sh.itjust.works 6 points 1 week ago

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?

[-] sebastiancarlos@lemmy.sdf.org 8 points 1 week ago* (last edited 1 week ago)

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:

  1. Take mother(X, Y) as an "axiom", and define mother terms for all elements:
mother(abel, eve).
mother(isaac, sarah).
  1. Derive mother(X, Y) from female(X) and parent(X, Y) terms.
mother(X, Y) :- 
  parent(X, Y), 
  female(Y).
  1. Smash the institutional gender power structures and define only parent/2 terms instead of mother/2 and father/2.
[-] silasmariner@programming.dev 6 points 1 week ago

I never saw such a potent combination of gender politics and prolog

[-] bleistift2@sopuli.xyz 4 points 1 week ago* (last edited 1 week ago)

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).

[-] DrDeadCrash@programming.dev 1 points 1 week ago

since being a person can fully be described by being a mother

Can you explain how this is?

[-] bleistift2@sopuli.xyz 1 points 1 week ago

Thanks for catching that. I fixed my comment.

this post was submitted on 03 Jan 2025
43 points (92.2% liked)

Programmer Humor

32707 readers
175 users here now

Post funny things about programming here! (Or just rant about your favourite programming language.)

Rules:

founded 5 years ago
MODERATORS