web-dev-qa-db-ja.com

プロローグの算術、2のべき乗を使用して数値を表す

2つの数値があります。NKと名前を付けましょう。Nの2の累乗を使用してKと書きます。

たとえば、N = 9およびK = 4の場合、NN = 1 + 2 + 2 + 42^0 + 2^1 + 2^1 + 2^2)。

私のプログラムはN = [1,2,2,4]

私はC++に慣れています。この問題をPrologで解決する方法が見つかりません。どんな助けでも感謝します!

4
CuriousPeet
my_power_of_two_bound(U,P):-
     U #>= 2^P,
     P #=< U,
     P #>=0.

power2(X,Y):-
     Y #= 2^X.

クエリ:

?- N=9,K=4,
   length(_List,K),
   maplist(my_power_of_two_bound(N),_List),
   maplist(power2,_List,Answer),
   chain(Answer, #=<), 
   sum(Answer, #=, N), 
   label(Answer).

次に:

Answer = [1, 2, 2, 4],
K = 4,
N = 9
1
user27815