Я работаю над этим прологическим назначением, где я должен проанализировать введенный пользователем список строковых символов (в частности, «u») и определить, все ли элементы равны строке «u».Если они есть, то он возвращает количество элементов, если нет, он возвращает ложь.Например:
uA(-Length,+String,+Leftover) //Prototype
?- uA(L,["u","u","u"],[]).
L = 3 .
?- uA(L,["u","u","d"],[]).
false.
Я достаточно хорошо понимаю, как работает пролог, но я не совсем понимаю, как работают списки.Любая помощь будет принята с благодарностью.Спасибо!
Редактировать: я добился некоторого прогресса с функцией сортировки (спасибо!), Но столкнулся с отдельной проблемой.
uA(Length, String) :-
sort(String, [_]),
member("u", String),
length(String, Length).
Это в основном то, что мне нужнооднако, когда я запускаю его:
?- uA(L, ["u", "u", "u"]).
L = 3 ;
L = 3 ;
L = 3.
Есть ли способ сделать так, чтобы он печатал L = 3 только один раз?Спасибо!