Prolog - 需要使自定义运算符检查列表

时间:2015-08-03 22:51:53

标签: list prolog

我正在制作一些教程,目前仍然坚持这个:

<a class="project-link" href="#modal1" id="one" style="margin-right:25px;">Modurra Shelving </a> <div class="remodal" data-remodal-id="modal1"> <div class="dar">Darrien Tu.</div> <button class="remodal-close" data-remodal-action="close"></button> <div class="anchor-point">sdfsfs</div> <div class="title"> <p class="projectTitle">Modurra <br>Shelving.</p> </div> </div> <a class="project-link" href="#modal2" id="one" style="margin-right:25px;">Other stuff </a> <div class="remodal" data-remodal-id="modal2"> <div class="dar">Darrien Tu.</div> <button class="remodal-close" data-remodal-action="close"></button> <div class="anchor-point">sdfsfs</div> <div class="title"> <p class="projectTitle">Modurra <br>Shelving.</p> </div> </div> 运算符是一元一元的前缀运算符,用于检查其列表 操作数只有一个元素。

例如:

var scrollFn = function () {
    var targetOffset = $(this).find(".anchor-point")[0].offsetTop;
    console.log('Scrolling...');

    if ($(this).scrollTop() > targetOffset) {
        $(this).find(".projectTitle").addClass("topper");

    } else {
        $(this).find(".projectTitle").removeClass("topper");
    }
};

$('.remodal').scroll(scrollFn);

如何让运算符检查列表是否包含一个变量? 感谢

1 个答案:

答案 0 :(得分:1)

基本语法

functor([1,2,3],F,A).

发出上述查询会将F'.'A统一为2。 因此,列表是由二进制术语.(Head,Tail)表示的典型cons-cell,其中Head是元素,Tail是子列表。我们还可以使用=../2谓词来构造列表:

[1,2,3] =.. X.

以上X[., 1, [2, 3]]取消联系。如果我们在单例列表中应用相同的方法,那么我们就有了:

[1] =.. X.

X = [., 1, []]
Yes.

空列表用[]表示,它是一个名为"[]"的原子。 知道了以上所有内容,我们只使用基本的Prolog点项来生成列表:

.(A,.(B,[])) = [A,B].

Yes

句法糖

如上所述,括号表示法是./2的语法糖,而且......

[H1, …, Hn | T ]

...代表

.(H1,( … .(Hn, T) … ))

特别是&#34; | T&#34; T为空列表[]时可以省略。这就是为什么可以编写[a,b,c]来表示.(a,.(b,.(c,[])))列表的原因。

的Singleton

包含元素V的单例列表由[V]表示,代表.(V,[])。在您的评论中,您做得对的是运营商声明:

:- op(500, fy, isSingleton). 

你添加了一个无用的&#34; |[]&#34;与空尾一致,但isSingleton [_X|[]]失败的原因是因为没有定义这样的谓词。您当然可以将其写入文件并加载它,但由于您只需要一个简单的子句,您也可以使用compile_term/1

compile_term(isSingleton([_])).

根据定义,isSingleton当且仅当其第一个参数可以与尾部为空的列表统一时才会成功。我们不关心它的头部,这解释了匿名_变量(您的原始_X添加了很少的信息,但也是正确的)。最后,以下工作:

isSingleton [3].

Yes.