Prolog program to find maximum number in a list


















So far, I have:. I realize that R hasn't been initiated yet, so it's unable to make the comparison. Do i need 3 arguments in order to complete this? You could also consider a slower method, IMO useful to gain familiarity with more builtins and nondeterminism and then backtracking :. Note you don't strictly need three arguments, but just to have properly instantiated variables to carry out the comparison.

Then you can 'reverse' the flow of values:. Also, it does just find one of the maxima:. Ignoring the homework constraints about starting from the beginning or the end, the proper way to implement a predicate that gets the numeric maximum is as follows:.

As you said, you must have the variables instantiated if you want to evaluate an arithmetic expression. To solve this, first you have to make the recursive call, and then you compare. Right now I was working with recursion in Prolog, so if it is useful for someone I will leave 'my two cents' solving it in the two ways that I have thought:.

Both methods are similar, the difference is that in the second an auxiliary variable is used in the recursion to pass values forward, while in the first method, although we have one less variable, we are filling the Stack with instructions to be executed later, so if it were an exaggeratedly large list, the second method is appropriate.

Stack Overflow for Teams — Collaborate and share knowledge with a private group. Create a free Team What is Teams? Collectives on Stack Overflow. Learn more. Finding the max in a list - Prolog Ask Question. Asked 8 years, 2 months ago.

Active 6 months ago. Viewed 51k times. So far, I have: max2 [],R. If the first list is not empty, then write this as [Head Tail], concatenate Tail with L2 recursively, and store into new list in the form, [Head New List].

Suppose we have a list L and an element X, we have to delete X from L. Appending two lists means adding two lists together, or adding one list as an item. Now if the item is present in the list, then the append function will not work. In this case, we have used! So when the first line is executed successfully, then we cut it, so it will not execute the next operation.

This method is used to insert an item X into list L, and the resultant list will be R. So this can insert X into L in all possible positions. If we see closer, then there are some observations. This operation will change the list item positions and generate all possible outcomes. If the first list is not empty then it has the form [X L], and a permutation of such a list can be constructed as, first permute L obtaining L1 and then insert X at any position into L1.

Otherwise put the list items namely, [Head Tail], and reverse the Tail items recursively, and concatenate with the Head. Using Shift operation, we can shift one element of a list to the left rotationally. So if the list items are [a,b,c,d], then after shifting, it will be [b,c,d,a]. We will express the list as [Head Tail], then recursively concatenate Head after the Tail, so as a result we can feel that the elements are shifted. Otherwise take first two elements X and Y as Head, and rest as Tail.

We will try to write a clause that will get all possible subsets of a given set. So if the set is [a,b], then the result will be [], [a], [b], [a,b]. It will take L and return each subsets into X. As you know if two lists have the same element twice, then after union, there will be only one. So we need another helper clause to check the membership. Remember Me? Forum Cprogramming. Thread: max element of list in prolog.

Maybe I should post at Tech board? I want to find the max element of a list, in Prolog. Here is my code see comments Code:. I started from scratch and finally I came up with this code Code:. I think your second version is pretty good.

It's been a while since I wrote any Prolog though.



0コメント

  • 1000 / 1000