簡體   English   中英

prolog 中列表的運行長度解碼?

[英]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 個元素的“元組”列表,而不是 2 個元素列表的列表
  • 那么,第二個子句中的測試將始終失敗
  • 元組元素是keyvalue ,但您以相反的順序“訪問”它們。

因此,刪除第二個子句——它無關緊要,因為模式匹配將丟棄格式不正確的列表。 [1,X]更改為(X,1)以及類似的其他對元組的引用,並使用分配的查詢測試您的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM