Prolog:如何将2个谓词组合成1个列表

时间:2013-09-01 13:48:06

标签: list prolog

问题1

如何将weatherInfo(X,Y)airDensity(X,Y)合并,使其成为1个列表。如果可能,我希望它是这样的。

     :- dynamic analize/3

        outlook(Sunny).
        outlook(Overcast).
        outlook(Rain).

        temperature(Hot).
        temperature(Mild).
        temperature(Cool).

        humidity(Normal).
        humidity(High).

        windy(True).
        windy(False).

        weatherInfo(Sunny,Mild).
        weatherInfo(Sunny,Cool).
        weatherInfo(Overcast,Hot).                                           
        weatherInfo(Overcast,Mild).                                        
        weatherInfo(Overcast,Cool).
        weatherInfo(Rain,Mild).
        weatherInfo(Rain,Cool).

        airDensity(Normal,False).
        airDensity(Normal,True).
        airDensity(High,False).
        airDensity(High,True).

        prediction(Result):-
            analize([],[], _).
            analize([H1|T1], [H2,T2], Result), 
            append(T1, [H2,T2], Result),
            assertz([H1|T1], _, [H2,T2]),
            Result =.. [[H1|T1], [H2,T2]),
            write(L1, L2),
            analize(NewT, NewL, Result).

问题2

我需要删除旧数据,但我不知道我应该去哪里做。是在追加之后还是在追加之前?

1 个答案:

答案 0 :(得分:3)

一般性评论:Sunny是一个变量,因此outlook(Sunny).断言Sunny的任何值都是可以接受的。要获得有意义的信息,您需要outlook(sunny).

Q1:目前尚不清楚,为什么你要断言/收回条款,CapelliC指向findall的指针肯定是你需要的。

Q2:重新启动prolog解释器会清除您声明的事实。如果你想在一个会话中这样做,retractall/1可能派上用场(否则你需要单独收回每个事实)。