Образец сопоставления пробела - PullRequest
0 голосов
/ 28 апреля 2018

Вот моя проблема:

etp(V W,[V W|G]).
etp(W V,[V W|G]).
etp(V W,[_|G]):- etp(V W,G). 

Пролог говорит Syntax error: Operator expected. Я пытался избежать пустого символа, такого как '\s', "\s" и пару других возможностей, которые, как я понял, должны работать. Ну ни как не работал должным образом. Как правильно выбрать символ пробела, например: etp(A B,[A B,C D].

Edit: Список создается следующим образом:

read_line(L,C) :-
    get_char(C),
    (isEOFEOL(C), L = [], !;
        read_line(LL,_),% atom_codes(C,[Cd]),
        [C|LL] = L).

%Tests if character is EOF or LF.
isEOFEOL(C) :-
    C == end_of_file;
    (char_code(C,Code), Code==10).

read_lines(Ls) :-
    read_line(L,C),
    ( C == end_of_file, Ls = [] ;
      read_lines(LLs), Ls = [L|LLs]
    ).

Таким образом, он читает ввод, который выглядит как

A B
C D
E F
G H

И read_lines(L) возвращает L = [[A,, B], [C,, D], [E,, F], [G,, H]]. Вот как я получаю эти промежутки между ними. Ну, на самом деле мне нужно заменить , , на -, что я пытался сделать:

read_line(L,C) :-
    get_char(C),
    ( (char_code(C,Code), Code == 32)
        -> C = '-'
        ; C = C),
    (isEOFEOL(C), L = [], !;
        read_line(LL,_),% atom_codes(C,[Cd]),
        [C|LL] = L).

А Пролог говорит Syntax error: Unexpected end of file. Не знаю, что не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...