@popovitsj는 좋은 성향을 가지고 있습니다.
SML은 패턴 일치를 사용하여 사용할 기능 정의의 버전을 결정합니다.
fun sqrt x s = if ((s*s) <= x) then s | sqrt x s = if (s*s) > x then sqrt x (s - 1);
비 결정적이며, SML은 시도하는 것이 실패한 경우 (즉, Prolog와 같은) 다른 정의를 역 추적하고 시도 할 시설을 가지고 있지 않습니다.
이 시나리오에서는 만 사용할 수 있습니다
fun sqrt x s = if s * s <= x then s else sqrt x (s-1);
이 기능은 원래 통과 할 때 IF 표현식에 실패하는 값을 전달하는 경우에만 논리적으로 유효합니다.
나는 이것을 테스트하지 않았지만 도움이 될 것이라고 믿는다.