2012-12-16 2 views
2

두 개의 인수, 정렬 된 목록을 사용하는 삽입 함수를 작성하고 올바른 위치에 포함 된 숫자로 동일한 목록을 생성해야합니다. 는 여기에 지금까지 가지고있는 작업은 다음과 같습니다프롤로그에 삽입 함수

ERROR: '.'/2: Arguments are not sufficiently instantiated ("x" must hold one character) 
Exception: (6) insert1(2, [1, 4, 5]) ? creep 

나는 당신의 도움의 사람들을 이해할 것 :

insert1(X,[]) :- 
    [X]. 

insert1(X, [H|T]) :- 
    X > H, 
    insert1(X,T). 

insert1(X,[H|_T]) :- 
    X < H, 
    T is [X|T]. 

나는 다음과 같은 오류를 얻고있다.

답변

0

오류 메시지는 다소 이상합니다 : '.'/ 2 목록 생성자입니다. 입니다. 구문에 대한 자세한 설명은 this 질문을 참조하십시오.

또한/2 을 산술에만 사용해야하므로 마지막 절이 잘못되었습니다.

하지만 일반적으로 잘못된 '관점'에서 문제에 접근하고 있습니다. 프롤로그의 인수는 불변입니다. 수정 된 목록을 보유하려면 다른 인수가 필요합니다. 여기

은 첫 번째와 세 번째 절에 대한 가능한 해결 방법입니다

insert1(X, [], [X]). 
... 
insert1(X, [H|T], [X,H|T]) :- 
    X < H. 

당신은

?- insert1(3, [1,2,3,4], L). 
+0

CapelliC이, 내가이 작업을 할 두 번째 절을 조정하고 이런 식으로 insert1 호출해야합니다 및 문제가 생기면 다시 연락 드리겠습니다. 도와 주셔서 감사합니다. – Stranger

+0

나는 아직도 이것에 문제가있다 : 여기에 내가 가지고있는 것이있다 : insert1 (X, [], [X]). insert1 (X, [H | T], [H | T]) : - X> H, insert1 (X, T, _T1). insert1 (X, [H | _T], [X, H | T]) : - X Stranger

+0

두 번째 규칙은 H를 복사해야하지만 T가 변경된 다음 다른 Var을 도입하고 재귀 호출로 전달합니다. – CapelliC

관련 문제