【问题标题】:Source of pure prolog small programs纯prolog小程序源码
【发布时间】:2016-07-26 22:48:36
【问题描述】:

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

那么有没有半好的来源?我说的是小程序,比如在一个固定的地方插入一个元素等等,当我可以检查我是否做对了事情时,我发现我学到了更多

大家好,我正在学习prolog,现在我找到了prolog!与两个月的课程相比,这帮助我在两次快速阅读中学到了更多的序言。 我什至正确地解决了一些练习,这让我感到惊讶。所以我想保持这个轨道(我已经完成了许多练习,直到第五章,我发现了几个 githubs 在那里我可以检查我是否接近解决方案,如果我的解决方案遗漏了案例,等等) 提前致谢

为了什么值得我说这样的话,如果它可以用超过 3 个例子更好,但这种类型的问题

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

【问题讨论】:

  • 为什么没有剪裁等如此重要?
  • 有人告诉我要为这个程序使用纯 prolog 语法,后来我假设我会使用它。也因为即使我现在无法解决问题,但很可能根本不需要这种类型的运算符@WillemVanOnsem
  • SO 是一个很好的地方。所以不用问了。只看答案。
  • 我今天开始这样做@false,作为初学者的主要问题是不知道要问什么或寻找什么。但是,是的,少就是什么
  • Official Learn Prolog Now! website 并使用您最喜欢的搜索引擎搜索 lpn 练习解决方案以获取各种 github 存储库的列表。 Also interesting

标签: prolog logic logical-purity


【解决方案1】:

Paul Tarau 为 Hitchhiker Prolog 提供了一个测试平台,其中包含几个有趣的纯 Prolog“程序”:queens、sudoku、lambdas、peano 算术。 查看文件夹progs 或在此处将我的实现(来自hhprolog)作为sn-ps 运行...

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

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)
        .boxed {
            box-shadow: 8px 8px 5px #444;
            background-image: linear-gradient(180deg, #fff, #ddd 40%, #ccc);
        }
        .spacing {
            border: 1px solid #333;
            padding: 8px 12px;
        }
<script src="https://cdn.jsdelivr.net/gh/CapelliC/hhprolog/hhprolog.js"></script>
<label>print solutions
    <input id=print_sol type=checkbox checked=checked>
</label>
<div class="boxed spacing">
    <div>Solutions</div>
    <pre id=run_output></pre>
</div>

【讨论】:

    【解决方案2】:

    您可以从研究 Prologue 的实现开始
    对于序言。那是通常的列表谓词。他们是 此处指定:

    Prolog 的序言(工作草案)
    乌尔里希·纽默克尔,2012-09-06
    https://www.complang.tuwien.ac.at/ulrich/iso-prolog/prologue

    你会在不同的地方找到实现here
    (GitHub SWI-Prolog) 和here (GitHub Jekejeke Prolog)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-14
      • 2012-05-04
      • 2021-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多