本文介绍了序言和清单统一的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时删除!!

我正在努力加深我对Prolog的理解,以及它如何处理统一性.在这种情况下,它如何处理与列表的统一.

I'm trying to further my understanding of Prolog, and how it handles unification. In this case, how it handles unification with lists.

这是我的知识库;

member(X, [X|_]).
member(X, [_|T]):- member(X, T).

如果我正确地理解了该过程.如果member(X, [X|_])不是true,则进入递归规则,如果X在列表T中,则[_|T]T统一.

If I'm understanding the process correctly. If member(X, [X|_]) is not true, then it moves into the recursive rule, and if X is in list T, then [_|T] is unified with T.

那么我的递归谓词中的匿名变量会怎样?它会被丢弃吗?我很难理解列表的确切统一过程,因为[_|T]是两个变量,而不是一个.我只是想弄清楚统一过程如何与列表一起精确地工作.

So what happens to the anonymous variable in my recursive predicate? Does it get discarded? I'm having difficulty understanding the exact unification process with lists, as [_|T] is two variables, rather than one. I'm just trying to figure out how the unification process works precisely with lists.

推荐答案

假定_Y

member(X, [Y|T]):- member(X, T).

这就是True,而不管Y.现在,您正在返回" member(X, T).换句话说,您将丢弃Y并返回" member(X, T).

Then this is True regardless Y. Now you are "returning" member(X, T). In other words, you are discarding Y and "returning" member(X, T).

_意味着,无论它是什么,都将忽略该变量.

_ means, whatever it is, ignore that variable.

在这种情况下,您的函数将检查列表中是否存在给定元素,因此,获取列表中的第一个元素,检查是否相等,如果不相等,则丢弃该元素并继续前进.

In your case, your function check if a given element exists on a list, so, you take first element of the list, check if is equal, if not, you discard that element and moves on.

这篇关于序言和清单统一的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

1403页,肝出来的..

09-09 01:11