【发布时间】:2017-05-08 02:30:03
【问题描述】:
我正在尝试在 prolog 中开发代码以捕获频率为 0 的项目。看示例,元组:
[[1,31],[2,0],[3,21],[4,0],[5,0]]
其中每个元素都是其他元素,每个元素有 2 个元素,因此应该捕获的元素是 2、4 和 5,频率为 0。下面的代码代表了这个想法:
match([],_).
match([[A,Y]|Tail],[A|Tail2]):- Y==0,match(Tail,[Tail2|A]),!.
match([[_,_]|Tail],X):- match(Tail,X).
传递了两个参数:一个包含一组目标值和频率的元组,
(["Target value", "frequency"], ["target value", "frequency"], ...]
第二个参数是一个变量,它接收目标元素。但是,我不得不开发代码的抽象是不正确的,因为结果并不如预期的那样。我一步一步地了解,修改了几件事,结果总是一样的......无论如何都会返回一个只有2个元素的列表(即使只有一个频率为0的目标)。
3 个频率目标 0 的示例:
?- match([[1,31],[2,0],[3,312],[4,0],[5,0]],X).
X = [2|4].
本例的预期结果:X = [2,4,5]。
以 1 个频率目标 0 为例:
?- match([[1,31],[2,0],[3,312],[4,312],[5,123]],X).
X = [2|_9998].
本例的预期结果:X = [2]。
有人可以帮助我吗?
【问题讨论】:
标签: list prolog logic tuples paradigms