prolog - 使用运行长度编码压缩序言中的列表
问题描述
我正在学习序言,并且一直在努力解决家庭作业问题。问题是:
“编写一个谓词 myencode/2,它将未压缩列表作为第一个参数并返回压缩列表,如第二个参数所示。例如”。
myencode([],X) should yield X = [].
myencode(['a','b','b','c','c','c','d','d'],X) should yield X = [ (a, 1), (b, 2), (c, 3), (d, 2)] .
myencode(['a','p','p','l','e'],X) should yield X = [ (a, 1), (p, 2), (l, 1), (e, 1)] .
这些问题建议:
“您可能会发现编写一个 tempencode/2 函数将列表['a','a','a','b','b','c','a','a']
转换为[('a',1),('a',1),('a',1),('b',1),('b',1),('c',1),('a',1),('a',1)]
到目前为止,我已经能够让 tempencode 函数工作
myencode(L,X) :- tempencode(L,X).
tempencode([],[]).
tempencode([H|T],[(H,1)|X]) :- tempencode(T,X).
这给了我
?- myencode(['a','a','a','b','b','c'],X).
X = [ (a, 1), (a, 1), (a, 1), (b, 1), (b, 1), (c, 1)].
我不知道如何从这里开始,任何指导将不胜感激。
解决方案
推荐阅读
- react-native - “类型错误:超级表达式必须为空或函数”在本机反应中
- python - 从两个数组创建所有可能的组合
- node.js - 产生空白 csv 输出的函数
- api - 如何使用markdown从gitlab CI中的文件中使用release API进行描述
- javascript - 为什么我的代码使用 try/catch 时 Node.js 会收到额外的错误消息?
- unikernel - 是否可以将可执行文件/二进制文件(已构建)作为 unikernel 运行?
- c - 如何在工作流树中表示 fork() && fork()?
- angular - ng g class CLI 命令不生成规范文件
- azure - AD 附加属性同步到 AAD 扩展属性未显示在 AAD 用户对象上
- java - 有没有办法使用命令行参数来决定我的程序将如何在 javafx 中启动?