矩阵的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]]