Prolog 递归谓词

Prolog Recursive Predicates

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

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

我试过了,但它可能只适用于偶数长度的列表。

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

谁能帮帮我?

你必须有像这样的谓词:

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

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