[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
## Re: prolog program solutions

**From**: |
Michael Hauptmann |

**Subject**: |
Re: prolog program solutions |

**Date**: |
Sat, 02 Jun 2012 00:07:54 +0200 |

**User-agent**: |
Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.1.8) Gecko/20100227 Thunderbird/3.0.3 |

> Unfortunatelly I have never use this language
I recommend this (very good) free online book:
http://www.learnprolognow.org/lpnpage.php?pageid=online
I am not an expert, but here are my suggestions for your problems:

`(The solutions are not difficult. The above mentioned book will help you
``to understand them.)
`
> 1. Summary of the elements in a list,
> and check that is divided or not diveded with 3?
Solution 1 of problem 1:
list_sum([], 0).
list_sum([L | Ls], Sum) :-
list_sum(Ls, Sum_of_Ls),
Sum is Sum_of_Ls + L.
list_sum_divisible_by_3(List) :-
list_sum(List, Sum),
0 is Sum mod 3.

`The first solution is better readable, but the next solution is better
``for the stack because it is tail recursive:
`
Solution 2 of problem 1:
list_sum(List, Sum) :-
list_sum_aux(List, 0, Sum).
list_sum_aux([], Accumulator, Accumulator).
list_sum_aux([L | Ls], Accumulator, Result) :-
New_Accumulator is Accumulator + L,
list_sum_aux(Ls, New_Accumulator, Result).
list_sum_divisible_by_3(List) :-
list_sum(List, Sum),
0 is Sum mod 3.
> If the 7 is in a list, doubles it.
double_7(Input_List, Output_List) :-
double_7_aux(Input_List, Output_List - []).
double_7_aux([], X-X).
double_7_aux([7 | Ls], [7, 7 | X] - Y) :-
!,
double_7_aux(Ls, X - Y).
double_7_aux([L | Ls], [L | X] - Y) :-
double_7_aux(Ls, X - Y).
> If the 7 is in a list, change it for 2,7,2.
This problem and the second problem are very similar.
> What is the program and how to
> test it with SWI-Prolog?
This is the GNU Prolog mailing list, but I would recommend:
• Read the above mentioned book.
• Read this section of the GNU Prolog Manual:
http://www.gprolog.org/manual/gprolog.html#htoc8
Best Regard,
M. Hauptmann.

[Prev in Thread] |
**Current Thread** |
[Next in Thread] |

**Re: prolog program solutions**,
*Michael Hauptmann* **<=**