정수 및 함수를 동시에 포함 할 수있는 변형 (또는 다른 항목)을 사용하여 목록을 정의 할 수 있습니까? 필자는 특히 함수와 일부 다른 유형을 목록에 혼합하는 데 관심이 있습니다.Ocaml의 변형 및 목록
마찬가지로 숫자 또는 함수를 반환 할 수있는 함수를 만들 수 있습니까? 가능한 경우 두 경우의 코드 예제를 제공하십시오.
정수 및 함수를 동시에 포함 할 수있는 변형 (또는 다른 항목)을 사용하여 목록을 정의 할 수 있습니까? 필자는 특히 함수와 일부 다른 유형을 목록에 혼합하는 데 관심이 있습니다.Ocaml의 변형 및 목록
마찬가지로 숫자 또는 함수를 반환 할 수있는 함수를 만들 수 있습니까? 가능한 경우 두 경우의 코드 예제를 제공하십시오.
type my_elt =
| Null
| Int of int
| Fun1 of (int-> unit)
| Fun2 of (int-> int)
let eval a =function
| Fun1 f -> f a;Null
| Fun2 f -> Int (f a)
| _ -> Null
let leval a l = List.map (fun elt -> eval a elt) l
;;
테스트 :
물론let l=[Int 2;Fun1 (Printf.printf "%d");Fun2 ((+)2) ]
# leval 2 l;;
2- : my_elt list = [Null; Null; Int 4]
, 모두 OCaml이 가능합니다.
표현식을 2 개 (또는 다른 유형)의 값으로 평가할 수있게하려면이 모든 유형을 포함하는 새로운 유형을 작성하려는 것입니다. 유형을 집합과 비교할 수 있다는 점을 상기하십시오. 따라서 유형이 t1
및 t2
인 새로운 유형 t
을 정의하려는 경우 합집합이 있어야합니다. 유형이 t1
과 t2
이 서로 다른 속성을 가지고 있기 때문에 나중에 구분할 수있는 능력이 있으므로 당연히 조합을 차별화해야합니다. OCaml의가 있는지, 어떻게 내장 차별 노동 조합에 대한 지원 - 변형, 예를 들어,
type t = T1 of t1 | T2 of t2
이 유형의 정의는 그 종류 t1
및 t2
의 차별 조합이다, 새로운 유형을 작성합니다. 정의는 자연스럽게 투영 및 주입 기능을 생성합니다. t1
유형의 값 x
을 t
유형에 삽입하려면 을 입력하십시오 (t2
의 값 x
에 해당하는 경우 T2 x
을 사용하십시오). 패턴 일치를 사용하여 t
유형의 값 y
을 t1
또는 t2
중 하나 (예 : match y with T1 -> ... | T2 -> ...
)로 투영하십시오.
무슨 일이 일어나고 있는지에 대한 약간의 설명은 분명히 대답을 더욱 도움이 될 것입니다. –