[英]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.