我開發了一個謂詞,它將列表List
的索引Index
的值替換爲Value
,並創建一個新的更新列表NewList
。替換列表中的元素PROLOG
%replace(List,Index,Value,NewList)
replace([_|T], 0, X, [X|T]).
replace([H|T], I, X, [H|R]):-
I > -1,
NI is I-1,
replace(T, NI, X, R), !.
replace(L, _, _, L).
該謂詞在正常列表上工作正常,但我想使它在列表上工作,而且我有點困難。
subs([]).
subs([Head|Tail], Index) :-
replace((Head), Index, 'r', Board2),
printRow(Board2),
subs(Tail).
原版:
[ [ 0 , 1 , 2 , 3 , 4 ] ,
[ 5 , 6 , 7 , 8 , 9 ] ,
[ 10 , 11 , 12 , 13 , 14 ] ,
[ 15 , 16 , 17 , 18 , 19 ] ,
[ 20 , 21 , 22 , 23 , 23 ]
]
輸出:
[ [ 0 , r , 2 , 3 , 4 ] ,
[ 5 , r , 7 , 8 , 9 ] ,
[ 10 , r , 12 , 13 , 14 ] ,
[ 15 , r , 17 , 18 , 19 ] ,
[ 20 , r , 22 , 23 , 23 ]
]
值得注意的是,爲什麼出現這種情況,因爲它取代Index = 1
每個子列表中的值。 爲了解決這個問題,我想到了實施一個計數器。由5每次迭代(每個子列表的大小),遞增索引,謂詞現在應該輸出以下(期望)名單:
所需的輸出:
[ [ 0 , r , 2 , 3 , 4 ] ,
[ 5 , 6 , 7 , 8 , 9 ] ,
[ 10 , 11 , 12 , 13 , 14 ] ,
[ 15 , 16 , 17 , 18 , 19 ] ,
[ 20 , 21 , 22 , 23 , 23 ]
]
而問題在於如何實施這個非常反面。該代碼應類似於以下,但有什麼我錯過了:
subs([]).
subs([Head|Tail], Index) :-
replace((Head), Index, 'r', Board2),
printRow(Board2),
Index is Index + 5
subs(Tail, Index).
輸出:subs(<Original List>, 7).
0 1 2 3 4
誰能給我關於如何實現它的一些幫助嗎?
我有點困惑。你想在列表清單上做些什麼?你現在有兩個'subs'子句。一個需要一個參數('subs([])。'),另一個需要兩個('subs([Head | Tail],Index):-...')。請詳細說明'L'是列表清單時'subs(L,Index)'的含義。 – lurker 2014-11-03 18:50:32
它應該替換列表列表中Index ='Index'的元素。儘管它取代了董事會的每個子列表。 – Khabz 2014-11-03 19:11:40