List 序言列表拆分
我有以下职能:List 序言列表拆分,list,prolog,visual-prolog,List,Prolog,Visual Prolog,我有以下职能: onlySecond([],[]). onlySecond([H1,H2|T1],[H2|T2]) :- onlySecond(T1,T2). 它返回列表中的每一个元素 但我很好奇,当第一个参数是包含1个元素的列表时,为什么它不返回任何内容(在我看来,它必须返回[]-空列表)。例如: onlySecond([1],X). - not return anything.. but why it doesn't return []?? 您的程序有一个更大的问题:对于任何奇数大小的
onlySecond([],[]).
onlySecond([H1,H2|T1],[H2|T2]) :- onlySecond(T1,T2).
它返回列表中的每一个元素
但我很好奇,当第一个参数是包含1个元素的列表时,为什么它不返回任何内容(在我看来,它必须返回[]-空列表)。例如:
onlySecond([1],X). - not return anything.. but why it doesn't return []??
您的程序有一个更大的问题:对于任何奇数大小的列表,它都返回
false
。其原因是,onlySecond/2
中没有一个子句可以与一个只有一个项的列表相统一——当您从一个具有奇数个项的列表开始时,您必须达到这个条件,因为每次递归调用都会将原始列表的长度减少两倍:
- 它与第一个子句不统一,因为
不是空列表[1]
- 它与第二个子句不统一,因为
的项少于两项[1]
onlySecond([_], []).
添加此子句可以使代码也适用于奇数长度的列表