2017-07-09 63 views
1

我需要將列表拆分爲比N大一個的列表,同時忽略任何非整數。它完美的工作,除非它包含非整數時引發異常。任何人都可以看到我在做什麼錯了,請:Prolog程序從結果列表中排除整數

split([],N, [],[]). 
split([HeadOrig | TailOrig], N, L1, TailOrig):- 
    \+ integer(HeadOrig), 
    split(TailOrig, N, L1, TailOrig). 
split([HeadOrig|TailOrig],N, [HeadOrig|Tail1],L2):- 
    integer(HeadOrig), HeadOrig >= N, 
    !, 
    split(TailOrig, N, Tail1, L2). 
split([HeadOrig | TailOrig], N, L1, [HeadOrig | Tail2]) :- 
    integer(HeadOrig), HeadOrig < N, 
    !, 
    split(TailOrig, N, L1, Tail2). 
+0

確定我看到現在(編輯了以上的原代碼),但現在只是返回'假',如果我給它一個字母列表例如:[1,2,'a']。沒有更多的錯誤,但現在不繼續分裂 – ildsarria

回答

1

的問題是,該條款中的最後一項不應該是TailOrig

split([], _, [],[]). 

split([HeadOrig | TailOrig], N, L1, L2):- 
    \+ integer(HeadOrig), 
    split(TailOrig, N, L1, L2), 
    !. 

split([HeadOrig|TailOrig], N, [HeadOrig|Tail1], L2):- 
    integer(HeadOrig), HeadOrig >= N, 
    !, 
    split(TailOrig, N, Tail1, L2). 

split([HeadOrig | TailOrig], N, L1, [HeadOrig | Tail2]) :- 
    integer(HeadOrig), HeadOrig < N, 
    !, 
    split(TailOrig, N, L1, Tail2). 
+0

OMGosh謝謝!盯着它太長了:) – ildsarria

+0

不客氣:) – enezhadian