2014-10-14 2 views
0

Я хочу написать предикат, который поменяет первые две буквы в атоме длиной два или более. Длина одного атома неизменна.
, например. ? - обмен (cat, X). X = действие; с использованием 'name'Изменение первых двух букв в слове с использованием пролога

Я не собираюсь это делать, может кто-нибудь мне помочь.

Можно ли перевести письмо в переменную и поменять ее на третью переменную, как в программировании 'C'?

кода следующим образом: -

interchange(X,[]). 
interchange(X,[H|T]):- swap([A,B],W). 
swap(X,Y):- name(X,[A,B|C])-> name(Y,[B,A|C]). 

я не был уверен, что с моей логикой. Я сделал то же самое, но не работал.

я получаю мое о/р, как:

23 - посоветуйтесь (inter_change). Предупреждение: обмен/2 переопределены Предупреждение: swap/2 переопределено true. 24? - обмен (кошка, X). X = []; X = [_VCTC | _VCTD]; сбой.

+1

возможно дубликат [предиката, который будет поменять местами первые две буквы в атоме в Прологе] (http://stackoverflow.com/questions/26323501/predicate-that-will-swap-the-first-two-letters-in-an-atom-in-prolog) – false

ответ

0

Вы прочитали документацию относительно analysis and construction of atoms.

Затем вы выбираете подходящий встроенный предикат и сказать что-то вроде:

swap_first_2(X , X) :- 
    nonvar(X) , 
    atom_codes(X , [_]) 
    . 
swap_first_2(X , Y) :- 
    nonvar(X) , 
    atom_codes(X,[A,B|C]) , 
    atom_codes(Y,[B,A|C]) 
    . 
swap_first_2(X , Y) :- 
    nonvar(Y) , 
    atom_codes(Y,[A,B|C]) , 
    atom_codes(X,[B,A|C]) 
    . 
+0

'swap_first_2 ('', X) .' не работает. И 'swap_first_2 (X, a)' дает раздражающий ответ. – false

+0

@false: '' ''должен завершиться ошибкой: оператор задачи O.P указывает только атомы длиной 1 или более. Что касается «раздражающего ответа», см. Мою поправку. –

+0

Теперь 'swap_first_2 (X, X) .' бесшумно терпит неудачу - значит, нет решения - это неверно. И 'swap_first_2 (ab, ba)' имеет избыточное решение – false

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