为了账号安全,请及时绑定邮箱和手机立即绑定

最一般的高阶约束,描述相对于关系有序的整数序列。

最一般的高阶约束,描述相对于关系有序的整数序列。

ABOUTYOU 2019-06-21 16:26:11
最一般的高阶约束,描述相对于关系有序的整数序列。在CLP(FD)中,我们经常需要声明:“这是整数和有限域变量的列表(有时:严格)上升/降序。“是否有任何CLP(FD)系统为此任务提供一个通用(可参数化)内置约束?Swi-prolog提供了一个名为chain/2,这和我要找的东西很相似。但是,名称过于具体,不能包含约束可以描述的所有关系(例如:#<不是偏序,但在chain/2,导致序列-作为一组整数-不再像数学秩序理论中定义的链那样计算)。因此,名称并不完全描述约束实际实现的内容。请给最一般定义通常的二进制CLP(FD)约束-或至少包含以下内容的适当子集#<, #>, #=<和#>= — 包括根据约束定义的代数结构指定的专有名称。施加的条件是,约束描述实际数学结构,在文献中有正确名称的数学结构。首先,考虑使用SICStus Prolog或SWI::- use_module(library(clpfd)). connex(Relation_2, List) :-     connex_relation(Relation_2),     connex_(List, Relation_2). connex_relation(#=). connex_relation(#<). connex_relation(#=<). connex_relation(#>). connex_relation(#>=). connex_([], _). connex_([L|Ls], Relation_2) :-     foldl(adjacent(Relation_2), Ls, L, _). adjacent(Relation_2, X, Prev, X) :- call(Relation_2, Prev, X).抽样案例:?- connex(#<, [A,B,C]). A#=<B+-1, B#=<C+-1. ?- connex(#=, [A,B,C]). A = B, B = C, C in inf..sup. ?- maplist(connex(#<), [[A,B],[C,D]]). A#=<B+-1, C#=<D+-1.请注意,允许#\=,因为这种关系仍然描述在数学秩序理论中所知的康奈。因此,对于通常的二进制CLP(FD)约束,上面的代码并不是最通用的。
查看完整描述

3 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

胡格尔不是很有用,但是是的!

foldcmpl

这是一种特殊的折叠形式,但不适用。length list一次少一次。

isSortedBy

它的名字并不是完全通用的,而是在它的签名上。也许坚持使用最普通的名字也没什么用。否则我们就到处都是实体?

定义如下:

isSortedBy函数返回True当且仅当谓词返回列表中所有相邻元素对的true。

也许:all_adjacent_pairs(R_2, Xs)..,这听起来有点像循环构造adjacent_pair作为某种改性剂。


查看完整回答
反对 回复 2019-06-21
?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

mapadj/4在先前的回答中.。也许这个名字更好。

forallAdj(P_2,Xs) :-
   list_forallAdj(Xs,P_2).

list_forallAdj([],_).
list_forallAdj([X|Xs],P_2) :-
   list_forallAdj_prev(Xs,P_2,X).

list_forallAdj_prev([],_,_).
list_forallAdj_prev([X1|Xs],P_2,X0) :-
   call(P_2,X0,X1),
   list_forallAdj_prev(Xs,P_2,X1).

样本使用:

:- use_module(library(clpfd)).
:- use_module(library(lambda)).

?- Ls = [0,_,_,_,_,_], forallAdj(\X0^X1^(X0 + 1 #= X1), Ls).
Ls = [0, 1, 2, 3, 4, 5].

那能带我们去哪?

  • forallAdj => existAdj

  • 可能有索引的变体(

    forallAdjIexistAdjI

    )像.

    List模块(F#)

  • findfirstAdj/pickfirstAdj

    也像F#

    find/pick


查看完整回答
反对 回复 2019-06-21
  • 3 回答
  • 0 关注
  • 660 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信