2014-04-22 1 views
1

ML에서 프로그래밍을하지는 않았지만 함수 프로그래밍을 공부하고 있습니다. ML은 일반적으로 타입에 대해 정말로 중요 합니다만, 엄격한 타입 제한을 피하기 위해 타입 캐스팅을 할 수 있는지 알고 싶었습니다. ML이 잘못된 유형의 기회를 줄이려고했기 때문에 그렇지 않습니까, 아니면 구현되지 않은 것입니까?ML에서 타이 캐스팅 할 수 있습니까?

+1

ML에 관한 모든 내용은 고의적입니다. :) –

답변

3

"유형 캐스팅"은 많은 다른 것들을 의미 할 수 있습니다. 완전히 다른 사용 사례가 3 가지 이상 있습니다.

  • 특정 유형 (예 : 숫자 유형) 간의 변환. 그것은 각각의 기능을 통해 ML에서 가능합니다. 단지 "캐스트"로 가장하지 않습니다.

  • 앞뒤로 가기 유형에서 앞뒤로 캐스팅 (예 : Object 또는 void*). 이는 표현력이없는 유형의 시스템을 해결하기위한 해킹 일뿐입니다. 다행히 ML에는 적절한 파라 메트릭 다형성과 대수 데이터 유형이 있으므로 일반적으로이를 필요로하지 않습니다.

  • 유형 시스템을 완전히 파괴하면서 저급 수준의 속임수를 사용합니다. 그것은 일반적으로 ML에서 지원되지 않습니다. 안전하고 높은 수준의 언어로 설계 되었기 때문입니다.

특히 어떤 유형의 캐스트에 관심이 있습니까? 그 이유는 무엇입니까?

+0

답변 해 주셔서 감사합니다. 나는 첫번째 탄환 점에 대해서 이야기하고 있었다. 나는 두 번째 총알을 타입 캐스팅이라고 생각하지 못했습니다. 나는 당신이 ML에서 [1, 2, 3]과 같은 것을 가질 수 있다는 것을 보았 기 때문에 흥미 롭습니다. 그러나 ([1, [1, 2], 3) 두 번째 목록의 요소가 같은 유형이 아닙니다. 그래서 저는 [1, 2.0, 3]과 같은 예를 생각했습니다. 기술적으로는 효과가 없지만 캐스트가 쉽게 해결할 수 있습니다. – JustBlossom

+0

@ LearnLanguages96 귀하의 사례는 ML과 구별 할 수 없습니다. 목록의 두 번째 항목이 첫 번째 예제와 다른 유형을 가지고 있기 때문에 실패합니다. 두 번째 항목은'int'입니다. 두 번째 항목은'진짜 '입니다. 그러나 중요한 것은 일치하지 않는다는 것입니다. SML은 표준에서 그런 것들을 허용하기에는 너무 예쁘다. 그러나 [SML/NJ의 Unsafe 구조] (http://www.smlnj.org/doc/SMLofNJ/pages/)와 같이 구현에 따른 캐스트가있다. unsafe.html) 또는 [MLtonStructure in MLton] (http://mlton.org/MLtonStructure)을 참조하십시오. –

+0

@ LearnLanguages96, 귀하의 예는 두 번째 요점입니다. 대개 대수 데이터 형식을 사용합니다. 귀하의 예제는 트리를 설명하기로되어 있다고 가정하므로'datatype 'a tree = L of a'a | B '[L 1, B [L 1, L 2], L 3]'이라고 쓰면된다. 아니면 당신이 진정으로 이기종 목록을 원한다면, 당신은 또한 데이터 형을 사용할 수 있습니다 :'datatype item = N of int | S 문자열 | bool val xs = [N 5, B true, S "boo", N 6]. 다행스럽게도 실제로 후자의 경우는 거의 필요하지 않습니다. –

관련 문제