Let's write some Prolog that will add fractions together. This takes a bit of logic, as you may remember from your math class.

Suppose you have two fractions $N_1/D_1$ and $N_2/D_2$, where $N$ means numerator and $D$ means denominator. The $1$ and $2$ refer to fractions $1$ and $2$ to add together, so we'd like to find $N_1/D_1+N_2/D_2$.

You probably remember the plan:

As for Prolog, we'd like the goal to be something like

Suppose you have two fractions $N_1/D_1$ and $N_2/D_2$, where $N$ means numerator and $D$ means denominator. The $1$ and $2$ refer to fractions $1$ and $2$ to add together, so we'd like to find $N_1/D_1+N_2/D_2$.

You probably remember the plan:

- If the denominators are the same, or $D_1=D_2$, then the sum will have this denominator, with the two numerators added together. This means $N_{sum}=N_1+N_1$ and $D_{sum}=D_1$ (or $D_2$). The answer will be $N_{sum}/D_{sum}$.

- If the denominators are different, or $D_1\ne D_2$, we'll have to find a common denominator $D_{sum}$, which is $D_{sum}=D_1\times D_2$. The numerator of fraction 1 will become $N'_1=N_1\times D_2$, and the numerator of fraction 2 will become $N'_2=N_2\times D_1$. Now, the numerator of the sum will be the sum of the new numerators, or $N_{sum}=N_1'+N_2'$. Once again, the answer will be $N_{sum}/D_{sum}$.

As for Prolog, we'd like the goal to be something like

`add(1,5,2,5,Nsum,Dsum).`

for which we'd like Prolog to find `Nsum`

to be 3 and `Dsum`

to be 5. For something like `add(2,3,1,4,Nsum,Dsum).`

, we'd like Prolog to find `Nsum`

to be 11 and `Dsum`

to be 12.
add(N1,D,N2,D,Nsum,D):- Nsum is N1 + N2.

add(N1,D1,N2,D2,Nsum,Dsum)

add(N1,D1,N2,D2,Nsum,Dsum)

Move the mouse over a dotted box for more information.

Type your code here:

See your results here:

You have to fill in the

`??`

blocks in the code. Confirm `D1`

is not equal to `D2`

(`\==`

means not equal in Prolog). Then finish it by setting values for the common denominator `Dsum`

, `N1p`

, `N2p`

, and the final numerator `Nsum`

. As you read the code, remember the comma means "and." And, Prolog will keep going from left to right in a rule, as long as each sub-foal in a rule succeeds.