我正在尝试使用自己的谓词创建列表成员(member/2)。
开始这个例子
?-app([a,r,t],[t,s,m,n,a],L3).
L3=[a,t]
我试图做类似的练习,所以我用序言做了这个:
app([],_,[]).
app([H|T],[H1,T1],[H|L1]):- H is H1, L1 is H,! ,app(T,T1,L1).
app([_H|T],L,L2):- app(T,L,L2).
和所有正常工作,但列表中的值在执行期间将被覆盖,实际上,跟踪为:
trace, app([3,2],[3,5],X).
Call: (9) app([3, 2], [3, 5], _7426) ? creep
Call: (10) 3 is 3 ? creep
Exit: (10) 3 is 3 ? creep
Call: (10) _7736 is 3 ? creep
Exit: (10) 3 is 3 ? creep
Call: (10) app([2], 5, 3) ? creep
Call: (11) app([], 5, 3) ? creep
Fail: (11) app([], 5, 3) ? creep
Fail: (10) app([2], 5, 3) ? creep
Fail: (9) app([3, 2], [3, 5], _7426) ? creep
false.
我试图通过这种方式对基本情况进行修改:
app([],_,_N).
但是输出都是错误的:
trace, app([3,2],[3,5],X).
Call: (9) app([3, 2], [3, 5], _7426) ? creep
Call: (10) 3 is 3 ? creep
Exit: (10) 3 is 3 ? creep
Call: (10) _7736 is 3 ? creep
Exit: (10) 3 is 3 ? creep
Call: (10) app([2], 5, 3) ? creep
Call: (11) app([], 5, 3) ? creep
Exit: (11) app([], 5, 3) ? creep
Exit: (10) app([2], 5, 3) ? creep
Exit: (9) app([3, 2], [3, 5], [3|3]) ? creep
X = [3|3].
我错了吗?
答案 0 :(得分:1)
我认为您正在尝试创建一个this.$ionic.modalController.create({ component: NewAppointmentModal}).then(m => m.present())
//how can i catch the onSuccess event like before
谓词:
sublist/2
还有更多方法可以做到这一点,但是我认为%! sublist(Sub, List)
% is true if Sub is a list that occurs in
% some position in List
sublist(Sub, List) :-
% first partition off some tail of the list
append(_Prefix, Tail, List),
% then get some prefix of the tail, this is a sublist
append(Sub, _TailTail, Tail).
很容易
了解。这是与append/3
不同的问题,member/2
是在列表中查找元素,这里的问题是将列表分成几块,因此实现方式与member/2
完全不同。您通常会在Prolog中发现解决方案的第一步是很好地定义问题。祝您在Prolog学习中好运。