:- lib(ordsets). % ord_add_element/2. :- lib(lists). % is_list/1. :- lib(ord_add_list/3). kv_to_ord_k_v( KVList, OrdKs, OrdVs ) :- kv_to_ord_k_v( KVList, [], [], OrdKs, OrdVs ). kv_to_ord_k_v( [], OrdKs, OrdVs, OrdKs, OrdVs ). kv_to_ord_k_v( [K-V|T], AccKs, AccVs, OrdKs, OrdVs ) :- ord_add_element( AccKs, K, NextKs ), ( is_list(V) -> ord_add_list( V, AccVs, NextVs ) ; ord_add_element( AccVs, V, NextVs ) ), kv_to_ord_k_v( T, NextKs, NextVs, OrdKs, OrdVs ).