我是Prolog的初學者。我正在使用swi prolog(剛開始使用它),我需要將用戶輸入字符串分割成一個列表。我想下面的代碼,但我得到一個錯誤,指出「句號條款體?不能重定義,/ 2」閱讀序言中的用戶輸入字符串
write('Enter the String'),nl,read('I').
tokenize("",[]).
tokenize(I,[H|T]):-fronttoken(I,H,X),tokenize(X,T).
有人可以幫我這個PLS ...
我是Prolog的初學者。我正在使用swi prolog(剛開始使用它),我需要將用戶輸入字符串分割成一個列表。我想下面的代碼,但我得到一個錯誤,指出「句號條款體?不能重定義,/ 2」閱讀序言中的用戶輸入字符串
write('Enter the String'),nl,read('I').
tokenize("",[]).
tokenize(I,[H|T]):-fronttoken(I,H,X),tokenize(X,T).
有人可以幫我這個PLS ...
從您的錯誤消息中,很明顯你正在使用SWI-Prolog。然後你可以使用它的庫支持:
?- read_line_to_codes(user_input,Cs), atom_codes(A, Cs), atomic_list_concat(L, ' ', A).
|: hello world !
Cs = [104, 101, 108, 108, 111, 32, 119, 111, 114|...],
A = 'hello world !',
L = [hello, world, !].
更直接的「弦」(實際上是一個字符串代碼列表)的工作,我已經建立了我的分流,從string // 1
幫助:- use_module(library(dcg/basics)).
%% splitter(+Sep, -Chunks)
%
% split input on Sep: minimal implementation
%
splitter(Sep, [Chunk|R]) -->
string(Chunk),
( Sep -> !, splitter(Sep, R)
; [], {R = []}
).
身爲DCG,它應該與短語/ 2
?- phrase(splitter(" ", Strings), "Hello world !"), maplist(atom_codes,Atoms,Strings).
Strings = [[72, 101, 108, 108, 111], [119, 111, 114, 108, 100], [33]],
Atoms = ['Hello', world, !] .
謝謝f或幫助! – User111213 2013-05-04 23:18:49
你的第一個行是其他謂詞的一部分。當它在頂層使用時,它被視爲無頭的規則的定義,這是無效的。
我可以複製這樣的:
2 ?- [user].
|: write('Enter the String'),nl,read('I').
ERROR: user://1:16:
Full stop in clause-body? Cannot redefine ,/2
|:
你在你的規則,它只有身體缺少了頭。但它必須同時具有以下兩種情況:
3 ?- [user].
|: tokenize("",[]).
|: tokenize(I,[H|T]) :- fronttoken(I,H,X),tokenize(X,T).
|:
這是好的。
http://stackoverflow.com/questions/9611134/how-to-convert-a-string-read-from-被稱爲輸入到列表中的序列號 – slackmart 2013-05-03 06:43:55