나는 현재 Scalaz non-blocking future aka로 놀고있다. 약속 해. p
유형 I=>Boolean
와 f
와 술어이다꼬리 재귀와 스카 이즈 약속
@tailrec
private def repeat(res: Promise[I]):Promise[I] =
res map p flatMap {
(b:Boolean) =>
if(b) repeat(res flatMap f) else res
}
이 유형 I=>Promise[I]
와 동시 기능입니다 : 나는 다음과 같은 기능이 꼬리 재귀 만들기 위해 고군분투하고있다.
이 메서드는 주석없이 컴파일됩니다.
힌트가 있습니까? 감사합니다
답장을 보내 주셔서 감사합니다. 하지만 차단하지 않고 해결할 수있는 방법에 대한 아이디어가 있습니까? – paradigmatic
미안하지만 스 카즈에 익숙하지 않습니다. 방금 코드에서'p' 호출이 무엇인지, 실패했는지 알아 내려고했습니다. while 루프를 사용하는 코드의 절차 버전을 생각해 볼 수 있습니까? 이것이 가능하지 않으면 tco가있을 수 없습니다. – ziggystar
"컬렉션에있는 각 요소에 대해 하나씩. 적어도 컴파일러에서 보는 것입니다." IMHO :'Promise'는 콜렉션이 아니며 컴파일러는 하나의 호출 만 보입니다 (꼬리 위치가 아님). 그러나 두 번째 단락은 이것이 꼬리 재귀가 아닌 이유를 설명하기에 정확하고 충분합니다. –