2016-06-09 2 views
3

나는 조금을 찾고 아무것도 찾을 수 없습니다. 저는 OCaml chess program을 F #으로 번역 중입니다. 둘 다 체스 표현이 어떻게 작동하는지 이해하고 내재화하는 도구로서, O #가 아닌 일을 수행하는 F #의 방법입니다. 코드의OCaml의 set_signal이 F에 해당합니다 #

이 조각 나에게

set_signal sigint (Signal_handle (fun _ -> raise Interrupt)); 

set_signal sigint Signal_ignore; 

인터럽트

를 유세하는 것은 이전에 정의 된 예외입니다. 이제 set_signal ( here)이 무엇인지 찾아 보았습니다. 그러나 정확히 여기 목적이 무엇인지, 또는 어떻게 sigint이 정의되어 있는지 정확히 알 수 없습니다. 어떻게 F #에서이 동작을 복제하거나 모방 할 수 있습니까?

컨텍스트에서보고 싶다면 OCaml 소스의 532 행에 있습니다. 문제의 방법입니다.

let alpha_beta_deepening pos interval = 
    del_timer(); 
    let current_best = ref (alpha_beta_search pos 2) in (* alpha_beta_seach _ 2 can only return legal moves *) 
    ((try 
     set_signal sigint (Signal_handle (fun _ -> raise Interrupt)); 
     set_timer interval; 
     let rec loop i = 
      if i > max_depth then() else 
      let tmp = alpha_beta_search pos i in 
      current_best := tmp; 
      if (fst tmp) >= win (* we can checkmate *) 
      || (fst tmp) <= -win (* we get checkmated anyway, deny the opponent extra time to think *) 
       then() else loop (i+1) 
     in loop 3; 
     set_signal sigint Signal_ignore; 
     del_timer(); 
    with Interrupt ->()); 
    set_signal sigint Signal_ignore; 
    del_timer(); 
    !current_best) 
+0

(모두를 OCaml과 F # 코드를 보면), this 볼 수 있었다. 포트의 경우 동일한 문제에 대해 덜 구체적인 해결책을 제시해야합니다. 자신이 아래에서 언급했듯이 Winboard는 또 다른 접근 방식을 사용합니다. 또한 xboard 프로토콜과 UCI를 비교하면 UCI에서 UI가 가정하고있는 것처럼 명령 처리가 엔진 검색과 병행하여 실행됩니다. UCI 엔진은 일반적으로 일부 (변경 가능하고 불쾌한) 플래그를 검사하여 검색에서 벗어나야하는지 확인합니다. 여기에서도 똑같이 할 수 있습니다. – BitTickler

답변

4

네임 스페이스에 대한 나쁜 점은 어디에서 왔는지 알기가 어렵습니다.

그래서, 시작, sigintSys 모듈에 정의되어 있습니다 : 그래서

val sigint : int 

    Interactive interrupt (ctrl-C) 

,

set_signal sigint (Signal_handle (fun _ -> raise Interrupt)); 

set_signal sigint Signal_ignore; 

무엇을합니까?

그들은 단지 그것이 ctrl-C을 잡는다 때, 첫 번째 경우에이 Interrupt를 제기하고 두 번째 경우에 아무것도 할 것이라는 시스템 ( set_signal 그가 특정 신호에 있어야한다 어떤 행동 시스템에 통신)에게 말

.

이제는 그 의미를 더 잘 이해하게되었으므로 F #에서 구현하기가 쉽습니다. ;-)

당신은 예를 들어 신호 물건이 Unixism입니다

+0

링크를 제공해 주셔서 감사합니다. 사실 Xboard (앱이 상호 작용하는 GUI 소프트웨어)에 대한 문서를 조회하고 엔진이 즉시 이동하도록 강제하기 위해 이러한 취소 신호를 사용합니다. 그러나 명백하게 Winboard (Win32 포트)에는 이들이 없기 때문에 전혀 신경 쓰지 않아도됩니다. – asibahi