Tôi đang cố gắng tìm ra cách để tạo một vị từ trong prolog tổng các bình phương chỉ là số chẵn trong một danh sách đã cho.Tạo một vị từ trong Prolog tổng các bình phương chỉ các số chẵn trong một danh sách
mong đợi đầu ra:
?- sumsq_even([1,3,5,2,-4,6,8,-7], Sum).
Sum = 120 ;
false.
Những gì tôi biết làm thế nào để làm là để loại bỏ tất cả các số lẻ từ một danh sách:
sumsq_even([], []).
sumsq_even([Head | Tail], Sum) :-
not(0 is Head mod 2),
!,
sumsq_even(Tail, Sum).
sumsq_even([Head | Tail], [Head | Sum]) :-
sumsq_even(Tail, Sum).
nào mang lại cho tôi:
Sum = [2, -4, 6, 8]
Và Tôi cũng biết cách tổng hợp tất cả các ô vuông của các số trong một danh sách:
sumsq_even([], 0)
sumsq_even([Head | Tail], Sum) :-
sumsq_even(Tail, Tail_Sum),
Sum is Head * Head + Tail_Sum.
Nhưng tôi dường như không thể tìm ra cách kết nối hai thứ này lại với nhau. Tôi nghĩ rằng tôi có thể đã đi sai đường về nó nhưng tôi không chắc chắn làm thế nào để xác định các mối quan hệ thích hợp để làm cho nó có ý nghĩa.
Cảm ơn!
Lý tưởng nhất là các chương trình Prolog của bạn là quan hệ * thuần túy *. Điều này có nghĩa là chúng có thể sử dụng được theo mọi hướng, ví dụ như trong trường hợp chung nhất. Ví dụ, chúng tôi cũng muốn có được câu trả lời cho '? - sumsq_even (Ls, Sum) .'. Kiểm tra các câu trả lời được cung cấp bởi @repeat và @tas cho tính tổng quát này. – mat