Tôi mới trong prolog và tôi đang cố gắng để viết vị encode(L,L1)
mà đếm các bản sao của các yếu tố trong L
, ví dụ:ngữ mã hóa trong prolog
encode([4,4,4,3,3],L).
L=[3,4,2,3].
Đây là những gì tôi đã viết:
encode(L,L1) :- encode(L,1,L1).
encode([],_,[]).
encode([H],N,[N,H]).
encode([H,H|T],N1,[N,H|T1]) :- M is N1+1, encode([H|T],M,[N,H|T1]).
encode([H,Y|T],N,[N,H|T1]) :- H\=Y, encode([Y|T],T1).
Vị từ trên không thể đảo ngược. Nó chỉ hoạt động nếu tham số đầu tiên được cung cấp.
Tôi làm cách nào để viết mã có thể hoàn nguyên?
Ví dụ:
encode(L,[3,4,2,3]).
L = [4,4,4,3,3].
Thay cho 'M là N1 + 1', hãy thử' M # = N1 + 1'. Hãy chắc chắn rằng bạn tải mô-đun CLP (FD) (': - use_module (thư viện (clpfd)).') Và thay cho '\ =' sử dụng '\ =='. – lurker
@ lurker, tôi đã thử ở trên nhưng vẫn sau khi thực hiện các thay đổi, vấn đề vẫn còn: mã hóa (L, [3,4,2,3]) không đưa ra bất kỳ câu trả lời nào (nó ném ngoại lệ "Ra khỏi ngăn xếp cục bộ"). – coder