운영자 정의에서 exp
은 반드시 기능 일 필요는 없습니다. 연산자를 정의한 방법은 exp
입니다. 예를 들어, 당신이 할 수 있습니다 :
[0..1] ->>> 42
이 실행도 컴파일 할 함수가되도록 exp
매개 변수를 필요로 운영자의 정의에 아무것도 없기 때문입니다. 또는 그 문제에 대한 다른 것.
exp
을 반복 본문 내에서 반복하여 평가하려면 함수로 만들고 루프 본문에서 호출해야합니다. 요구 사항이 없으므로 가장 간단한 방법은 unit -> 'a
입니다. 그들은 이렇게 표현 exp()
기능을 입력 unit
의 값을 의미 - 괄호 exp
후
let (->>>) lst exp = for i in lst do exp()
공지 사항 : 당신은 정말 당신이 그것의 사용에서 추론 컴파일러를 가질 수 있습니다,하지만 유형을 선언 할 필요가 없습니다 응용 프로그램 (예 : 기능 exp
값 ()
에 적용).
printf "hi"
은 기능이 아니기 때문에이 정의를 사용하면 [1..5] ->>> printf "hi"
을 쓸 수 없습니다. 따라서 대신 다음을 작성해야합니다.
[1..5] ->>> (fun() -> printf "hi")
이제 5 개의 "hi"가 인쇄됩니다.
이것은 for .. do
구문이 실제로 언어의 특수한 부분이며 표준 라이브러리에 정의 된 "다른 기능"이 아니기 때문입니다. 똑똑한 함수 나 연산자 정의로는 실제로 같은 효과를 낼 수 없습니다.
함수 및 연산자보다 복잡한 구문을 작성하려면 computation expressions을 확인하십시오.
대단히 감사합니다. 이 답변은 잘 부탁드립니다. – ozgur
좀더 현실적인 해결책은 람다가 요소를 받기 위해서입니다 :'... do exp i'. 이것은'printf "hi % d"'를 사용하는 것을 가능하게하고,'fun i ->'랩 어라운드가 필요하지 않습니다. – bytebuster
그건 OP가 시도한 것이 아닙니다. –