如何在Prolog中用从1到N的N个元素填充列表来接受重复?

时间:2019-03-15 12:57:38

标签: prolog

我想创建一个谓词 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的值

1 个答案:

答案 0 :(得分:3)

fill_list(N, L) :- length(L, N), maplist(between(1,N), L).

这里的想法是列出指定长度的列表,然后指定所有成员都在1-N的期望范围内。我认为这很好地说明了Prolog与问题说明的匹配程度。