prolog - Prolog-如何将元素附加到列表末尾
问题描述
我正在尝试编写一个函数,给定变量和列表的列表,它将返回所有不间断变量的第一个列表,如下所示:此值 [_1, _2, _3, _4, [1, 3], _5, _6 ] 将返回 [_1, _2, _3, _4]
代码返回false,我猜append函数正在将Esp列表与[P]和Esp1的串联进行比较,我该如何解决这个问题?我希望 Esp 是 [P, Esp1]。
我的代码:
espaco_aux([P|R],Esp,Esp1) :-
var(P), espaco_aux(R, _, Esp1), append([P],Esp,Esp1).
解决方案
首先,由于您希望 Esp 是 P 和 Esp1 的串联,因此您需要concat([P],Esp1,Esp)
. 其次,您需要一个终止案例,为您提供:
espaco_aux([P|R],Esp) :-
var(P), !, espaco_aux(R, Esp1), append([P],Esp1,Esp).
espaco_aux(_,[]).
但是您可以通过将附加替换为模式匹配来进一步简化它:
espaco_aux([P|R],[P|Esp1]) :-
var(P), !, espaco_aux(R, Esp1).
espaco_aux(_,[]).
推荐阅读
- python - 使用 Django 从 Flask 对用户进行身份验证
- r - 在绘图列表上使用 lines() 函数
- bootstrap-4 - bootstrap 4 data-trigger='focus' 不能在 div 上工作
- jquery - CSS 选择器:选项卡未保持选中状态
- bootstrap-4 - 引导按钮组在网格布局中的定位
- html - HTML 同一文件上的多个页面
- reactjs - 静态查询“数据”未定义
- service - BaseX 是否支持使用作业模块或查询与 proc 模块和作业模块的组合运行 basex 脚本文件 (.bxs)?
- macos - 安装应用程序后如何链接 .dylib 库
- kubernetes - google-cloud-services 无法连接任何服务