I want to solve this problem in Prolog. i want give a list of natural numbers to find all the elements in the list that satisfy this condition:

`All elements on the left of it are smaller than it and all the elements on the right of it are larger than it.`

For example give a list `[3,2,4,1,5,7,8,9,10,8]`

the answer would be `5,7`

So far I've manage to make this function that given an element of the list it returns true or false if the element satisfises the condition described above.

```
check(Elem, List) :-
seperate(Elem, List, List1, List2),
lesser(Elem, List1, X1),
bigger(Elem, List2, X2),
size(X1, L1),
size(X2, L2),
size(List, L3),
match(L1, L2, L3),
```

Now I want to make another predicate that given a list, it does the above computations for each element of the list. Due to the fact that more than one element may satisfy it I want to create another list with all the elements that satisfy the problem.

The question would be something like `?-predicate_name([[3,2,4,1,5,7,8,9,10,8],N).`

and the result would be a list of elements.

Sry If I am not using the right terms of Prolog. I will describe what I want to do in sequential logic language to be more specific although it's not a good idea to think like that. If we consider a the predicate check as a function that given a list and element of the list it would return true or false whether or not the element satisfied the conditions of the problem. Now I want to parse each element of the list and for each one of it call the function check. If that would return true then I would add the element in another list a.k.a result. I want to do this in Prolog but I don't know how to iterate a list.

`check`

relation has three arguments but your`check2`

relation calls it with two arguments. Do you want`check`

to return as a variable`List2`

a list containing only one item, namely`Elem`

?Now I want to make another predicate that given a list it does the above computations for each element of the list.Against what list? Do you mean, given a list, you want to run`check`

on each element of that list against the full original list? And then in`check2`

, what do you want to do with the resulting list from`check`

, if anything?