如果事实的单个参数与规则匹配,则返回true

时间:2017-03-24 21:12:04

标签: prolog

我收到以下错误:

Singleton Variables: [Month]
运行我的文件后,在SWI-Prolog中

我的格式为:

weather(Month, Day, Word1, Word2, Word3).

我有以下规则:

% Summer: True if Month is jun, jul, or aug
summer(Month) :-
    weather(jun, _, _, _, _);
    weather(jul, _, _, _, _);
    weather(aug, _, _, _, _).

我是初学者,不知道为什么我会收到错误。 提前谢谢!

1 个答案:

答案 0 :(得分:0)

在Prolog标识符中,以大写字母开头的标识符用作变量,因此在您的示例中,Month是一个变量,它在summer / 1谓词中从未被实例化(在谓词中从不使用),这就是为什么它会给您一个警告Singleton Variable的(不是错误)。

为了修复它,您可以编写一些实例化变量Month,如:

@Component
@Transactional (propagation = Propagation.REQUIRES_NEW) 
public class OperationsProcessor
{
...............

    public void createOperation(OperationsMessage message)
    {
            try
            {
                .............
                .............
                //this call throws exception.
                opsRepo.create(operation,null);
            }
            catch (Exception e)
            {
                logger.error(e);
            }

    }
}

在上面的summer / 1定义中,因为你写了所有的案例,你可以看到没有必要使用事实summer(Month) :- weather(jun, _, _, _, _),Month = jun; weather(jul, _, _, _, _),Month = jul; weather(aug, _, _, _, _),Month = aug. ,因为你可能宁愿写:

weather(Month, Day, Word1, Word2, Word3).

或者@false建议你可以添加表格的事实:

summer(Month) :-
        Month = jun;
        Month = jul;
        Month = aug.