簡體   English   中英

如何獲得列表序言中元素數量的一半

[英]How can I get half the number of elements on a list prolog

我有這個謂詞,可以給我列表中元素的數量。

get_elements([],0).
get_elements([_|Tail], N) :- get_elements(Tail, N1), N is N1 + 1.


?- get_elements([1,1,1,1,1,1],N).
N = 6.

但是我要3代替6。我該如何更改謂詞呢?

謝謝!

如果列表包含奇數個元素,您還沒有說過要發生什么。 但我假設在這種情況下您想要一個結果。

蠻力但簡單的方法是使用length/2

count_half(List, HalfCount) :- length(List, N), HalfCount is N div 2.

對於具有奇數個元素的列表,它將給出一半的元素數減去1( 例如 ,7個元素將得出3的結果)。

一種簡單的遞歸方法(對列表處理更具指導性)是對實現進行一些更改:

count_half([], 0).
count_half([_,_|Tail], N) :-
    count_half(Tail, N1),
    N is N1 + 1.

這將計算每對元素。 唯一的缺點是,如果元素數量奇數,將導致失敗。 可以通過另外一種基本情況進行補救:

count_half([], 0).
count_half([_], 0).
count_half([_,_|Tail], N) :-
    count_half(Tail, N1),
    N is N1 + 1.

暫無
暫無

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

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