Tree Prolog列表元素级相似性比较

Tree Prolog列表元素级相似性比较,tree,prolog,trie,Tree,Prolog,Trie,我偶然发现了这个 问题是要找出两个列表的数字之间有多少个相等的结束数字。给出的答案似乎是非常有效的,使用树来实现类似于trie的东西。然而,在玩弄它时,我发现它的行为与我预期的稍有不同:当第二个列表中有多个“单词”与第一个列表中的单词“相似”时,该单词只返回一次,并且只返回其中一个匹配单词的匹配位数。对每一场比赛都返回一个答案不是更正确吗 我试着去想如何做到这一点,但我想不出什么好的办法(我有点像prolog的初学者…) 为了方便起见,我发布了gusbro的代码: 例如: same_ending

我偶然发现了这个

问题是要找出两个列表的数字之间有多少个相等的结束数字。给出的答案似乎是非常有效的,使用树来实现类似于trie的东西。然而,在玩弄它时,我发现它的行为与我预期的稍有不同:当第二个列表中有多个“单词”与第一个列表中的单词“相似”时,该单词只返回一次,并且只返回其中一个匹配单词的匹配位数。对每一场比赛都返回一个答案不是更正确吗

我试着去想如何做到这一点,但我想不出什么好的办法(我有点像prolog的初学者…)

为了方便起见,我发布了gusbro的代码:

例如:

same_endings([123,223,333],[423,433],Endings).
Endings = [423-2, 433-2].
我更希望一个更符合逻辑的答案是

Endings = [423-2, 423-2, 423-1, 433-1, 433-1, 433-2].

代码似乎是作为起点提供的。我在答案的底部读到,“您可以稍微修改一下这个代码,以获得具有相同结尾的实际项目。”您是如何做到的?你试了什么?你被什么卡住了?为了继续,您在代码中不理解的是什么?我尝试使用prolog的length函数,因为编写的树类似于[1-[2-[3,4]],所以如果我们找到2的子树的长度,我们就会知道有多少个数字以1,2,3结尾。然而,我不能将此应用于整个问题。似乎代码是作为起点提供的。我在答案的底部读到,“您可以稍微修改一下这个代码,以获得具有相同结尾的实际项目。”您是如何做到的?你试了什么?你被什么卡住了?为了继续,您在代码中不理解的是什么?我尝试使用prolog的length函数,因为编写的树类似于[1-[2-[3,4]],所以如果我们找到2的子树的长度,我们就会知道有多少个数字以1,2,3结尾。然而,我不能将此应用于整个问题。
Endings = [423-2, 423-2, 423-1, 433-1, 433-1, 433-2].