矩阵的Prolog行列式(递归)

矩阵的Prolog行列式(递归),prolog,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 如何在prolog中使用列表的递归来实现这一点 ?- calcul

例如,在数学中,如果要计算以三点
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

如何在prolog中使用列表的递归来实现这一点

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

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

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


点(1,2),(3,4),(5,6)是一条线而不是三角形。到目前为止,你尝试了什么?这个问题与用递归计算矩阵的行列式有什么关系?考虑使用而不是写/ 1为什么在令牌之后写令牌而不是一个算术表达式,比如“代码> A*D B*C= S1< /代码>?
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]]