Ну, в течение последних нескольких часов я пытался поменять второй элемент данного списка его предпоследним элементом (вторым последним). Дайте список [a,b,c,d,e,f]
, я хочу получить [a,e,c,d,b,f]
. Например:Сменить второй элемент и элемент prelast из списка пролог
correct(List1,X,List2)
?-correct([a,y,b,c,d,e,x,f],x,List2).
List2[a,x,b,c,d,e,y,f].
List1
список я должен поменять второй и предпоследний (второй) последний элемент.X
- предпоследний элемент.List2
- новый список с замененными элементами.
спасибо большое за ваш быстрый answer.Now я понимаю, как я могу решить эту проблему. – John
Предикат 'correct/2' может быть определен таким образом, чтобы список ввода проходил только один раз и не дважды вызывал предикат' reverse/2' (что, btw, не является стандартным предикатом, хотя часто определяется в библиотеке утилиты список предикатов). –
@PauloMoura Согласен, хотя 'reverse/2' определен в GNU Prolog и SWI Prolog. Это был «простой», если менее эффективный подход. – lurker