Sum of even, product of odd numbers in Prolog

后端 未结 4 2063
悲&欢浪女
悲&欢浪女 2020-12-21 09:33

I have a list of numbers, I need to calculate the sum of the even numbers of the list and the product of the odd numbers of the same list. I\'m new in Prolog, and my searche

4条回答
  •  鱼传尺愫
    2020-12-21 10:03

    Here is a suggestion for the sum of the even numbers from a list:

    even(X) :- 
      Y is mod(X,2),       % using "is" to evaluate to number
      Y =:= 0.
    
    odd(X) :-              % using even
      Y is X + 1,
      even(Y).
    
    sum_even(0, []).       % empty list has zero sum
    sum_even(X, [H|T]) :- 
      even(H),
      sum_even(Y, T), 
      X is Y+H.
    sum_even(X, [H|T]) :- 
      odd(H),
      sum_even(X, T).      % ignore the odd numbers
    

    Note: My Prolog has oxidized, so there might be better solutions. :-)

    Note: Holy cow! There seems to be no Prolog support for syntax highlighting (see here), so I used Erlang syntax. Ha, it really works. :-)

    Running some queries in GNU Prolog, I get:

    | ?- sum_even(X,[]).    
    X = 0 ?     
    yes
    
    | ?- sum_even(X,[2]).   
    X = 2 ? 
    yes
    
    | ?- sum_even(X,[3]).    
    X = 0 ? 
    yes
    
    | ?- sum_even(X,[5,4,3,2,1,0]).    
    X = 6 ? 
    yes
    

    The ideas applied here should enable you to come up with the needed product.

提交回复
热议问题