写一个Prolog规则来计算每个城市的海拔高度(米)。请注意,以米为单位的高度可以计算为0.3048 *以英尺为单位的高度。
即定义新的predicate:city_altitude_in_meters(城市、州、英尺、米):
我已经尝试过以下几种方法:
f_to_m(F_altitude,M_altitude):-
M_altitude is (F_altitude)*0.3048.
city_altitude_in_meters(city, state,F_altitude, M_altitude):-
(M_altitude is(F_altitude)*0.3048).
city_altitude(tempe, az, 1318).
city_altitude(atlanta, ga, 894).
city_altitude(chicago, il, 583).
city_altitude(denver, co, 5280).
city_altitude(seattle, wa, 260).
city_altitude(boise, id, 2704).
city_altitude(saltlakecity, ut, 4226).我期望(tempe,az,1318,401.726)的输出。
发布于 2019-09-12 20:49:38
f_to_m/2谓词在向前和向后工作时是最好的,所以让我们从Prolog谓词开始,去掉它中任何方向的概念:
feet_meters(Feet, Meters) :-
nonvar(Feet), !, % Cut so second rule isn't used if nonvar(Feet)
Meters is Feet*0.3048.
feet_meters(Feet, Meters) :-
nonvar(Meters),
Feet is round(Meters/0.3048). % rounded because computers and floating point arithmetic headaches, plus all your altitudes in feet are integers.现在您可以在英尺和米之间进行双向转换。我们正在检查哪些输入是变量,以确保我们使用了正确的规则,如果两个输入都是变量,我们就会失败。
然后,您只需将此转换谓词应用于城市:
city_altitude_in_meters(City, State, Feet, Meters):-
city_altitude(City, State, Feet), % for when City or State are variables
feet_meters(Feet, Meters).通过这种方式,您甚至可以查询:
?- city_altitude_in_meters(City, State, Feet, 79.248).在编写Prolog时,考虑在两个方向上运行它,并使用所有变量组合,包括上面示例中的最坏情况查询,这总是一个好主意。
https://stackoverflow.com/questions/57877292
复制相似问题