문제

Edison API 및 Core 모듈은 Haskell 구현입니다. 순전히 기능적인 데이터 구조

F# 및 기본 .NET 데이터 구조가 Edison API 및 Core의 사용 사례를 충분히 포괄합니까?

API 및 Core Haskell 모듈을 F#로 포트하려는 이점이 있습니까?

도움이 되었습니까?

해결책

나는 읽지 않았다 에디슨의 논문, 그러나 순수한 기능적 데이터 구조의 Haskell 구현에 지나지 않는다면 SML 코드를 포트하는 것이 더 합리적이지 않습니다. 안에 책 / 논문? Haskell 코드를 포팅하는 것이 더 쉬워야합니다. Haskell 코드는 엄격함을 위해 주석을 달아야하며 F#에는 게으름을 위해 주석을 달아야합니다.

이 책에서 사용하는 언어는 게으른 평가를위한 구문 확장 기능이있는 SML입니다. F#는 기본적으로 확장의 절반을 제공합니다.

> let x = lazy 12;;
val x : Lazy<int> = <unevaluated>
> match x with
  | Lazy(n) -> n;;
val it : int = 12
> x;;
val it : Lazy<int> = 12

책을 전환합니다 fun lazy 표기법, 이것을 변경하십시오.

fun lazy plus ($m, $n) = $m + n

이에:

let plus (m',n') = lazy (
  match (m',n') with
  | (Lazy(m), Lazy(n)) -> (lazy (m + n)).Force())

(책의 33 페이지 참조). SML과 F#의 차이는 작은 구문이므로 번역은 쉬워야합니다.

가치가 있는지 여부에 관해서는, 오카사키의 책에있는 대부분의 데이터 구조는 매우 전문화되어 있으므로 f#의 불변 세트 및 맵처럼 이미 .net에 존재하지 않을 것입니다. 이러한 데이터 구조가 필요한 사람들에게는 가치가 있습니다.

다른 팁

이 질문을 몇 달 후에 다시 방문하면서 나는 그것을 주목한다

http://lepensemoi.free.fr/index.php/tag/purely-functional-data-structures

누군가가 그 블로그에서 많은 것을 구현했습니다.

나는 링크를 따르지 않았지만 적어도 작품이나 오카사키에 대해 친숙한 것이 있습니다. 따라서이 전체 대답은 매우 투기 적입니다 (Edison API의 내용에 대한 내 가정에서 벗어날 수 있습니다).

'새로운 언어'에서 '공통 FP 데이터 구조의 참조 구현'을 좋아하는 사람들이 새로운 언어를 배우는 데 도움이된다는 점에서 '일부 이점'이있을 것으로 기대합니다.

실제로 사용되는 (교육학이 아닌) 사용에 관해서는, 일부는 유용 할 것으로 예상하지만, 많은 시나리오에 유용하거나 유용 할 수있는 F# 및 .NET API가 있지만. 겹치는 기능의 주요 부부 '배치'는 F# 불변 컬렉션 (세트 및 맵)과 .NET 4.0입니다. 동시 컬렉션 (동시 queue와 같이).

물론 Jomo 's와 같은 웹에서 스 니펫도 찾을 수 있습니다. 불변의 대기열.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top