【问题标题】:run length decoding of a list in prolog?prolog中列表的运行长度解码?
【发布时间】:2020-04-24 22:47:26
【问题描述】:

我正在尝试解码给定列表,例如 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).

【问题讨论】:

    标签: list prolog decode run-length-encoding


    【解决方案1】:
    • 要求您处理由 2 个元素组成的“元组”列表,而不是由 2 个元素组成的列表
    • 那么,第二条中的测试总是会失败
    • 元组元素是 keyvalue,但您以相反的顺序“访问”它们。

    所以,删除第二个子句 - 它无关紧要,因为模式匹配会丢弃格式错误的列表。 将 [1,X] 更改为 (X,1) 以及对元组的其他类似引用,并使用分配的查询测试您的代码。

    【讨论】:

    • 所以你的意思是将所有其他元组如 [N, X] 更改为 (N, X) 还是我也应该反转它们
    • 当我运行它时它只是返回 false
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多