prolog - 为什么否定作为失败适用于 \+ is_list 但不适用于 \+ is_flat?
问题描述
flattenList(L,FL) :-
must_be(list,L), % if L is unbound, the predicate does not terminate; make sure it's a list
flattenList(L,[],FL).
% ===
% flattenList(+In, +Suffix, +Flattened)
%
% "'Flattened' is the flattened 'In' (which is [In] if 'In' is not a list),
% with the list 'Suffix' suffixed.
% ===
flattenList([],Suf,Suf).
flattenList([H|T],Suf,Flat):-
flattenList(T,Suf,LargerSuf),
flattenList(H,LargerSuf,Flat).
flattenList(H,Suf,[H|Suf]):- \+ is_list(H). % use NAF
这个版本可以正常工作,但我想知道为什么如果我在不同的谓词名称上使用否定,比如
flattenList(H,Suf,[H|Suf]):- \+ is_flat_list(H).
不起作用。任何有关此的信息将不胜感激。
解决方案
推荐阅读
- opencv - 无法使用 OpenCV 检测到标记的正方形
- asp.net-mvc - ASP.NET MVC 自动注销并返回登录页面
- spring - 查询获取 Spring 中 MongoDb 的前 10 名用户
- python-3.x - 从 inceptionv3 的最后一个池化层中提取的特征是什么?
- swift - Why the below code works using swift ternary operator but doesn't work using if else
- r - How to remove one facet category from facet_wrap after using tidyr to reshape data
- java - switch dark mode like whatsapp/slack etc
- javascript - How can changed after or befor in css style in jquery or javascript
- java - Make server don't stop listening socket connections
- javascript - 如何在amcharts中获得悬停切片的颜色?