Ошибка 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).
Объяснение кода листинга программы
В данном коде реализованы две процедуры для разделения списка на две части:
- split_at(N, L, L1, L2) - разделяет список L на две части, помещая элементы с индексами от 0 до N-1 в L1, а остальные элементы (с N и далее) - в L2. Если N=0, то L1 становится пустым списком, а L2 - исходным списком без изменений.
- 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].
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д