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

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

15.09.2017, 05:32. Показов 3677. Ответов 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: ./SDK/SDK.h:11:37: error: expected constructor, destructor, or type conversion before '(' token
Возникает такая ошибка при компиляции, в коде особо не разбираюсь, прошу помочь, вот код: ...

Пишет source.pas(6,94) Fatal: Syntax error, ")" expected but "," found Error: /usr/bin/ppcx
uses crt; const a:array of string=('Хорошо','Плохо'); const b:array of string=('Что-нибудь...

Syntax error: Operator priority clash SWI-Prolog
Здравствуйте все, Пишу мини экспертную систему по комбинированию костюма рубашки и...

[Error] Unit1.pas(1280): '.' expected but ';' found
подскажите что не так в этой функции function SHRegGetPath(hkey:HKEY; pszSubKey:PChar;...

[C++ Error] LikarnyaClass.h(28): E2303 Type name expected
Здравствуйте не могу понять как это исправить, может кто помочь и обьяснить что бы потом не было...

6
Фрилансер
3704 / 2076 / 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
Сообщений: 89
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
Фрилансер
3704 / 2076 / 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
Сообщений: 89
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
Фрилансер
3704 / 2076 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
15.09.2017, 10:15 6
Терпения не хватило Второй запуск с seen() должен пройти успешно.

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

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

[C++ Error] Unit7.h(26): E2303 Type name expected
.h #ifndef Unit7H #define Unit7H...

[C++ Error] Unit2.h(11): E2303 Type name expected
Добрый день, помогите решить проблему, вечная ошибка с которой у меня проблемы( Unit2.h(11):...

[Error] Unit6.pas(73): Statement expected but 'PROCEDURE' found
Как исправить ошибку? unit Unit6; interface uses Windows, Messages, SysUtils, Variants,...

Error: Incompatibility type: got 'Extended' expected 'TLabel'
Ничего не понимаю

[C++ Error] Unit1.cpp(10): E2303 Type name expected
//--------------------------------------------------------------------------- #include...

Ошибка: [dcc32 Error] Unit1.pas(150): E2029 '(' expected but '[' found и [dcc32 Error] Unit1.pas(188): E2035 N
2 таких ошибки повторяются в нескольких местах. Код совсем сухой и еще совсем не доделан. Но на...


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

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

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