prolog - 使用条件切割的 Prolog 查询
问题描述
我一直在使用 prolog 查询时遇到问题,该查询有一些乍一看难以理解的条件。
sameSum([L], V) :- !, sumlist(L,V).
sameSum([L|R], V) :- sumlist(L,V),sameSum(R,V).
sumlist([H],H) :- !.
sumlist([X|R],V) :- sumlist(R,Z), V is X+Z.
要求评估的查询是:
?-sameSum([[6,7,2], [1,5,9], [8,3,4]], V).
?-sameSum([[6,4,1,2], [1,12], [8,5]], V).
?-sameSum([[6,7], [1,12], [8,5]], 13).
?-sameSum([],V).
提前感谢您的大力帮助。
解决方案
这里不需要任何削减,而是:
sameSum([], _V).
sameSum([L|R], V) :-
% L = [_|_], % maybe
sumlist(L,V),
sameSum(R,V).
sumlist([],0).
sumlist([X|R],V) :-
sumlist(R,Z),
V is X+Z.
请注意,您给出的最后一个案例的原始定义失败。
推荐阅读
- java - spring kafka - 手动设置消费者日志级别(spring 5)
- python - 点击 QFrame 触发函数
- java - Android:调试 WebView.clearCache(boolean)
- java - 在 Android 中将 HTML 或 XML 转换为图像(RN Native Modules)
- r - 使用 if 或 ifelse 和 grepl 标记数据框
- python - 当服务器返回请求错误时我的代码挂起
- sql - 删除 SQL Server 上的重复记录
- reactjs - 带有 localStorage 的索引签名
- javascript - 如何添加传单 TimeDimension
- sql - 如何在oracle sql中每周显示数据