Я практикую пролог и все такое, и это убивает меня. Попытка сделать это:
twice([1,2,3],X).
результат, который я хочу,
X = [1,1,2,2,3,3].
Вот моя последняя попытка:
twice([HD|TL],[HD2|TL2]):-
twice(TL,[HD,HD2|TL2]).
twice([],[HD|TL]).
//Новый
twice([],[]).
twice([A|B],Out):- twice([A|B],[A,A|Rest],
twice(B,Rest).
twice([], [HD|TL]).
- это предикат, говорящий, что дважды пустой список (ничего) - это... что?[HD|TL]
? Это было бы не логично. - person lurker   schedule 13.12.2013[A|B]
естьOut
, но затем дает определение, которое не включаетOut
. Подумайте: как должно выглядетьOut
? Разве это не будет список с повторениемA
перед ним? Таким образом, заголовок этого предложения должен бытьtwice([A|B], [A,A|C])
(дважды[A|B]
— это список, похожий на[A,A|C]
if...), а тело завершает if, определяя, как связаныB
иC
. - person lurker   schedule 13.12.2013