prolog - PROLOG:推理过程,为什么返回false
问题描述
我有一个定义conc
:
conc([], L2, L2).
conc([X1|R1], L2, [X1|RN]) :-
conc(R1, L2, RN).
我不明白为什么conc([X | green], Y, [red, green, blue]).
返回false
而不是
X = [red],
Y = [blue]
这里的推理过程是什么?
解决方案
免责声明:我不知道 Prolog。这个答案的其余部分是一个有根据的猜测。
您提出的解决方案X = [red]
没有意义,因为这将构成X
一个单元素列表。让我们假设
X = red
反而。
那会给我们
conc([red | green], [blue], [red, green, blue]).
随着第二个方程conc
变成
conc(R1, L2, RN).
% with:
% X1 = red
% R1 = green
% L2 = [blue]
% [X1|RN] = [red, green, blue]
% i.e. X1 = red
% RN = [green, blue]
IE
conc(green, [blue], [green, blue]).
现在我们陷入了困境,因为您的任何conc
规则都不适用于green
.
问题是[X | green]
因为green
不是列表的尾部。
你的意思是[X, green]
相反吗?
推荐阅读
- c - 而函数C编程
- postgresql - 无法使用托管在 kubernetes 中的 Pyspark 从 PSQL 读取
- javascript - 除了 toString() 之外,还有其他方法可以查看函数的主体吗
- r - 在不使用循环的情况下创建所需的小标题
- reactjs - Can't store navigator.geolocation data in useffect, with a usestate
- php - 适用于 AWS S3 的 PHP 开发工具包使用 ARN 存储桶进行身份验证
- html - 为什么边距折叠不起作用?我错过了什么?
- android - 错误:无法解析 C:\Users\aNTA\AndroidStudioProjects\breaking\app\src\main\AndroidManifest.xml 中的 XML
- phpmyadmin - 如何在 centos 8 中更新 phpmyadmin?
- java - 从 url Java 解析 JSON 对象数组