2013-05-07 5 views
0

build/3 프롤로그에있는 목록에 N 요소가 있고 각 요소는 X이어야합니다.N 길이 같은 값의 목록을 작성하십시오.

?- build(30,3,L). 
L = [30,30,30]. 

무한 루프로 끝나거나 변수가 올바르게 인스턴스화되지 않도록 유지하십시오.

build(_,0,[]). 
build(X,N1,[X]):- N1>0, N1 is N - 1, build(X,N,[]). 
build(X,N1,[X|L]) :- N1 > 0, N1 is N - 1, build(X,N,L). 

답변

4
build(_,0,[]). 

좋아.

build(X,N1,[X|L]) :- N1 > 0, N1 is N - 1, build(X,N,L). 

우수한. ?? N is N1 - 1을 의미합니다.

build(X,N1,[X]):- N1>0, N1 is N - 1, build(X,N,[]). 

왜 ?? [X]은 이미 이전 규칙 인 [X] = [X | [] ]과 일치합니다.

이 규칙이 필요하지 않습니다. 전혀입니다.

(1) maplist/2와 : 메타 술어를 사용

4

매우 짧은하게 길이 N의 목록을 작성하고

build(X, N, List) :- 
    length(List, N), 
    maplist(=(X), List). 

(2) findall/3을 가진 X. 모든 요소와 일치 : 루프를 N 번 만들고 X 번 반복하여리스트 작성

build(X, N, List) :- 
    findall(X, between(1, N, _), List). 
관련 문제