Я недавно пытался выяснить Пролог и возиться со списками списков в Прологе. Я пытаюсь создать своего рода маску, я полагаю, в p Prolog. У меня есть предикат, который определяет разницу между двумя списками списков (L1 и L2 позволяет сказать) в Prolog и сохраняет их как список списка (Lets say R). У меня есть другой предикат, который просто указывает, равна ли разница нулю (noDifference). Я хотел бы иметь два результирующих списка списков (M1 и M2), основанных на L1 и L2, по сравнению с R. Например, я хотел бы сравнить все значения L1 и L2 с R, если отрицательное значение находится в местоположении из R, тогда значение в том же местоположении L1 сохраняется в M1. И если положительное значение находится в местоположении R, тогда значение в том же месте L2 сохраняется в M2, если это имеет смысл. Прежде всего я проверю с помощью функции noDifference, чтобы увидеть, равна ли разница 0, и если все значения списков списков M1 и M2 будут равны 0.Маскировка в прологе
Это то, что у меня есть до сих пор (я не уверен если бы я начал это право)
masker(L1,L2,R,M1,M2):- noDifference(R1), M1=R, M2=R1;
и для остальной части этого здесь есть то, что некоторые примеры значений должны выглядеть под капотом
L1=[[1,5,3,8],[1,5,3,8]]
L2=[[5,4,7,4],[5,4,7,4]]
R=[[4,-1,4,-4],[4,-1,4,-4]]
M1=[[0,5,0,8],[0,5,0,8]]Neg values of L1 at R are stored rest are 0)
M2=[[5,0,7,0],[5,0,7,0]](Pos values of L2 at R are stored rest are 0)
Любое понимание, если то, что я делал до сих пор является правильным и как правильно сформулировать подцели, где я должен идти дальше, было бы потрясающе!
редактировать с экс предиката
?- masker([[1,5,3,8],[1,5,3,8]],
[[5,4,7,4],[5,4,7,4]],
[[4,-1,4,-4],[4,-1,4,-4]], M1, M2).
M1=[[0,5,0,8],[0,5,0,8]].
M2=[[5,0,7,0],[5,0,7,0]].
Представьте, что у вас есть рабочий предикат и покажите нам, как вы его используете и какие ответы вы ожидаете. – false
Вы не можете использовать 'is/2' для унификации переменных. 'is/2' для оценки арифметического выражения и объединения результатов с его первым аргументом. Таким образом, 'M1 является R1 'и' M2 является R2', не имеет смысла. Они должны использовать унификацию: «M1 = R1» и «M2 = R2». Что имеется в виду, например, 'L1- [1,5,3,8]'? И 'M1 [0,5,0,8]' недействителен синтаксис Prolog, поэтому неясно, что это значит. – lurker
Хорошо, что имеет смысл спасибо. Это были просто примеры того, что значения должны были быть равны после процедуры, я думаю, я не был уверен, как сделать это очень ясно! – bgibers