矩阵的Prolog行列式(递归)

时间:2019-03-20 00:19:30

标签: prolog

例如,在数学中,如果要计算以三点A(1,2) B(3,4) C(5,6)为特征的三角形的面积,则公式为:

|Ax  Bx| |Bx Cx| |Cx Ax|                   
|Ay  By| |By Cy| |Cy Ay|

在这种情况下:

|1  3|  |3  5|  |5  1|
|2  4|  |4  6|  |6  2|

1x4-2x3+3x6-4x5+5x2-1x6 = 4-6+18-20+10-6 = 0

如何在序言中使用list的递归来做到这一点?

?- calculateAreaTri( [[1,2],[3,4],[5,6]], A).

谢谢(我更喜欢递归谓词)。

1 个答案:

答案 0 :(得分:0)

如评论中所述,这三个点不生成三角形(它们对齐)。无论如何,您可以使用该谓词(故意简单并用语法糖填充)来计算面积:

calculateAreaRectangle([[1,2],[3,4],[5,6]],A):-
    compute([[1,2],[3,4],[5,6],[1,2]],0,A).

compute([[_,_]],S,S).
compute([[A,B],[C,D]|T],S,TO):-
    write(A),write('*'),write(D),write('-'),write(B),write('*'),write(C),write('='),
    S1 is ((A*D) - (B*C)),
    writeln(S1),
    ST is S1 + S,
    compute([[C,D]|T],ST,TO).

?- calculateAreaRectangle(L,A).
1*4-2*3=-2
3*6-4*5=-2
5*2-6*1=4
A = 0,
L = [[1, 2], [3, 4], [5, 6]]