0

问题 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

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

4

1 回答 1

3

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

Q1:不清楚为什么要断言/撤回子句,CapelliC 指向 findall 的指针肯定是您需要的。

Q2:重新启动你的序言解释器清除你断言的事实。如果您想在会话中执行此操作,retractall/1可能会派上用场(否则您需要分别撤回每个事实)。

于 2013-09-01T20:07:55.340 回答