14:- use_module(library(aleph)). 15:- if(current_predicate(use_rendering/1)). 16:- use_rendering(prolog). 17:- endif. 18:- aleph. 19
20:- mode(1,p(+indep,+dep)). 21:- mode(1,lin_regress1(+dep,+indep,#number,#number,#number)).
22
23:- determination(p/2,lin_regress1/5). 24
25:- lazy_evaluate(lin_regress1/5). 26
28
29:- positive_only(lin_regress1/5). 30
31:- aleph_set(portray_literals,true). 32
33aleph_portray(p(A,B)):-
34 format("~q",[p(A,B)]).
35aleph_portray(lin_regress1(Y,X,M,C,E)):-
36 format("~q",[Y]), write(' is '),
37 format("~q",[M]), write(' * '),
38 format("~q",[X]), write(' + '),
39 format("~q",[C]), write(' +/- '),
40 format("~q",[E]).
41
42:-begin_bg. 43
44nlist([]).
45nlist([_|_]).
46
48lin_regress1(Y,X,M,C,Error):-
49 number(X), number(Y),
50 nonvar(M), nonvar(C), nonvar(Error), !,
51 Y1 is M*X + C,
52 Diff is Y - Y1,
53 abs_val(Diff,D1),
54 D1 =< Error.
55
57lin_regress1(Y,X,M,C,Error):-
58 nlist(X), nlist(Y),
59 var(M), var(C), !,
60 l_regress1(Y,X,M,C,Error).
61
63lin_regress1(Y,X,0.0,Y,0.0):-
64 X \= Y.
65
66
68l_regress1([YVals|_],[XVals|_],M,C,0.0):-
69 YVals = [Y1,Y2|_],
70 XVals = [X1,X2|_],
71 M is (Y2-Y1)/(X2-X1),
72 C is Y1 - M*X1.
73
74abs_val(X,Y):- X < 0, !, Y is -X.
75abs_val(X,X):- X >= 0.
76
77:-end_bg. 78:-begin_in_pos. 79p(1,2).
80p(2,4).
81p(3,6).
82p(4,8).
83:-end_in_pos. 84:-begin_in_neg. 85p(1,0).
86p(2,5).
87p(3,9).
88:-end_in_neg.
?-
sat(1)
,reduce(A)
. */