"주어진 제어 흐름 그래프에서 라이브 변수 분석을 계산하는 함수 lv: cfg -> (blabel -> ide set)
을 작성하십시오."OCaml - 함수로 함수를 출력으로 만드는 방법은 무엇입니까?
cfg
및 blabel
을 정의하고 ide set
을 문자열 목록으로 사용하면 어떻게 해당 서명으로 함수를 만들 수 있습니까?
"주어진 제어 흐름 그래프에서 라이브 변수 분석을 계산하는 함수 lv: cfg -> (blabel -> ide set)
을 작성하십시오."OCaml - 함수로 함수를 출력으로 만드는 방법은 무엇입니까?
cfg
및 blabel
을 정의하고 ide set
을 문자열 목록으로 사용하면 어떻게 해당 서명으로 함수를 만들 수 있습니까?
당신은 함수를 정의하기 위해 let
구문 아마 잘 알고 :
let f x = x + 1 in …
당신은 함수 본문에 포함, 어디에서나이 구문을 사용할 수 있습니다. 이제 내부 함수의 이름을 외부 함수의 반환 값으로 사용하면 외부 함수가 함수를 반환합니다.
let outer_function x =
let inner_function y = x + y in
inner_function
let
구문은 fun
또는 function
에 대한 사실 문법 설탕입니다. 특히, 한 번만 이름을 사용하기 위해 inner_function
을 정의하면 fun
표기법을 사용하고 내부 함수에 이름을 부여하지 않아도됩니다.
let outer_function x =
fun y -> x + y
또한, 당신이 인수하면 그 함수에게 두 개의 인수를 통과 할 때 다음 동작을 고려, 구축 및 내부 기능을 반환하는 것입니다 통과 할 때 모든 외부 함수가있는 경우. 먼저 외부 함수는 첫 번째 (그리고 유일한) 인수를 사용하여 내부 함수를 만듭니다. 그 내부 함수가 두 번째 인수에 적용되어 본문이 실행됩니다. 이것은 두 개의 인수를 취하는 함수가 하나만있는 것과 같습니다. 이 관찰은 currying으로 알려져 있습니다.
let outer_function x y = x + y
이 함수의 유형은 int -> int -> int
입니다. 이것은 int -> (int -> int)
과 동일한 유형입니다 (화살표 유형 연산자는 오른쪽 연관입니다).
외부 함수가 내부 함수를 작성하기 전에 일부 기능을 수행 할 때 currying이 적용되지 않습니다. 이 경우 작업은 첫 번째 인수를받은 후에 수행됩니다. 그 서명 또는 서명과 기술 의미와 기능
가let lv (c : cfg) : blabel -> ide set =
let c' = do_some_precomputation c in
fun (bl : blabel) -> (… : ide set)
완벽한, 감사합니다 :) – genesisxyz
그냥 기능 :
그래서 코드의 구조는 다음과 같을 것입니까? 왜냐하면 전자는 쉽기 때문입니다.'let f (x : cfg) (y : blabel) : ide set = []' – sepp2k
서명이있는 함수 ... 작성한 함수의 서명이 다릅니다 : cfg -> blabel -> ide set ('(' ')'없이) – genesisxyz
@genesisxyz 정확히 동일한 유형입니다. '->'는 우연히 연관되어 있습니다. OCaml 최상위 레벨은'foo -> (bar -> baz) '타입을 가진 함수를 결코 보여주지 않을 것입니다. 왜냐하면 괄호는 중복되고, 인쇄 타입에서는 최상위 레벨이 여분의 괄호를 남기므로 말입니다. – sepp2k