2016-07-26 3 views
0

SWI-prolog를 처음 사용하며 코드에 문제가 있습니다. 나는 그것이 입력이 5의 배수이고 짝수가 아닌지를 결정하기를 원하지만, 정수가 아니면 에러 메시지를 출력해야한다. 지금까지 이걸 가지고 있지만 오류 메시지가 출력되지 않고 대신 형식 오류라고 나와 있습니다.Prolog : 부동 소수점이 입력되면 출력이 오류를 인쇄합니다.

?-Multof5(4.7) 
Singleton variables: [N] 
mod/2: Type error: `integer' expected, found `4.2' (a float) 

내가이 문제를 해결하기 위해 무엇을 할 수 있는지 내가 잘못거야 곳 알려주세요 : 내가 입력 할 때

MultOf5(N) :- 
0 is N mod 5, \+ 0 is N mod 2. 
MultOf5(Other) :- 
N is Other, 
print("ERROR: The given parameter is not an integer"). 

그것은이를 인쇄합니다. 나는 싱글 톤 변수도 가지고 있다고 말하고있다. 감사. 게시 된 코드에서

답변

2

언급 한 문제 : 프롤로그에서

  • 는 술어는 대문자로 시작할 수 없습니다. 따라서 MultOf5(N) ...은 유효하지 않습니다. 메시지에서 당신은 인 것으로 판단하고, 당신의 코드가 실제로 어떻게 쓰여졌는지는 짐작합니다.
  • multOf5(Other) ...은 한 번만 N을 나타냅니다. 그렇지 않은 경우 을 사용합니다. 이것이 싱글 톤 경고를 생성합니다.
  • mod은 정수에서 작동하며 첫 번째 절은 4.2 값으로 mod을 시도합니다.이 값은 실패합니다. N이 정수인 경우 integer(N)을 사용할 수 있습니다.

음수는 \+ 0 is N mod 2보다 긍정적 인 1 is N mod 2을 선호합니다.

oddMultOf5(N) :- 
    ( integer(N) 
    -> 0 is N mod 5, 
     1 is N mod 2 
    ; print("ERROR: The given parameter is not an integer") 
    ). 
+0

예 죄송합니다. 코드를 약간 변경 했으므로 필자는이 점을 이해할 수 있습니다. 감사! 그것은 훨씬 더 의미가 있습니다. – tadashi

+0

오류를 인쇄 한 후 코드를 잘라내는 방법이 있습니까? 내가 추가! ; (또는) 앞에 있지만 오류는 나에게 알려줍니다. – tadashi

+0

@tadashi 당신은'print' 명령으로 커팅을 원할 것입니다. 'print (...),! '로 쓸 수 있습니다. 'print'에는 선택 점이 없기 때문에'!, print (...)'앞에 넣을 수 있습니다. – lurker

관련 문제