例如,在数学中,如果要计算以三点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).
谢谢(我更喜欢递归谓词)。
答案 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]]