Попробуйте так:
data_cleanup([], []).
data_cleanup([H|T], [A|B]):-
split_string(H, "\t", "", A),
data_cleanup(T, B).
Теперь он что-то делает:
?- data_cleanup(['p1\tp2\t100\tStorgatan', 'p1\tp3\t200\tLillgatan', 'p2\tp4\t100\tNygatan', 'p3\tp4\t50\tKungsgatan', 'p4\tp5\t150\tKungsgatan'], Result).
Result = [["p1", "p2", "100", "Storgatan"], ["p1", "p3", "200", "Lillgatan"], ["p2", "p4", "100", "Nygatan"], ["p3", "p4", "50", "Kungsgatan"], ["p4", "p5", "150", "Kungsgatan"]].
Упражнение: определите этот предикат, используя maplist
.
РЕДАКТИРОВАТЬ: или еслиВ любом случае вы используете SWI-Prolog, и если вы предпочитаете атомы, а не стриги, вы можете использовать atomic_list_concat/3
:
split_atom(Delimiter, Atom, List) :- atomic_list_concat(List, Delimiter, Atom).
, а затем
?- maplist(split_atom('\t'), ['p1\tp2\t100\tStorgatan', 'p1\tp3\t200\tLillgatan', 'p2\tp4\t100\tNygatan', 'p3\tp4\t50\tKungsgatan', 'p4\tp5\t150\tKungsgatan'], L).
L = [[p1, p2, '100', 'Storgatan'], [p1, p3, '200', 'Lillgatan'], [p2, p4, '100', 'Nygatan'], [p3, p4, '50', 'Kungsgatan'], [p4, p5, '150', 'Kungsgatan']].