【问题标题】:prolog functions, prolog weights, prolog projectsprolog 函数,prolog 权重,prolog 项目
【发布时间】:2021-05-26 01:32:52
【问题描述】:
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 权重以及我们如何使用它们以及它们在这里的函数中代表什么?

【问题讨论】:

  • 假设这段代码不是你自己写的,谁给你的?您应该首先询问编写此代码或将其推荐给您的人。如果是你自己找到的一些代码,你在哪里找到的,它应该做什么?
  • 遗憾的是,如果您了解 Prolog 语法,您的问题将会得到解答 :-( 所以这可能意味着您可能需要回过头来阅读。事实上,这段代码看起来像它是由一个严重高估了他们对一般编程知识,特别是 Prolog 知识的人编写的;我至少知道这在大多数大学中很常见,所以我对你有感觉。祝你好运。
  • 但你在 Stackoverflow 上找到的很多代码也很糟糕,即使乍一看似乎也能正常工作。这不是寻找工作代码的地方,就是这样。

标签: prolog


【解决方案1】:

“Keyword-Weight”表达式是 pairs,在这种情况下将 Keyword 链接到 Weight

它们实际上是标准的复合术语,带有仿函数 - 和 arity 2,也可以写为 -(Keyword,Weight),尽管这会破坏语法上可接受的编写对的方式的意义。

给定这样的一对,你可以用它统一另一个术语,并在位置 1 或 2 提取参数。

特别是这里:

_-Use = Head

Head 隐含地知道是一对(尽管在编译时或运行时都没有检查),因为它是特征列表的头元素。它与_-Use 对统一,这意味着Head 对的第一个参数与_ 统一,匿名(和未绑定)变量,始终成功。第二个参数与Use 统一,此时子句中的它是新鲜的且未绑定的,因此统一也成功了。 Use 现在绑定到整数权重。

之后,析取相当于一个独占分支,取决于Use的绑定:是Use绑定到1,然后FilteredFeatures = [FeatHead|FilteredTail]),如果Use绑定到0,然后FilteredFeatures = FilteredTail

【讨论】:

  • 这一切都很好,但你真的看懂了代码吗?我有点麻烦。 filter_features_rec/3 中的三个参数是怎么回事?我会运行它来尝试理解,但我不知道在filter_features/2 的第一个参数中添加什么。你弄清楚如何运行问题中的代码了吗?
  • @TA_intern 哦,是的,你说得对。该代码并不完全一致。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多