2016-11-22 1 views
0

입력 목록이 비어있을 때 내 프로그램이 멈추지 않는 이유는 없습니다. 사실 그 사건을 처리 할 수있는 사실이 있습니다. 여기에 내 코드입니다 :이 같은 문자의 목록을 가지고내 목록이 비어있을 때 내 프롤로그 프로그램이 중지되지 않습니다.

build_vps([], []). 
    build_vps([X | Ys], Zs):- 
      atom_number(X, C), 
      number(C), 
      build_vps(Ys, Zs). 
    build_vps([X, Y, Z | Ys], Zs):- 
      Y = '^', 
      atom_number(Z, C), 
      number(C), 
      build_vps(Ys, [v(C, X) | Zs]). 
    build_vps([X, Y, Z | Ys], [v(1, X)| Zs]):- 
      Y \= '^', 
      build_vps([Y, Z | Ys], Zs). 

[X, ^, '3] 나는이 V 같은 구조로 그 문자를 넣어한다 (3 배). 이 build_vps ([x, y, ^, '3'], R)와 같이 호출합니다. 무엇을 얻으려는 것이 R = [v (1, x), v (3, y)]입니다.

+1

최상위 레벨에서 이것을 어떻게 표시 할 수 있습니까? 그리고 당신이 얻으려고하는 것에 대한 어떤 설명이 있을까요? –

+1

첫 번째 인수에리스트가있는 재귀 적 술어를 작성할 때'foo ([] ...) .'와'foo ([H | T], ..)라는 두 개의 절을 가질 수있을만큼 열심히 시도하십시오. .) : - ..., foo (T, ...).'. –

+1

답변을 편집하고 ** 정확하게 ** 파일을로드하는 방법, 쿼리를 수행하는 방법 및 결과를 표시해야합니다. 지금 당장은'? - build_vps ([x, y, ^, 3], R) .' ('^'뒤에 쉼표를 추가해야만합니다.)라는 오류 메시지가 나에게'ERROR : atom_number/2 : Type error : '원자'예상, '3'(정수)'발견. 그래서 나는 당신이 내게 주신 것에 오류를 재현 할 수 없습니다. –

답변

0

중지합니다. 그것은 어떤 규칙과도 일치 할 수 없기 때문에 단지 False라고 말합니다.

Yes, I know that but I don't get why. If u trace it, you'll see it keeps going when it reaches 0 elements in the first list.

그것은, 당신이보고있는 것은 당신이 당신이이 프로그램을 원하는에 대한 충분한 정보를 제공하지 않았다, 지금

build_vps(Ys, [v(C, X) | Zs]). 

에 대한 호출하지 않지만, 나는 추측하고 당신이 한 번 [y, ^, '3']이 있으면 세 번째 규칙과 일치하게됩니다. build_vps(Ys, [v(C, X) | Zs]).

당신은 시도하여 확인할 수 있습니다 :이 경우

는 프로그램이 실패하는 이유는이 일치하지 않을 수 있다는 것입니다 build_vps([], [v(3, y) | Zs]).이 쉽게 세 번째 규칙을 다시 작성하여 해결할 수 있습니다

이 :

build_vps([], []). 

build_vps([X | Ys], Zs):- 
     atom_number(X, C), 
     number(C), 
     build_vps(Ys, Zs). 

/* 
* This rule has been modified 
*/ 
build_vps([X, Y, Z | Ys], [v(C, X) | Zs]):- 
     Y = '^', 
     atom_number(Z, C), 
     number(C), 
     build_vps(Ys, Zs). 

build_vps([X, Y, Z | Ys], [v(1, X)| Zs]):- 
     Y \= '^', 
     build_vps([Y, Z | Ys], Zs). 
+0

네가 고마워, 그건 내 바보 같았다. 이제 작동합니다. 목록에 요소가 2 개 밖에 없을 때 프로그램이 작동하지 않기 때문에 새 규칙을 추가해야했습니다. 감사!! –

관련 문제