2013-04-01 2 views
0

Как вы можете написать предикат в Prolog, который принимает 3 списка, L1 - это список, содержащий константы и переменные, L2 содержит константы, а L3 - это некоторый список. Предикат должен возвращать true, если переменные первого списка, замененные соответствующим элементом второго списка, равны третьему списку.Как заменить переменные в списках в Prolog?

Как если бы L1_i является переменной, ее необходимо заменить на L2_i, а затем, если она должна быть равна L3_i.

Как это можно сделать?

Спасибо.

+0

Вы пробовали что-нибудь? –

ответ

0

Объединение (т. Е. =/2). Это, фактически.

?- [X, a, Y, b, Z] = [1, A, 2, B, 3]. 
X = 1, 
Y = 2, 
Z = 3, 
A = a, 
B = b. 

О, но вам нужны три списка:

?- [X,a,Y,b,Z] = [1,A,2,B,3], [1,A,2,B,3] = [1,a,2,b,3]. 
X = 1, 
Y = 2, 
Z = 3, 
A = a, 
B = b. 

Извините, давайте сделаем его более похожим вашего задания:

?- L1 = [X,a,Y,b,Z], L2 = [1,A,2,B,3], L3 = [1,a,2,b,3], L1 = L2, L2 = L3. 
L1 = [1, a, 2, b, 3], 
X = 1, 
Y = 2, 
Z = 3, 
L2 = [1, a, 2, b, 3], 
A = a, 
B = b, 
L3 = [1, a, 2, b, 3]. 

:)

+0

Я прочитал задание более ограниченным образом. Похоже, что равенство следует применять только на «слотах переменных», а не на целых списках. – CapelliC

+0

Ugh. Это будет так уродливо и однообразно. –

Смежные вопросы