Я пытаюсь использовать часть программного обеспечения, и у меня возникают проблемы.Преобразование из строки в список в Prolog
Следует отметить, что с использованием университетских компьютеров с предустановленными прогонами (OSX) или компьютерами Windows работает тот же самый программный продукт. Хотя это не работает на моей машине Linux/Ubuntu.
Программа запускается с Баш скрипт, используя эту форму:
echo "reset_statistics(off), specific_load_predicate(filename), tokenize(\"$2\", List), tex(List, $3)." | ./prolog-executable
Пролог исполняемым создается с помощью swipl -c
и qsave_program/1
Теперь я узнал, что предикат разметить имеет вид:
tokenize([A|As], List) :- ...
Так что он принимает список в качестве входных данных, но сценарий bash предоставляет строку.
Возможно ли использовать какой-либо пролог-модуль или расширение, которое автоматически преобразует строку из строки в список? Потому что тот же код работает на других компьютерах.
В SWI-Prolog установите флаг Prolog 'double_quotes' в' chars' (рекомендуется) или 'codes', чтобы превратить все в двойные кавычки в список символов или кодов. Вот как это ** должно было ** быть в первую очередь, и что также делают другие системы Prolog. Вы также можете использовать опцию командной строки '--traditional' для получения стандартного поведения в этом отношении. – mat
@mat Отлично! это был тот ответ, который я искал. Он работает, когда я запускаю swipl с --traditional, но он не работает со всеми используемыми сценариями bash, есть ли способ установить его в масштабе всей системы? – Xeli
Вы можете добавить псевдоним Bash, например: 'alias swipl = '/ usr/local/bin/swipl --traditional'', или поместить': - set_prolog_flag (double_quotes, chars) .' в ваш '~/.swiplrc '. Обратите внимание, что все это приводит к чрезвычайно забавным ситуациям, когда ваш инструктор использует другой способ для вызова SWI-Prolog. Это почти так, как будто для Prolog должен быть стандарт! – mat