Pracuję nad napisaniem funkcji podzbioru i udało mi się to. Oto moja funkcja, która implementuje funkcję członka:
member( X, [ X | T ] ).
member( X, [ _ | T ] ) :- member( X, T ).
subset([], _).
subset([H|T1], T2) :-
member(H, T2),
subset(T1, T2).
subset([H1|T1], [H2|T2]) :-
+ member(H1, T2),
subset([H1|T1], T2).
Moje pytanie brzmi, czy istnieje lepszy sposób na napisanie tej funkcji za pomocą funkcji członkowskiej oczywiście.
Odpowiedzi:
2 dla odpowiedzi № 1Trzecia klauzula z subset/3
nie ma sensu i myślę, że należy go usunąć. Jeśli H1
nie jest członkiem T2
, następnie wywołanie rekurencyjne subset([H1|T1], T2)
oczywiście nie odniesie sukcesu.
Poza tym pierwsze dwie klauzule wydają się być właściwą drogą.