Замените первые K вхождений 1 на любое число, скажем, 8 в списке на Прологе.

Замените первые K вхождений числа любым другим числом. Учитывая, что 1 здесь заменено на 8.

Вот как будет выглядеть мой предикат

 replace_first_k(3,[1,2,3,1,1,5,6,1,7],X).

Это должно дать следующий вывод -

E = [8,2,3,8,8,5,6,1,7]

Это код, который я написал до сих пор

replace(0,[], []).
replace(0,L,L).
replace(X,[H|T], Res) :-

     ( X > 0 , 1 \== H -> replace(X1,T, Res1) , Res = [H|Res1] 

    ; 1 == H,X1 is X - 1, replace(X1,T, Res1),  Res = [8|Res1] ).

Кажется, это работает только тогда, когда мои первые вхождения X равны 1. Может ли кто-нибудь сказать мне, что здесь не так?


person Dipesh Desai    schedule 28.04.2018    source источник
comment
@false Можете ли вы помочь мне с этим ??   -  person Dipesh Desai    schedule 28.04.2018


Ответы (1)


replace(X,[], []).
replace(0,L,L).
replace(X,[H|T], Res) :-

     ( X > 0 , 1 \== H -> replace(X,T, Res1) , Res = [H|Res1] 

    ; 1 == H,X1 is X - 1, replace(X1,T, Res1),  Res = [8|Res1] ).

Это решение

person Dipesh Desai    schedule 30.04.2018