prolog - prolog 函数,prolog 权重,prolog 项目
问题描述
features([explicit-0, danceability-1, energy-1,
key-0, loudness-0, mode-1, speechiness-1,
acousticness-1, instrumentalness-1,
liveness-1, valence-1, tempo-0, duration_ms-0,
time_signature-0]).
%this predicate filters the features and gives the filtered list as a result.
filter_features(Features, Filtered) :-
features(X),
filter_features_rec(Features, X, Filtered).
filter_features_rec([], [], []).
filter_features_rec([FeatHead|FeatTail], [Head|Tail], FilteredFeatures) :-
filter_features_rec(FeatTail, Tail, FilteredTail),
_-Use = Head,
(
( Use is 1,
FilteredFeatures = [FeatHead|FilteredTail])
;
( Use is 0,
FilteredFeatures = FilteredTail
)
).
这是如何运作的?这里 -use 的用途是什么?我无法解释 -0,-1 权重以及我们如何使用它们以及它们在这里的函数中代表什么?
解决方案
“Keyword-Weight”表达式是pair,在这种情况下将Keyword链接到Weight。
它们实际上是具有函子和 arity 2 的标准复合术语-
,也可以这样写,就-(Keyword,Weight)
好像这会破坏具有语法上可接受的写对方式的意义。
给定这样的一对,您可以将另一个术语与它统一,并在位置 1 或 2 处提取参数。
特别是这里:
_-Use = Head
Head
隐含地知道是一对(尽管在编译时或运行时都没有检查 is),因为它是特征列表的头元素。它与 pair 统一_-Use
,这意味着 pair 的第一个参数与匿名(和未绑定的)变量统一,这总是成功的Head
。_
第二个参数与 统一Use
,此时子句中的它是新鲜的且未绑定的,因此统一也成功了。Use
现在绑定到整数权重。
之后,析取相当于一个排他分支,具体取决于Use
: Use
is 绑定到1
, then FilteredFeatures = [FeatHead|FilteredTail])
, ifUse
绑定到0
, then的绑定FilteredFeatures = FilteredTail
。
推荐阅读
- python - 如何从 scikit-learn predict_proba 中恢复输入分类符号?
- java - 如何使用户可以选择一个人的性别?
- html - Gin Gonic 模板覆盖部分模板
- python - 如何为带有参数的函数编写装饰器?
- sql - redshift regexp_substr 所有出现
- react-native - Socket IO + React Native + Rabbit MQ 架构组合?
- php - PHP 致命错误:未捕获的错误:调用未定义的函数 session_start()
- apache-camel - 有没有办法使用 Simple JMS2 组件发送带有来自标头的属性的消息?
- python - Asyncio 没有并行运行 Aiohttp 请求
- javascript - 在作为字符串传递的 iFrame 中调用函数