Recursion Prolog递归谓词

Recursion Prolog递归谓词,recursion,prolog,predicates,Recursion,Prolog,Predicates,在Prolog中给出递归定义: 定义一个谓词,当且仅当X 是一个列表,X的长度是奇数 多年来我一直在努力解决这个问题。我只是想为自己学习ProLog,并在一本书中发现了这个问题 我尝试过这个方法,但它可能只适用于长度相等的列表 mult2_length( [] ). mult2_length( [ _, _ | Xs ] ) :- mult2_length( Xs ). 有人能帮我吗?你必须有这样的谓词: list([]) :- fail. list([_]). list([_,_|T])

在Prolog中给出递归定义: 定义一个谓词,当且仅当X 是一个列表,X的长度是奇数

多年来我一直在努力解决这个问题。我只是想为自己学习ProLog,并在一本书中发现了这个问题

我尝试过这个方法,但它可能只适用于长度相等的列表

mult2_length( [] ).
mult2_length( [ _, _ | Xs ] ) :-
  mult2_length( Xs ).

有人能帮我吗?

你必须有这样的谓词:

list([]) :- fail.
list([_]).
list([_,_|T]) :- list(T).

您只需不断从列表中删除2个元素,直到有0或1个元素。

您可以发布一些您尝试过但无效的内容吗?如果您这样做,您将更快地获得更多帮助。@Nick我已对其进行了编辑,以显示我所做的事情子句列表[]:-失败。可以删除。由于没有其他子句与空列表匹配,调用列表[]无论如何都会失败。@IsabelleNewbie当然,但是我发现我的代码对于新的prolog用户来说更容易理解,这就是为什么我一行接一行地写代码的原因:这就是我猜测的。我认为,对于初学者来说,重要的是要知道,任何没有明确定义成功的东西都会失败,但你可能会有不同的看法。