假设我的事实定义如下,
airport(atl, 'Atlanta ', degmin(33,39 ), degmin(84,25 ) ).
我希望将degmin
转换为弧度。这是我的尝试:
toRadians(Source, LatRad, LongRad) :-
airport(Source, _, degmin(X_1, Y_1 ), degmin(X_2, Y_2)),
radians(X_1,Y_1,res),
radians(X_2,Y_2,res2),
LatRad is res, LongRad is res2.
radians(Deg,Min,res) :- res is (Deg + Min/60).
然而,当我运行它时,我得到了这个。
?- toRadians(atl,Lat,Long).
false.
我期待像
这样的东西 ?- toRadians(atl,Lat,Long).
Lat = some number
Long = some number
True.
出了什么问题?
答案 0 :(得分:1)
这是你的程序更正:
airport(atl, 'Atlanta ', degmin(33,39 ), degmin(84,25 ) ).
toRadians(Source, LatRad, LongRad) :-
airport(Source, _, degmin(X_1, Y_1 ), degmin(X_2, Y_2)),
radians(X_1,Y_1,Res),
radians(X_2,Y_2,Res2),
LatRad is Res, LongRad is Res2.
radians(Deg,Min,Res) :- Res is (Deg + Min/60).
?-toRadians(atl,Lat,Long).
Lat = 33.65,
Long = 84.41666666666667
(我不知道这是否是您想要获得的价值)。无论如何,问题来自这样一个事实,例如,你用大写字母R写了res
而不是Res
。这很重要,因为在prolog变量中必须用一个大写字母作为第一个字母,请阅读this。