相关疑难解决方法(0)

将列表分成两半

我需要定义除法,以便List [1,2,3,4,5]分为:

a = [1,2,3}

b = [4,5]
Run Code Online (Sandbox Code Playgroud)

我收到的错误是"Arguments are not sufficiently instantiated",我对语言知之甚少,无法弄清楚我的问题是什么,或者我的设计是否正确.任何指导将不胜感激.

所以这就是我到目前为止所拥有的:

append([],L2,L2).
append([H|T],L2,[H|L3]) :- append(T,L2,L3).

lengthIs([],N).
lengthIs([H|T],N) :- lengthIs(T,M), N is M+1.

divide([],[],[]).
divide([H|T],L2,L3) :-
   (  lengthIs(L2, M) < lengthIs(L1,N)/2
   -> divide(T, append(L2, H, X), L3)
   ;  divide(T, L2, append(L3,H,Y))
   ).
Run Code Online (Sandbox Code Playgroud)

list prolog

8
推荐指数
2
解决办法
889
查看次数

列表与任何内容([_])和任何内容(_)之间有什么区别

我试图完成以下操作,如果我有两个列表,L1和L2,我希望结果(R)是来自L1的L2的"减法".

例:

L1 = [1,2,3]
L2 = [2,3,4,5]

R = [1]
Run Code Online (Sandbox Code Playgroud)

我能够做到这一点,但我不知道_和之间有什么区别[_].

如果我这样做:

diferencia([],_,[]).
diferencia([X|Tail],L2,R):-
    member(X,L2),
    diferencia(Tail,L2,R).
diferencia([X|Tail],L2,[X|R]):-
    not(member(X,L2)),
    diferencia(Tail,L2,R).
Run Code Online (Sandbox Code Playgroud)

它有效,如果我这样做,它会给我错误:

diferencia([],[_],[]).
diferencia([X|Tail],L2,R):-
    member(X,L2),
    diferencia(Tail,L2,R).
diferencia([X|Tail],L2,[X|R]):-
    not(member(X,L2)),
    diferencia(Tail,L2,R).
Run Code Online (Sandbox Code Playgroud)

我会假设一个包含任何内容的列表[_]应该可以工作,因为L2将始终是一个列表.

list prolog

6
推荐指数
1
解决办法
500
查看次数

标签 统计

list ×2

prolog ×2