运行 序言中列表的长度解码?
run length decoding of a list in prolog?
我正在尝试解码给定的列表,例如 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 个元素的 'tuples' 列表,而不是包含 2 个元素的列表列表
- 那么,第二个子句中的测试将永远失败
- 元组元素是
key
和 value
,但你 'accessing' 它们的顺序相反。
因此,删除第二个子句 - 它无关紧要,因为模式匹配会丢弃格式不正确的列表。
将 [1,X]
更改为 (X,1)
以及类似的其他元组引用,并使用分配的查询测试您的代码。
我正在尝试解码给定的列表,例如 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 个元素的 'tuples' 列表,而不是包含 2 个元素的列表列表
- 那么,第二个子句中的测试将永远失败
- 元组元素是
key
和value
,但你 'accessing' 它们的顺序相反。
因此,删除第二个子句 - 它无关紧要,因为模式匹配会丢弃格式不正确的列表。
将 [1,X]
更改为 (X,1)
以及类似的其他元组引用,并使用分配的查询测试您的代码。