# Prolog tasks

Эта папка содержит задания по Prolog и готовые решения для SWI-Prolog.

## Что лежит в папке

- `Prolog1_eng.txt` - база фактов про сотрудников и запросы к ней.
- `Prolog2_eng.txt` - базовые предикаты для чисел и списков.
- `Prolog3_eng.txt` - задачи на индексацию, разворот, удаление, `take` и flatten.
- `Prolog4_eng.txt` - простые программы с вводом/выводом и файлами.
- `like.pl` - маленький пример базы отношений `like/2`.
- `PrologMasterSolutions.pl` - все решения из `Prolog1_eng.txt` ... `Prolog4_eng.txt`.
- `PrologExamMemorize.pl` - короткая шпаргалка с самыми важными шаблонами.

## Установка на macOS

Самый простой вариант через Homebrew:

```bash
brew install swi-prolog
```

Проверка:

```bash
swipl --version
```

## Установка на Windows

1. Открой сайт SWI-Prolog: https://www.swi-prolog.org/Download.html
2. Скачай Windows installer.
3. Установи SWI-Prolog и оставь включенной опцию добавления в `PATH`, если установщик ее предлагает.
4. Открой PowerShell или Command Prompt и проверь:

```powershell
swipl --version
```

Если команда не найдена, запусти `SWI-Prolog` из Start Menu или добавь папку `bin` из установки SWI-Prolog в `PATH`.

## Как запускать решения

Из корня проекта:

```bash
cd /Users/amalkhamidov/Documents/Haskell-Tasks/Prolog
swipl -s PrologMasterSolutions.pl
```

На Windows команда такая же, только путь другой:

```powershell
cd C:\path\to\Haskell-Tasks\Prolog
swipl -s PrologMasterSolutions.pl
```

После запуска появится приглашение:

```prolog
?-
```

Вводи запрос и обязательно заканчивай точкой.

Примеры:

```prolog
?- ex1a.
false.

?- ex1b.
true.

?- anna_surname(Surname).
Surname = klimczak ;
Surname = maj ;
Surname = lis ;
Surname = just.

?- multiply([1,2,3], [4,5,6], Result).
Result = [4, 10, 18].

?- my_flatten([a,b,[c,d,[e,f]]], Result).
Result = [a, b, c, d, e, f].
```

Чтобы получить следующие ответы для запроса, нажимай `;`. Чтобы остановиться, нажми Enter.

Выход:

```prolog
?- halt.
```

## Как запускать один запрос из терминала

macOS/Linux:

```bash
swipl -q -s PrologMasterSolutions.pl -g "mySum([1,2,3], S), writeln(S), halt."
```

Windows PowerShell:

```powershell
swipl -q -s PrologMasterSolutions.pl -g "mySum([1,2,3], S), writeln(S), halt."
```

## Как пользоваться `Prolog4`

Задания из `Prolog4_eng.txt` интерактивные. Например:

```prolog
?- mean_two_numbers.
First number: 10.
Second number: 20.
Mean: 15
true.
```

Для файлов:

```prolog
?- uppercase_file('input.txt', 'output.txt').
```

Если имя файла читается через `read/1`, вводи его как Prolog-atom и ставь точку:

```prolog
Input file name, ended with a dot: 'input.txt'.
Output file name, ended with a dot: 'output.txt'.
```
