Я пытаюсь создать список случайной длины, используя библиотеки lists
и clpfd
. Я попробовал следующее:Создайте списки всех длин между пределами
?- use_module(library(clpfd)).
?- use_module(library(lists)).
gen_mem_burst(X) :-
Len in 1..2,
length(X, Len).
Я вижу, что Пролог первым находит решение только с одним элементом списка, то решением с двумя элементами, так же, как я ожидал. Впоследствии он выдает сообщение «из глобального стека». Я проследил его, и я заметил, что он пытается установить Len
на 3, 4, 5, ... и так далее. Как я могу заставить его остановиться?
Я новичок в Prolog, и я даже не уверен, что это действительная модель использования. В других языках с ограничениями, которые я использовал (например, SystemVerilog), это легко возможно.
Я думаю, что я выбрал название плохо. Мое намерение состоит в том, чтобы иметь возможность генерировать все возможности (i, e, списки длины 1 и списки длины 2). Я использовал метод 'fd_length (..)' из вашей ссылки. –
@ Tudor Хм, все еще не уверен. Вы абсолютно хотите использовать для этого ограниченную переменную? См. Обновление для моего ответа, чтобы сделать это без него. 'Fd_length/2', как ни странно, является излишним, если вам действительно не нужно устанавливать ограничение CLP (FD) на длину списка. –
Использование 'between' еще более круто для моих требований (так как мне просто нужно подметать), но хорошо иметь в виду подход' fd_length/2', когда мне понадобится добавить более сложные ограничения для длины списка. –