Recursion 如何在prolog中递归单个列表?

Recursion 如何在prolog中递归单个列表?,recursion,prolog,Recursion,Prolog,我正在阅读一篇教程,我发现很难理解如何递归单个列表。有人能给我一个快速的解释,基本情况必须是什么,为什么,以及在递归中做什么。我的代码是: type(string). type(int). instance(X,Y):- X, Y. variable(_). statement([]). statement(A|B):- A, statement(B). 该代码的目的是创建一个轻型类型检查器来检查以下内容: String s; int i; i = s.length(); 我通过这

我正在阅读一篇教程,我发现很难理解如何递归单个列表。有人能给我一个快速的解释,基本情况必须是什么,为什么,以及在递归中做什么。我的代码是:

type(string).

type(int).

instance(X,Y):- X, Y.

variable(_).

statement([]).

statement(A|B):- A, statement(B).
该代码的目的是创建一个轻型类型检查器来检查以下内容:

String s; int i; i = s.length();
我通过这个测试:

statement([instance(type(string), variable(s))]).

我决定把它放在一个列表中并递归,然后把它放在if后面。如果它符合其中一条规则,它就是真的。目前,我只是想确保类型实例化能够正常工作。欢迎任何帮助!提前感谢。

您缺少一对方括号

statement(A|B)
应该是

statement([A|B])

递归规则的其余部分看起来不错。

中缺少一对方括号

statement(A|B)
应该是

statement([A|B])

递归规则的其余部分看起来不错。

基本情况应该是列表与
[]
统一。至于“在递归中执行”,你真的可以在Prolog中选择吗?我的意思是,我在使用swiprolog,他肯定希望我们使用它。但是如何将列表与[]统一?您编写了一个与头尾
规则([H | T]):-…
统一的规则,以及另一个与空列表
规则([]):-…
统一的规则。我这样做了,但它给了我一个错误。我要发布我的代码。请告诉我如何更正。您在
语句(a | B)
中缺少一对方括号:它应该是
语句([a | B])
。在规则中单独使用
A
也没有意义。基本情况应该是列表与
[]
统一。至于“在递归中执行”,你真的可以在Prolog中选择吗?我的意思是,我在使用swiprolog,他肯定希望我们使用它。但是如何将列表与[]统一?您编写了一个与头尾
规则([H | T]):-…
统一的规则,以及另一个与空列表
规则([]):-…
统一的规则。我这样做了,但它给了我一个错误。我要发布我的代码。请告诉我如何更正。您在
语句(a | B)
中缺少一对方括号:它应该是
语句([a | B])
。在规则中单独使用
A
也是没有意义的。语句([])到底是什么意思。实际上是什么意思?他们是怎么统一的?这是否等同于说[]=[]?语句([])到底是什么意思。实际上是什么意思?他们是怎么统一的?这是否等同于说[]=[]?