/* Options in Picat. This Picat model was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ module options. % import util. % import cp. main(Args) => Opt = options(Args,[test1=1,test2=b,test3=333]), println(opt=Opt), nl. main => go. go => println("testing options"), Opt1=options(["a=1", "b=2", "c=3"]), println(opt1=Opt1), Opt1b=options([a=1, b=2, c=3]), println(opt1b=Opt1b), Opt2=options(["a=1","b=2","c=3"],[a=10,b=11,c=12,d=13]), println(opt2=Opt2), Opt2b=options([a=1,b=2,c=3],[a=10,b=11,c=12,d=13]), println(opt2b=Opt2b), nl. % option/1: Return a map based on Args ([K1=V1,K2=V2,...Kn=Vn]) options([]) = new_map(). options(Args) = Args, map(Args) => true. options(Args) = new_map([O.parse_term() : O in Args]), length(Args) > 0, string(Args[1]) => true. options(Args) = new_map(Args), length(Args) > 0, not(string(Args[1])) => true. % % convert Args + Defaults to an Option list (as a map) % options(Args,Default) = new_map([K=Args2.get(K, V) : K=V in Default]) => Args2 = options(Args).