/* Test of strings / lists Using strings as (single) input seems to work, but the output must be a number. Nope. */ data(string_test,Data,Vars,Unknown,Ops,Constants,MaxSize,Params) :- Data = [ [["adam"],4+1], [["eve"],3+1], [["super"],5+1] ], % This works with length/1 % Data = [ % [["adam"],2*4+1], % [["eve"],2*3+1], % [["super"],2*5+1] % ], % This does not work. % Data = [ % [["adam"],'a'], % [["eve"],'e'], % [["super"],'s'] % ], % This does not work. % Data = [ % [["adam"],ord('a')], % [["eve"],ord('e')], % [["super"],ord('s')] % ], Constants = [1], Unknown = ["picat"], Vars = ['L'], Ops = [length], % Ops = new_map([infix=["+","-","*","/"], % op1=["length"] % % op1=["ord"] % % op1=["first","last"] % % , users3=["nth"] % ]), % % get_global_map().put("debug",true), % Constants = [1,2], % "abcdef", MaxSize = 4, Params = new_map([debug=true]). % NOTE: These should be placed in the main problem % EXPERIMENTAL: lists / strings eval('length'(X)) = Val, list(X) => XVal = eval(X.to_string), Val = length(XVal). eval('first'(X)) = Val => println(first=X), XVal = X, % eval(X.to_string), println(eval_first_xval=XVal), Val = first(XVal). eval('reverse'(X)) = Val => println(reverse=X), XVal = eval(X), % eval(X.to_string), println(eval_first_xval=XVal), Val = reverse(XVal). eval('last'(X)) = Val => println(last=X), XVal = X, % eval(X.to_string), println(eval_last_xval=XVal), Val = last(XVal). eval('ord'(X)) = Val => char(X), XVal = eval(X), Val = ord(XVal). eval('chr'(X)) = Val => XVal = eval(X), Val = chr(XVal). eval('nth'(N,X,V)) = Val, list(X) => NVal = eval(N), % XVal = eval(X.to_string), nth(NVal,X,Val). eval(Char) = Char, char(Char) => true. eval(List) = List, list(List) => true. eval(String) = String, string(String) => true.