我想创建一个谓词 fill_list / 2 ,以填充从1到N的数字的列表,例如,如果我的查询是
// config/security.js
module.exports.security = {
csrf: true,
};
// config/routes.js
'GET /csrfToken': 'SomeController.grantCsrfToken',
// api/controllers/SomeController.js
module.exports = {
grantCsrfToken: function (req, res /*, next */) {
// Don't grant CSRF tokens over sockets.
if (req.isSocket) {
if (process.env.NODE_ENV === 'production') {
return res.notFound();
}
return res.badRequest(new Error('Cannot access CSRF token via socket request. Instead, send an HTTP request (i.e. XHR) to this endpoint.'));
}
// Send the CSRF token wrapped in an object.
return res.json({
_csrf: res.locals._csrf
});
},
}
// assets/js/some_filename.js
function send_some_post_request(extra_params) {
$.get("/csrfToken", function (data, jwres) {
if (jwres != 'success') { return false; }
msg = {
extra_params: extra_params,
_csrf: data._csrf
};
$.post("doStuff", msg, function(data, status){
});
});
}
其中N为3,X为列表,我希望X像这些示例一样:
fill_list(3,X).
没有约束,只是数字是从1到N的值
答案 0 :(得分:3)
fill_list(N, L) :- length(L, N), maplist(between(1,N), L).
这里的想法是列出指定长度的列表,然后指定所有成员都在1-N的期望范围内。我认为这很好地说明了Prolog与问题说明的匹配程度。