2013-03-28 7 views
-1

피보나치 시퀀스와 관련된 Io 문제를 해결하기 위해 노력하고 있습니다. 숫자가 피보나치 수인지 아닌지 테스트하는 메서드를 만들려고합니다. 내 IsAFib 메서드가 작동하지 않는 이유를 알아낼 수 없습니다. 왜 그 문제를 해결할 수 있습니까? 나는 프로그래밍에 익숙하지 않고 프로그래밍에 익숙하지 않기 때문에 변화하는 사유를 설명 할 수 있다면 정말 고맙겠습니다! 나는 무엇이 다른 것으로 써야 하는지를 알고 싶다.Io 언어 피보나치 문제

  OperatorTable addOperator("xor", 11) 
      true xor := method(bool, if(bool, false, true)) 
      false xor := method(bool, if(bool, true, false)) 

      doFile("isASquare.io"); 

그런 다음 isASquare.io 파일 :

  isASquare := method(n,      
        for(i, 1, n, 
         if(i * i == n, return true) 
         if(i * i > n, return false) 
        ) 
      ) 

      isAFib := method(n, 
        if(isASquare(2 ** 5 * n) xor isASquare(2 ** n * 5 - 4), return true, return false) 
      ) 
+0

[위키 백과] (http://en.wikipedia.org/)에 따르면 'isASquare (2 ** n * 5 + 4) xor isASquare (2 ** n * 5 - 4) wiki/Fibonacci_number # Recognizing_Fibonacci_numbers)? – Bergi

+0

@Bergi 나는 그것이 다음 단계의 방법에서 사용할 수 있도록 true 또는 false로 돌아가고 싶다고 생각합니다. xor가 수익과 같은 것까지도 사용할 수 있습니까? – user2220574

답변

2

그래서이 모든 이제 다음 온다 문제입니다. 동적 연산자가 작동하는 방식은 VM이 소스 파일을로드 할 때 어떤 파일을 평가하기 전에 연산자를 둘러싼 규칙을 적용하는 것입니다. 최초 실행시, io는 내장 연산자에 대해서만 알고 있습니다. 이 메시지의 재정렬이 완료되면, 우리는 먼저이 줄을 즉 파일의 코드를 평가하기 시작합니다 : 그것은 어떤 영향을 미칠하는

이 코드가 실행되는 시간으로
OperatorTable addOperator("xor", 11) 

는, 너무 늦기 이 파일에.

커뮤니티 사이의 일반적인 합의는 모든 작업자를 먼저로드하는 파일에 넣고 해당 파일의 끝에 doFile()을 갖거나 비슷하게 기본 파일을로드하도록 설정하는 것입니다.

엉덩이에 약간의 고통이 있지만, Io에서는 전통적인 컴파일 시간이 없습니다.

+0

두 파일로 분리하고 doFile()을 추가했지만 숫자 9 등의 메서드를 실행하려고하면 예기치 않은 토큰'9 '근처에서 구문 오류가 발생합니다. – user2220574

+0

게시해야합니다. 그때 전체 코드. – jer

+0

좋아, 나는 전체 코드로 원래 게시물을 편집했습니다. – user2220574