3
walls(This) :-
append(This, NewMap),
length(NewMap, N),
numWalls(NewMap, W),
W >= N/10.
numWalls([], _, 0).
numWalls('w'|Tail, W) :-
W is W1 + 1,
numWalls(Tail, W1).
numWalls(_|Tail, W):-
numWalls(Tail, W).
의 목록에서 문자의 발생 수를 계산 난 라인으로 라인을 주석 처리하고 난 라인을 numWalls (NewMap, W)를 꺼내 때까지 거짓 얻을. 추가는 2 차원 배열을 평평하게하고 길이는 평평한지도의 적절한 길이를 반환합니다. 'w'가 목록의 목록에 몇 번이나 나오는지 계산해야하며 목록의 10 % 이상이 'w'이면 True를 반환해야합니다.프롤로그
walls(Maps) :-
append(Maps, NewMap),
length(NewMap, N),
print(NewMap),
numWalls(NewMap, W),
print(W) .
numWalls([], 0).
numWalls(['w'|Tail], W) :-
numWalls(Tail, W1),
W1 is W-1.
numWalls([_|Tail], W):-
numWalls(Tail, W).
"오류 :/2 : 인수 충분히 인스턴스화되지 않는다"문 제입니다 함께 오류 같은데?
대괄호를 수정 한 후에 인수가 충분히 인스턴스화되지 않습니다. W를 W1 + 1로 바꾸려면 W를 W1-1로 바꾸어야합니다. – theB3RV
@ theB3RV 재귀 호출과 추가 행을 전환 해보십시오. – dasblinkenlight
주위를 전환하면 오류가 없어지고 W> = N/10을 꺼내서 그 자리에 인쇄 (W) 문을 넣으면 W가 인쇄되지 않습니다. – theB3RV