小编Dra*_*ver的帖子

Prolog实施Mergersort不会停止

我是一个新的Prolog开发人员,我试图让合并排序工作.查询

mergesort([2,1],T).
Run Code Online (Sandbox Code Playgroud)

会生产

T=[1,2];
T=[1,2];
T=[1,2];
...
Run Code Online (Sandbox Code Playgroud)

因此,虽然它似乎"正确"地对序列进行排序但它不会停止

另一方面,如果我有一个查询,如

mergesort([2,1],[2,1])
Run Code Online (Sandbox Code Playgroud)

它进入了一个无限循环.我想知道为什么会这样?

append([H|T],LISTB,[H|LISTC]):-
    append(T,LISTB,LISTC).

split(LIST,L1,L2):-
    length(LIST,LENGTH),
    M is div(LENGTH,2),
    append(L1,L2,LIST),
    length(L1,L1LENGTH),
    (L1LENGTH =:= M).

merge(A,[],A).
merge([],B,B).
merge([A|TA],[B|TB],[A|MERGED]) :-
    A =< B,
    merge(TA,[B|TB],MERGED).
merge([A|TA],[B|TB],[B|MERGED]) :-
    B < A,
    merge([A|TA],TB,MERGED).

mergesort([],[]).
mergesort([X],[X]).
mergesort(LIST,OLIST):-
    split(LIST,L1,L2),
    mergesort(L1,OLIST1),
    mergesort(L2,OLIST2),
    merge(OLIST1,OLIST2,OLIST).
Run Code Online (Sandbox Code Playgroud)

mergesort prolog infinite-loop failure-slice

2
推荐指数
1
解决办法
98
查看次数

使用reselect库并为商店中的每个商品创建选择器是否值得,即使我所做的只是从商店中访问商品

我的商店看起来像这样

{
  itemA: {val1, val2, val3},
  itemB: {val1, val2, val3},
  ....
}
Run Code Online (Sandbox Code Playgroud)

在我的选择器文件中,我有这样的东西

const getItemAobject(state) => return state.itemA;
const getItemBobject(state) => return state.itemB;
Run Code Online (Sandbox Code Playgroud)

....

const selectItemA = createSelector([getItemAobject], (itemAobject) => itemAobject);
const selectItemB = createSelector([getItemBobject], (itemBobject) => itemBobject);
Run Code Online (Sandbox Code Playgroud)

终于在mapStateToProps我有

mapStateToProps(){
 {
  itemA: selectItemA(state)
  itemB: selectItemB(state)
 }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我的选择器没有做任何花哨的事情,我应该使用重新选择吗?我可以轻松地做到这一点

mapStateToProps(){
 {
   itemA: state.itemA
   itemB: state.itemB
 }
}
Run Code Online (Sandbox Code Playgroud)

如果有选择器,使用选择器有什么好处?

reactjs redux reselect

0
推荐指数
1
解决办法
282
查看次数