2016-03-12 72 views
1

我正在編寫一個用於標記的Prolog程序。目前,我能夠獲得ASCII碼列表,但我不知道如何標記它們以返回一個令牌列表。如何按元素逐列分列元素?

舉例來說,如果我有:

[105,110,116,32,105,110,116,32,97,32,13,10,105,110,116,32], 

我如何獲得:[int,int,a,int]

我知道關鍵是要讀取列表'32',並將32之前的所有內容分開,並將[105,110,116]附加爲'int',我是新來的列表,所以我對Prolog不熟悉。任何幫助?

+1

只是一般的評論:要處理文本,您還可以使用字符列表。他們更可讀。在你的情況下:'[我,N,T,',I,N,T'',A,'','\ r','\ n',i,n,t,'']'。有關更多信息,請參見[this](http://stackoverflow.com/a/8269897/772868)! – false

+0

是否有任何謂詞將''附加到''等特殊字符? ?@false – zihaow

+0

我不明白你的問題。帶'?'的字符列表是「?」或「[?]」。 – false

回答

1

關於DCG的基本知識woudl be usefull here。比方說您使用read_lines_to_codes/2read_lines_to_code(user_input,X).因此與輸入{}你recive X = [123, 125].所以用DCG像

lekserr(Tokens) --> 
( ("{", !, {Token = tkLbrabce } 
    ; "}", !, {Token = tkRBrace} 
    ; "int", !, {Token = tkInt} 
    ), 
    !, 
    {Tokens = [Token| TokList]}, 
    lekserr(TokList) 
; [], 
    {Tokens = []} 
). 

當你定義得到ASCII碼

read_line_to_codes(user_input,X), phrase(lekserr(Y),X). 
| int 
X = [105, 110, 116], 
Y = [tkInt]. 

這只是短暫的,我希望你覺得它有用,考慮添加子句來忽略空格。