Saya mencoba menulis predikat untuk menemukan kedalaman sarang dalam istilah prolog. misalnya: untuk atom atau variabel kedalamannya nol. untuk f(a,b,1,2) kedalamannya adalah 1. untuk f(a,b(7,a),1,2) kedalamannya adalah 2, dst. inilah yang saya miliki sejauh ini.
% base cases.
get_depth(Term,0):-
non_compound(Term),!.
get_depth(Term,1):-
Term =.. [_|T],
all_basic(T),!. % no compound terms in list.
get_depth(Term,Depth):-
% this is where I need help.
% helper prdeicates
all_basic([T]):-
non_compound(T),!.
all_basic([H|T]):-
non_compound(H),
all_basic(T).
% term is non compound, either atomic or non instantiated variable.
non_compound(Term):-
atomic(Term),!;
var(Term).
max(X,Y,X):-
X >= Y,!.
max(_,Y,Y).
?- term_string(a(b(C,D),e(F),g),String). String = "a(b(_10232,_10234),e(_10238),g)"
Dengan kata lain, jangan perlakukan input sebagai tipe istilah Prolog tertentu, melainkan sebagai rangkaian karakter. - person Guy Coder   schedule 26.11.20201+1
misalnya, saya akan mengatakan 1, karena ini adalah bentuk kompak dari+(1, 1)
. - person Willem Van Onsem   schedule 26.11.2020a()
? - person Willem Van Onsem   schedule 26.11.20201+1
? Berapa kedalamana()
? Juga jika seseorang mengubah daftar menjadi notasi titik, mis.?- write_term([a,b,c], [dotlists(true)]). .(a,.(b,.(c,[]))) true.
Jadi haruskah seseorang mengubah input menjadi AST sebelum diproses? - person Guy Coder   schedule 26.11.2020not use any specific prolog built in
seiring berjalannya waktu. - person Guy Coder   schedule 26.11.2020