Поскольку я хочу избежать стоимости append/3
, я использую разницу/открытые списки.Открытый список и член
Проблема с открытым списком однако заключается в том, что member/2
реагирует на открытый список, добавляя элемент в хвост. Например:
?- L=[a|_],member(b,L).
L = [a, b|_G1196] ;
L = [a, _G1195, b|_G1199] ;
L = [a, _G1195, _G1198, b|_G1202] ;
L = [a, _G1195, _G1198, _G1201, b|_G1205] ;
L = [a, _G1195, _G1198, _G1201, _G1204, b|_G1208] ;
L = [a, _G1195, _G1198, _G1201, _G1204, _G1207, b|_G1211]
Это правильное поведение, так как открытый список имеет неограниченный «хвост» и функция member/2
объединяет этот хвост/отверстие (переменный) с первым аргументом члена.
Я смотрю, однако, таким образом, я могу проверить, есть ли в открытом списке элемент, равный данному элементу. Как я могу это сделать?
Пожалуйста, покажите код. – Rudi