簡體   English   中英

Prolog以遞歸方式計算列表中的數字

[英]Prolog recursively count numbers in a list

我需要一個程序來計算列表中的所有數字,無論它們是多么深刻的嵌套。 我能夠在不在另一個列表中的情況下對數字進行計數,但是通過深層嵌套元素進行遞歸並不成功。 到目前為止我有這個:

count([],0).
count([H|Tail], N) :-
    count(Tail, N1),
    (  number(H)
    ->N is N1 + 1
    ;   is_list(H)
    -> count(H,N)  
    ;   N = N1
    ).

所以,如果我要調用count([a,1,[2,b],3],N) ,輸出應為N=3 ; 但是,我只得到N=2 有人可以幫我加我的第二次案例測試嗎? 此處的所有可用解決方案都不適用於深層嵌套的數字元素。

謝謝!

您的代碼對於is_list(H)分支是不正確的:在這種情況下,您忽略N1的值,這是不正確的,您希望NN1H上的計數之和。

完整代碼:

:- use_module(library(clpfd)).

count([], 0).
count([H|T], N) :-
    count(T, N1),
    (   number(H) ->
        N #= N1 + 1
    ;   is_list(H) ->
        N #= N1 + N2,
        count(H, N2)
    ;   N1 = N
    ).

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM