Ошибка free variable in expression - Prolog

Узнай цену своей работы

Формулировка задачи:

Задача: Разбить строчный список на 2 списка. Мое решение:
Но Turbo Prolog ругается на 13 строке ( Length / 2 > X ), "free variable in expression". Можете подсказать, почему ругается, вроде все нормально.

Решение задачи: «Ошибка free variable in expression»

textual
Листинг программы
split_at(0, L, [], L).
split_at(N, [H|T], [H|T1], L2) :-
    NN = N - 1,
    split_at(NN, T, T1, L2).
 
split(L, L1, L2) :-
    count(L, K),
    N = K/2,
    split_at(N, L, L1, L2).

Объяснение кода листинга программы

В данном коде реализованы две процедуры для разделения списка на две части:

  1. split_at(N, L, L1, L2) - разделяет список L на две части, помещая элементы с индексами от 0 до N-1 в L1, а остальные элементы (с N и далее) - в L2. Если N=0, то L1 становится пустым списком, а L2 - исходным списком без изменений.
  2. split(L, L1, L2) - разделяет список L на две равные части (по half элементов в каждой), помещая элементы первой части в L1, а элементы второй части - в L2. Если список L нечетной длины, то L1 становится списком из первого N элементов, а L2 - списком из оставшегося одного элемента. Пример использования: ?- split([1,2,3,4,5], L1, L2). L1 = [1, 2], L2 = [3, 4, 5]. ?- split([1,2,3,4,5,6], L1, L2). L1 = [1, 2, 3], L2 = [4, 5, 6]. ?- split([1,2,3,4,5,6,7], L1, L2). L1 = [1, 2, 3, 4], L2 = [5, 6, 7]. ?- split([1,2,3,4,5,6,7,8], L1, L2). L1 = [1, 2, 3, 4, 5], L2 = [6, 7, 8]. ?- split([1,2,3,4,5,6,7,8,9], L1, L2). L1 = [1, 2, 3, 4, 5], L2 = [6, 7, 8, 9].

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5
Похожие ответы