【发布时间】:2020-10-01 07:11:04
【问题描述】:
到目前为止,我已经完成了相当多的研究并尝试了不同的方法,但是即使在阅读了多个堆栈溢出答案甚至是 Addison Wesley 的 PDF 之后,我也找不到解决方法。这是代码
use_module(library(func)).
% importing library "func"
scale([c, d, e, f, g, a, b]).
scale(c, major, [c, d, e, f, g, a, b]).
scale(c, minor, [c, d, e_b, f, g, a_b, b_b]).
%1st attempt
search(note, scale):- scale(note, scale).
%2nd attempt
scaleOf(note, type_scale):- scale(note, type_scale).
on(item,[item|rest]).
on(item,[disregardHead|tail]):-
scale(tail),
on(item, tail).
%3rd attempt
fatherOf(father,type, son):- scale(father, type, sons), search(son, type, sons).
search(son, type, []):- !, fail.
search(son, type, [son|l]):- !, true.
search(son, type, [c|l]):- search(son, type, l).
我在尝试什么?很简单,可以迭代谓词标度(c,[c,d,e,f,g,a,b])。但我无法正确处理。
编辑:我有多个谓词,因为其他人建议创建一个谓词来区分一个尺度与另一个尺度。我以为我可以把它塞进任何算法,但我猜 PROLOG 不是那么宽松:p
【问题讨论】:
-
您这里有两个谓词
scale,一个带有注释列表的scale/1,还有一个带有c的音阶列表的scale/3?您能否解释一下您的目标是什么,以及这些谓词如何提供信息? -
@WillemVanOnsem 抱歉,我应该指定的。我以为我可以使这些与其他实现一起工作,但我做不到。如果可以的话,我很想有一个可以浏览这个列表的算法。抱歉,我对 PROLOG 还是很陌生。
-
但是可以解释一下您的目标是什么吗?你打算实现什么谓词?哪些查询应该成功,哪些查询应该失败?
-
很抱歉我说的不清楚,我只想在谓词列表中查找 X 注释。例如,具有相同的列表,但与 scale(d, minor, [c, d, e, f, g, a, b_b])。如果此谓词为真,则程序将返回真。 “用户”只需输入 scale(d, minor) 即可开始浏览知识库。 (应该包含所有市长和小规模。我还没有想出更好的东西)。我试图返回上述列表 inside 谓词 scale(d, minor, [c, ...]) 中的所有元素,但这又是一个令人头疼的一天,因为 prolog 不能那样工作
标签: list search prolog predicate