Источник чистого пролога маленьких программ

Вопрос: есть ли место с некоторыми программами, которые я могу проверить? Я говорю о стиле розеттского кода, но я пошел туда и увидел, что почти каждая программа решается с непростым прологическим синтаксисом (с использованием cut, с использованием IS, такого рода вещи), что не помогает мне из-за моих требований к обучению.

Так есть ли половина хорошего источника? Я говорю о небольших программах, таких как вставка элемента в определенное место и т. Д., Я обнаруживаю, что узнаю намного больше, когда могу проверить, правильно ли я делаю

Привет всем, я изучаю пролог, и я нашел пролог сейчас! который помог мне выучить пролог за два коротких чтения, чем за 2 месяца занятий. Я даже правильно выполнил несколько упражнений, что стало для меня неожиданностью. Поэтому я хочу сохранить этот путь (я выполнил много упражнений вплоть до пятой главы, и я нашел пару githubs, где я могу проверить, близок ли я к решению, пропускает ли мое решение случаи и т. Д.) Спасибо заблаговременно

Для чего стоит, я говорю что-то вроде этого, если это может быть более чем с 3 примерами лучше, но этот тип проблем

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

2 ответа

Пол Тарау предоставил тестовый стенд для автостопщика Пролога с несколькими интересными программами на чистом Прологе: королевами, судоку, лямбдами, арифметикой Пеано. Посмотрите папки 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>

Вы можете начать с изучения реализаций Пролога
для пролога. Это обычный список предикатов. Они указаны здесь:

Пролог для Пролога (рабочий проект)
Ульрих Ноймеркель, 2012-09-06
https://www.complang.tuwien.ac.at/ulrich/iso-prolog/prologue

И вы найдете реализации в разных местах здесь
(GitHub SWI-Prolog) и здесь (GitHub Jekejeke Prolog).

Другие вопросы по тегам