在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
和;
的集合?
我不知道如何找到答案,因为我无法将此问题转化为产生搜索结果的问题
答案 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).