gpt4 book ai didi

prolog - 纯prolog小程序源码

转载 作者:行者123 更新时间:2023-12-04 20:35:35 24 4
gpt4 key购买 nike

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

那么有没有半好的来源?我说的是小程序,比如在固定位置插入元素等等,我发现当我可以检查我做的事情是否正确时,我会学到更多

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

为了什么值得我在谈论这样的事情,如果它可以用 3 个以上的例子更好但是这种类型的问题

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

最佳答案

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

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>

关于prolog - 纯prolog小程序源码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36452727/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com