我有一个成对的列表(代表矩阵中的某些位置),我喜欢过滤列表以仅包含原始i上的位置。 这是我写的:

getRaw(_,[],[]).
getRaw(i,[(i,j)|LocationsTail],[(i,j)|result]) :-   
    getRaw(i,LocationsTail,result).
getRaw(i,[(k,t)|LocationsTail],result) :-
    i\=k,
    getRaw(i,LocationsTail,result).

这是我在控制台上写的:

1 ?- getRaw(1,[(1,2)],R).

false.

它出什么问题了?

===============>>#1 票数:1 已采纳

怎么了:变量以大写字母开头,您使用的取反版本不正确。 这是一种干净的方法:

首先,在单独的谓词中定义要满足的精确条件:

fst_pair(X,(X,_)).

然后,尝试定义一个更通用的谓词,该谓词的真值作为单独的参数:

fst_pair_truth(X,(X,_),true).
fst_pair_truth(X,(Y,_),false) :-
   dif(X,Y).

请注意,否定情况并不只是对肯定情况的否定:两者都期望成对。

现在,您的定义是,也许重新考虑名称...

getRaw(I, Xs, Ys) :-
   tfilter(fst_pair_truth(I), Xs, Ys).

请参阅此答案以获取tfilter/3的定义。

===============>>#2 票数:0

问题是变量的小写字母。 这是固定代码:

getRaw(_,[],[]).
getRaw(Raw,[(Raw,Col)|LocationsTail],[(Raw,Col)|Result]) :- 
    getRaw(Raw,LocationsTail,Result).
getRaw(Raw,[(K,_)|LocationsTail],Result) :-
    Raw\=K,
    getRaw(Raw,LocationsTail,Result).

  ask by Itai translate from so

未解决问题?本站智能推荐:

2回复

Prolog-过滤器列表

所以我明天要做这个作业。 我必须过滤列表的第n个元素,并将其作为列表返回。 因此,例如: ?-everyNth(3,[a,b,c,d,e,f],Rs)。 Rs = [c,f]。 我的想法基本上是: 但是它不能以这种方式工作,因为它在第三行中尝试匹配X,第二次返回X时返回
1回复

Prolog-在谓词中搜索列表

我有学生和他们从事的运动的谓词,我想找出哪些学生从事一项特定的运动。 我有这个沙发,但是如果我在列表中输入确切的运动项,并且只有在列表中找到一项运动项时,我才能获得结果。 我不知道如何将其组合起来以找到从事一项运动的学生: 我尝试过类似的事情: 这只是返回false。 我知
1回复

Prolog-谓词排序和合并列表

嗨,我正在尝试编写一个谓词,将第一个列表从低到高排序,将第二个列表从高到低排序,然后将每个列表的标题放入一个新列表。
1回复

Prolog-使用列表作为条件过滤列表

我有以下事实: 现在,我想通过不健康的面包和不健康的酱汁清单过滤掉面包和酱汁。 我想创建一个类似于此功能的“功能”: 给出输出: 有一个简单的方法吗?
3回复

Prolog-在列表中查找没有内置谓词的项目

如果要搜索的元素不在列表中,我想创建一个为TRUE的谓词。 而且这没有任何内置谓词或算术构造。 我是Prolog的初学者,目前在oop语言方面的思考方式过多。 预先感谢您的小费。
1回复

Prolog-谓词运算符

是否可以在谓词的参数中包含运算符(例如+,>,=,!=,> =等)(下面的示例只是演示,没有太多用处)? 似乎可以工作,但是: 不-为什么呢? 为什么有时可以包括运算符,有时却不能包括在内? 我该如何test(A != B) := A > B. 我在s
1回复

Prolog-总结谓词结果

假设我有以下谓词: 我给它提供了一定的X和B,作为回报,它给了我5个不同的R结果。 编辑:X和B没有指定范围。 相反,X指定一个整数(例如120),而B指定所有三次(小于1的整数),其三次方小于X。func1所做的是计算R作为余数。 在这种情况下,X = 120: 由于
1回复

Prolog-列表矩阵

这里有一个问题(将任何长度的列表)转换为矩阵(请参阅底部的链接),但是我想相反地将矩阵递归转换为列表。 定义谓词: 其中NewList = [a,b,c,d,e,f]. 谁能帮忙吗? 谢谢。 将列表变成矩阵
1回复

Prolog-列表清单

有myMultiply/3 哪个将左边列表中的每个元素与第二个arg处的nun相乘并返回Result 。 例如 - 和tlm/3 我在那里尝试将myMultiply/3放置在右侧列表的每个元素上的左侧列表中,并重新调整Result 。 例如 - 通常,
1回复

Prolog-“成员”列表

我有一个名为member的函数,应该将其作为参数:1)名称2)名称列表。 名称列表已在我的程序中定义,因此我希望能够使用名称和已在程序中初始化的列表来调用该方法。 例如,我的Prolog程序包含... 因此,当我在Prolog提示符下并键入member(mike,namesL