4 / 4 / 3
Регистрация: 26.11.2014
Сообщений: 87
1

SWI Prolog " ERROR: Type error: `dict' expected, found `s140_1' (an atom)"

15.09.2017, 05:32. Показов 3032. Ответов 6
Метки нет (Все метки)

В SWI Prolog выскакивает ошибка " ERROR: Type error: `dict' expected, found `s140_1' (an atom)".
А должно выводится в терминале:
dd.
ddf.
dfdfd.
dfdf.
dd.

в s140_1.pl уберал точки, результат тотже. Писал что вроде p(1). , ошибка не исчезла.

Вводил в терминале и выход:

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
?- chdir('/home/persej/АлгоритмыИскусственногоИнтеллектаНаЯзыкеPROLOG').
true.
 
?- [s140].
true.
 
?- findterm.
ERROR: Type error: `dict' expected, found `s140_1' (an atom)
ERROR: In:
ERROR:   [11] throw(error(type_error(dict,s140_1),_6718))
ERROR:    [9] '$dicts':'.'(s140_1,pl,_6758) at /usr/lib/swi-prolog/boot/dicts.pl:46
ERROR:    [8] findterm at /home/persej/АлгоритмыИскусственногоИнтеллектаНаЯзыкеPROLOG/s140.pl:2
ERROR:    [7] <user>
ERROR: 
ERROR: Note: some frames are missing due to last-call optimization.
ERROR: Re-run your program in debug mode (:- debug.) to get more detail.
?-
s140.pl
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
findterm:-
    see(s140_1.pl),
    processfile,
    see(user). 
 
processfile:-
    read(Term),nl,% Чтение, при условии, что Term - не переменная
    write(Term),nl,
    processfile.
    %process( Term).
 
/*
process( end_of_file) :- !. % Вся работа выполнена
process(Term) :-
    treat( Term),% Обработать текущий элемент
    processfile.% Обработать остальную часть файла
*/
s140_1.pl
Prolog
1
2
3
4
5
6
gg.
dd.
ddf.
dfdfd.
dfdf.
dd.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.09.2017, 05:32
Ответы с готовыми решениями:

Можете подсказать в чём ошибка "error c161 : Syntax error: '.' is expected"?
Грымзик, Здравствуйте. Можете подсказать в чём ошибка &quot;error c161 : Syntax error: '.' is...

Ошибка: "Syntax error in clause body, predicate call expected"
Начал только изучать, выкидывает ошибку &quot;Syntax error in clause body, predicate call expected&quot;. В...

ERROR: toplevel: Undefined procedure: readint/1 (DWIM could not correct goal) | SWI-Prolog
Начали изучать пролог по методичке отсюда. Пример: Сформировать список из N элементов, начиная с...

swi-prolog - Как с помощью массивов сделать "тест"?
Здравствуйте, Всех с наступившим Новым годом!))) Подскажите пожалуйста. Как с помощью массивов...

6
Фрилансер
3690 / 2059 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
15.09.2017, 07:02 2
persej,
Prolog
1
    see('s140_1.pl'),
Но в таком усечённом виде лучше не запускать - убил только вместе с прологом.
Бесконечно гонит end_of_file.
0
4 / 4 / 3
Регистрация: 26.11.2014
Сообщений: 87
15.09.2017, 07:39  [ТС] 3
А что делать?

Добавлено через 7 минут
Переделал s140.pl:
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
findterm:-
    see(s140_1.pl),
    processfile,
    see(user). 
 
processfile:-
    read(Term),nl,% Чтение, при условии, что Term - не переменная
    %write(Term),nl,
    %processfile.
    process( Term).
 
 
process( end_of_file) :- !. % Вся работа выполнена
process(Term) :-
    write( Term),nl,% Обработать текущий элемент
    processfile.% Обработать остальную часть файла
Работа в консоли:

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
?- [s140].
true.
 
?- findterm.
ERROR: Type error: `dict' expected, found `s140_1' (an atom)
ERROR: In:
ERROR:   [11] throw(error(type_error(dict,s140_1),_7750))
ERROR:    [8] findterm at /home/persej/АлгоритмыИскусственногоИнтеллектаНаЯзыкеPROLOG/s140.pl:2
ERROR:    [7] <user>
ERROR: 
ERROR: Note: some frames are missing due to last-call optimization.
ERROR: Re-run your program in debug mode (:- debug.) to get more detail.
?-
0
Фрилансер
3690 / 2059 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
15.09.2017, 08:34 4
Лучший ответ Сообщение было отмечено persej как решение

Решение

Разница между Вашим кодом и той строчкой, которую Вам написал я
Цитата Сообщение от Black Fregat Посмотреть сообщение
Prolog
1
    see('s140_1.pl'),
состоит в наличии апострофов вокруг имени файла.

И вместо see(user) лучше поставьте seen()
0
4 / 4 / 3
Регистрация: 26.11.2014
Сообщений: 87
15.09.2017, 10:11  [ТС] 5
Изменил на see('s140_1.pl'),

Консоль:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
?- [s140].
true.
 
?- findterm.
 
gg
 
dd
 
ddf
 
dfdfd
 
dfdf
 
dd
 
true.
 
?-
все заработало!!.

Но второй и третий запуск дали:

Bash
1
2
3
4
5
6
7
8
?- [s140].
true.
 
?- findterm.
 
true.
 
?-
и никаких термов...

когда заменил на seen().

терминал:
Bash
1
2
3
4
5
6
7
8
[s140].
true.
 
?- findterm.
 
true.
 
?-
все равно не печатаются термы.

Добавлено через 5 минут
Через некоторое время повторные команды дали нужный результат.
Консоль:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
?- [s140].
true.
 
?- findterm.
 
gg
 
dd
 
ddf
 
dfdfd
 
dfdf
 
dd
 
true.
 
?- findterm.
 
gg
 
dd
 
ddf
 
dfdfd
 
dfdf
 
dd
 
true.
 
?-
0
Фрилансер
3690 / 2059 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
15.09.2017, 10:15 6
Терпения не хватило Второй запуск с seen() должен пройти успешно.

Смысл происходящего: без seen() файл не закрывается, соответственно, каждый следующий запуск в пределах одного сеанса пытается читать с той точки, где остановился в прошлый раз. То есть, в нашем случае, второй и все последующие запуски - прямо с конца файла.

После того, как поставили seen(), произойдёт тоже самое, а только потом, в конце, отработает seen(). И дальше будет нормально.
0
4 / 4 / 3
Регистрация: 26.11.2014
Сообщений: 87
15.09.2017, 11:24  [ТС] 7
Спасибо, все работает
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.09.2017, 11:24

"Мир вампуса" (перевод со SWI-prolog в Турбо)
Здравствуйте! помогите перевести программу в турбо пролог или просто ее решить называется Мир...

SWI Prolog, реализовать запрос: "Найти предприятие, у которого больше всего вакансий"
Здравствуйте, Уважаемые Профессионалы! Возникли сложности при реализации запроса в среде SWI...

"Восемь шашек" SWI Prolog
Помогите пожалуйста решить задачу о восьми шашках. Формулировка такая: Взять 4 белых и 4...

Ошибка "Syntax error, "BEGIN" expected but "end of file" found"
В чём заключается ошибка в 73 строке под названием &quot;Syntax error, &quot;BEGIN&quot; expected but &quot;end of...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru