纯prolog小程序的来源

时间:2016-04-06 13:32:56

标签: prolog logic logical-purity

问题:是否有一些地方可以查看一些程序?我正在谈论rosetta代码风格,但我去了那里,看到几乎每个程序都用非纯语法语法解决(使用剪切,使用IS,那种类型的东西),由于我的学习要求,这对我没有帮助。

那么有没有一半的好消息来源?我正在谈论小型程序,比如在一个固定的地方插入一个元素等等,当我能够检查我是否正确行事时,我发现我学得更多了

大家好,我正在学习prolog,我现在已经找到了prolog!这让我在两次快速阅读中比在2个月的课堂上学习更多的序言。 我甚至正确地解决了一些练习,这让我很惊讶。所以我想保留这个轨道(我已经做了很多练习直到第五章,我找到了几个githubs,我可以检查我是否接近解决方案,如果我的解决方案错过了案例,等等) 提前致谢

值得我说的是这样的事情,如果能有3个以上的例子更好但这类问题

http://www.irisa.fr/prive/ridoux/ICLP91/node7.html#SECTION00031000000000000000

2 个答案:

答案 0 :(得分:2)

Paul Tarau为旅行者Prolog提供了一个测试平台,其中包含几个有趣的纯Prolog“程序”:皇后,数独,lambda和peano算术。 请在此处查看文件夹progs或运行我的实现(来自hhprolog)作为摘要...

N-Queens,一个我从未见过的非常优雅的解决方案:

jQuery.animate

$('body, html').animate({
  scrollTop: $(this.hash).offset().top
}, {
  duration: 1000,
  complete: function() {
    document.body.classList.remove('nav-is-open');
  }
});
place_queen(I,[I|_],[I|_],[I|_]).
place_queen(I,[_|Cs],[_|Us],[_|Ds]):-place_queen(I,Cs,Us,Ds).

place_queens([],_,_,_).
place_queens([I|Is],Cs,Us,[_|Ds]):-
  place_queens(Is,Cs,[_|Us],Ds),
  place_queen(I,Cs,Us,Ds).

gen_places([],[]).
gen_places([_|Qs],[_|Ps]):-gen_places(Qs,Ps).

qs(Qs,Ps):-gen_places(Qs,Ps),place_queens(Qs,Ps,_,_).

goal(Ps):-qs([0,1,2,3,4,5],Ps).
function runnable(out_elem) {
    settext(out_elem = out_elem || run_output)
    return new Prog({
        writeln: function(l) {
            textln(out_elem, l)
        },
        nl_source: `
            place_queen I _0 _1 _2 and
              _0 holds list I _3 and
              _1 holds list I _4 and
              _2 holds list I _5 .

            place_queen I _0 _1 _2 and
              _0 holds list _3 Cs and
              _1 holds list _4 Us and
              _2 holds list _5 Ds 
            if
              place_queen I Cs Us Ds .

            place_queens nil _0 _1 _2 .

            place_queens _0 Cs Us _1 and
              _0 holds list I Is and
              _1 holds list _2 Ds 
            if
              place_queens Is Cs _3 Ds and
              _3 holds list _4 Us and
              place_queen I Cs Us Ds .

            gen_places nil nil .

            gen_places _0 _1 and
              _0 holds list _2 Qs and
              _1 holds list _3 Ps 
            if
              gen_places Qs Ps .

            qs Qs Ps 
            if
              gen_places Qs Ps and
              place_queens Qs Ps _0 _1 .

            goal Ps 
            if
              qs _0 Ps and
              _0 lists 0 1 2 3 4 5 .
        `
    })
}
function settext(e, t) {
    e.innerHTML = t || ''
}
function textln(e, l) {
    e.innerHTML = e.innerHTML + `\n` + (l || '')
}

const prog = runnable()
const t0 = Date.now()
prog.run(print_sol.checked)
prog.options.writeln('elapsed secs:' + (Date.now() - t0) / 1000)

答案 1 :(得分:1)

你可以从研究Prologue的实施开始 对于Prolog。这是通常的列表谓词。他们是 在这指定:

Prolog的序幕(工作草案)
Ulrich Neumerkel,2012-09-06
https://www.complang.tuwien.ac.at/ulrich/iso-prolog/prologue

您可以在各个地方找到实施here (GitHub SWI-Prolog)和here(GitHub Jekejeke Prolog)。