Prolog 成员[H|T]是什么意思?

Prolog 成员[H|T]是什么意思?,prolog,Prolog,我正在学习序言,无意中发现了以下问题: 这个问题包括以下几行:=(成员(X[H|T]),成员[Z|Q]) 我知道,但我不理解成员[Z | Q]部分。这是什么意思?还有一个结论是不是太多了?总结: 别担心这个 以下是几个原因: 语法错误 首先,这是无效的语法。当您查阅链接到的程序时,您会得到: ERROR: file.pl:5:28: Syntax error: Operator expected 从这一点来看,很明显,这个不可能成功,因为(=)/2甚至不适用于更一般的情况 member(_,_)

我正在学习序言,无意中发现了以下问题:

这个问题包括以下几行:
=(成员(X[H|T]),成员[Z|Q])

我知道,但我不理解
成员[Z | Q]
部分。这是什么意思?还有一个结论是不是太多了?

总结:

别担心这个

以下是几个原因:

语法错误 首先,这是无效的语法。当您查阅链接到的程序时,您会得到:

ERROR: file.pl:5:28: Syntax error: Operator expected 从这一点来看,很明显,这个不可能成功,因为
(=)/2
甚至不适用于更一般的情况

member(_,_) = member_whatever, 您可以使用此谓词生成此关系所包含的列表,测试它是否适用于特定实例,完成部分列表,以使它们满足此谓词etc

所有这些都来自于对使此relationhold保持的条件的明确声明性描述

在Prolog课程中,有一种不必要地将声明式编程这一相当简单的基本原理复杂化的趋势。不要落入这个陷阱。如果您的谓词变得复杂,您通常会忽略一些更简单的内容。

摘要:

别担心这个

以下是几个原因:

语法错误 首先,这是无效的语法。当您查阅链接到的程序时,您会得到:

ERROR: file.pl:5:28: Syntax error: Operator expected 从这一点来看,很明显,这个不可能成功,因为
(=)/2
甚至不适用于更一般的情况

member(_,_) = member_whatever, 您可以使用此谓词生成此关系所包含的列表,测试它是否适用于特定实例,完成部分列表,以使它们满足此谓词etc

所有这些都来自于对使此relationhold保持的条件的明确声明性描述


在Prolog课程中,有一种不必要地将声明式编程这一相当简单的基本原理复杂化的趋势。不要落入这个陷阱。如果您的谓词变得复杂,您的谓词通常会忽略一些更简单的内容。

哇,感谢您对语法错误的详细解释!仍然学到了一些新的东西(你可以使用这个谓词来生成这个关系所包含的列表)是的,这是逻辑编程的主要吸引力之一:从一个纯粹的声明性描述,你可以生成满足这个关系的案例。这对于编写测试用例和简单地研究谓词是很好的:如果您想了解谓词的含义,请尝试最一般的查询(其中所有参数都是变量),然后向Prolog询问任何答案!这对于了解更多关于谓词的信息非常方便,在实践中也非常有用,因为它使您的代码非常通用和紧凑。哇,感谢您对语法错误的详细解释!仍然学到了一些新的东西(你可以使用这个谓词来生成这个关系所包含的列表)是的,这是逻辑编程的主要吸引力之一:从一个纯粹的声明性描述,你可以生成满足这个关系的案例。这对于编写测试用例和简单地研究谓词是很好的:如果您想了解谓词的含义,请尝试最一般的查询(其中所有参数都是变量),然后向Prolog询问任何答案!这对于了解更多谓词非常方便,而且在实践中也非常有用,因为它使您的代码非常通用和紧凑。 member(_,_) = member_whatever, element_in_both(E, As, Bs) :- member(E, As), member(E, Bs). ?- length(Cs, _), append(As, Bs, Cs), element_in_both(E, As, Bs). Cs = [E, E], As = Bs, Bs = [E] ; Cs = [E, E, _2946], As = [E], Bs = [E, _2946] ; Cs = [E, _2940, E], As = [E], Bs = [_2940, E] .