List prolog中列表的游程解码?

List prolog中列表的游程解码?,list,prolog,decode,run-length-encoding,List,Prolog,Decode,Run Length Encoding,我试图解码一个给定的列表,例如mydecode([(a,1),(b,2),(c,3),(d,2)],X)应该给出X=['a','b','b','c','c','c','d','d']。这段代码中的错误是什么 mydecode([],[]). mydecode([X|Ys],[X|Zs]) :- \+ is_list(X), mydecode(Ys,Zs). mydecode([[1,X]|Ys],[X|Zs]) :- mydecode(Ys,Zs). mydecode([[N,X]|Ys],[X

我试图解码一个给定的列表,例如mydecode([(a,1),(b,2),(c,3),(d,2)],X)应该给出X=['a','b','b','c','c','c','d','d']。这段代码中的错误是什么

mydecode([],[]).
mydecode([X|Ys],[X|Zs]) :- \+ is_list(X), mydecode(Ys,Zs).
mydecode([[1,X]|Ys],[X|Zs]) :- mydecode(Ys,Zs).
mydecode([[N,X]|Ys],[X|Zs]) :- N > 1, N1 is N - 1, mydecode([[N1,X]|Ys],Zs).
  • 要求您处理由2个元素组成的“元组”列表,而不是由2个元素组成的列表
  • 那么,第二条中的测试将始终失败
  • 元组元素是
    ,但您正以相反的顺序“访问”它们
因此,删除第二个子句-它是无关的,因为模式匹配将丢弃格式错误的列表。 将
[1,X]
更改为
(X,1)
以及类似的对元组的其他引用,并使用指定的查询测试代码。

  • 要求您处理由2个元素组成的“元组”列表,而不是由2个元素组成的列表
  • 那么,第二条中的测试将始终失败
  • 元组元素是
    ,但您正以相反的顺序“访问”它们
因此,删除第二个子句-它是无关的,因为模式匹配将丢弃格式错误的列表。
[1,X]
更改为
(X,1)
以及类似的对元组的其他引用,并使用指定的查询测试代码。

那么您的意思是将所有其他元组(如[N,X]更改为(N,X)还是在运行它时也将它们反转?它只返回false那么您的意思是将所有其他元组(如[N,X]更改为(N,X)吗或者我也应该反转它们,当我运行它时,它只返回false