Я пытаюсь подсчитать количество инверсий в списке. Предикат inversion(+L,-N)
объединяет N
с числом инверсий в этом списке. Инверсия определяется как X > Y
и X
появляется перед Y
в списке (если X
или Y
не является 0
). Например:
?- inversions([1,2,3,4,0,5,6,7,8],N).
N = 0.
?- inversions([1,2,3,0,4,6,8,5,7],N).
N = 3.
Для того, для чего я использую это, список всегда будет содержать 9 элементов и всегда будет содержать числа 0-8
уникально.
Я новичок в Prolog, и я стараюсь сделать это как можно более кратким и изящным; Похоже, DCG, вероятно, многое поможет. Я читал официальное определение и некоторые учебные сайты, но до сих пор не понимаю, что это такое. Любая помощь будет принята с благодарностью.