为什么具有不同元素的事实之间的setof输出存在差异?

时间:2016-10-12 17:09:02

标签: prolog prolog-setof

在Prolog中,给出了事实的知识基础:

someFact(one).
someFact(two).
otherFact(one, two, 123, 456).
otherFact(one, four, 789, 123).

查询setof(X, someFact(X), List).会产生以下结果:

List = [one, two]

然而,查询setof(X, otherFact(one, X,_,_), List产生了这个:

List = [two]

虽然我预计它会产生[two,four]。使用this来源我发现在返回第一个列表时输入;将显示所有其他选项:

List = [two] ;
List = [four] .

为什么这样做?是因为下划线吗?如何在不按two的情况下生成同时提供four;的集合? 我不知道如何找到答案,因为我无法将此问题转化为产生搜索结果的问题

2 个答案:

答案 0 :(得分:3)

你可以写: var yql = encodeURIComponent('select * from weather.forecast where woeid = "' + woeid + '"and u="c"'); $$.ajax({ //dataType: "json", // contentType: 'application/json; charset=utf-8', dataType: 'text', url: 'https://query.yahooapis.com/v1/public/yql?q=' + yql + '&format=json', timeout: 5000, //Sucesso success: function(data){ var resultados = data.query.results.channel; var graus = resultados.item.condition.temp; var cod_condicao = resultados.item.condition.code; var nascer = resultados.astronomy.sunrise; var poente = resultados.astronomy.sunset; var umidade = resultados.atmosphere.humidity + '%'; var vento = resultados.wind.speed + 'KM/H' var forecast = resultados.item.forecast; }

查询:

setof(X, B^A^otherFact(one, X,A,B), List)

那是因为即使你放置了' _'在?- setof(X, B^A^otherFact(one, X,A,B), List). List = [four, two]. 中, setof / 3 旨在搜索所有自由变量。通过将setof(X, B^A^otherFact(one, X,_,_)置于前面,您可以选择不绑定A或B并仅搜索其他变量。

答案 1 :(得分:2)

除了@coder的答案,您可以使用library(lambda)

撰写
?- setof(X, X+\otherFact(one,X,_,_), List).