2009-11-01 4 views
3

개발 프로세스가 매우 대화식 인 선택 (선택 선택, 수정, 선택, 실행 선택, 수정 등)이있는 Matlab 및 R 백그라운드에서 나오는 F #이이 스타일을 처리하는 방법을 파악하려고합니다. 과학 응용에서 매우 중요한 것처럼 보이는 개발의 다음은 F #을 처음 접하는 누군가에게 즉시 들러 오는 몇 가지 사항입니다.F # 대화식 개발

  1. 여러 줄을 선택하면 한 번에 한 줄씩 다른 결과가 나타납니다. int -> int -> int 첫 줄 결과를 선택하는 반면

    let add x y = x + y 
    add 4.1 2.3 
    

    float -> float -> float 양쪽 라인의 결과를 선택하는 단계를 포함한다. 더 일반적으로, matlab/R 사용자는 각 명령문이 끝난 후에 결과를 출력하는 데 사용됩니다.

  2. 그림자 복사가 부담이 될 수 있습니다.

    이 대화식으로 반복해서 실행하면 2GB 파일이 섀도 복사되므로 메모리가 부족해질 수 있습니다. 파일을 변경할 수있게 만드는 것은 프로그램의 마지막 실행이 절대로 변경하지 않기 때문에 적절한 해결책처럼 보이지 않습니다. 이러한 문제를 감안할 때

, 그것은 fsi.exe 기반 시스템은 MATLAB/R 스타일의 대화 형 개발을 지원하는 것은 불가능하다?

[편집 : 나는 약 2 마 개체는 즉시이 그림자대로 삭제 표시 얻을 추측 오전] FSI에서 # 1

으로

답변

4

F #이 일반적인 목적의 프로그래밍 언어이기 때문에 F #이 Matlab/R의 드롭 인 대체물이라고 기대하지 않습니다. 특정 유형의 작업에 필요한 모든 것이 표준 라이브러리에있는 것은 아닙니다. 그러나 이것이 당신이 설명하는 "대화 형 개발"이 불가능하다는 것을 의미하지는 않습니다. 당신이 의존하는 라이브러리 기능을 구축하기 위해 약간의 노력이 필요합니다.

# 1의 경우 앞에서 설명한 것처럼 형식 주석을 추가하는 것이 불행하게도 필요하지만 inline 키워드와 "hat-types"도 give you duck-typing이 될 수 있습니다.

# 2의 경우 사용자가 원하는 기능 대 openprocess 기능에 대해 명확하지 않습니다.예를 들어, open 기능은 할 수 : 당신이 전화하는거야 파일

  • 돌려 FileStream 객체를

    • 는 한 번에 전체 파일을 읽기 등 배열/목록 /로 데이터를 반환 한 다음 닫습니다 process에 있지만 닫는 것을 잊지 마세요. 시퀀스 표현하면 게으르게 파일 내용을 반복 할 수 있습니다
    • 돌아
    • Memoize 위 중 하나의 결과 후속 호출은 캐시 된 결과 추상화를 만들 수있는 gazillion 다른 방법의
    • 하나를 반환 할 수 있도록 오버 파일 액세스.

    일부는 다른 것보다 작업에 더 적합합니다. Matlab & R과 비교하여 F #과 같은 범용 언어를 사용하면 더 많은 방법으로 발을 쏠 수 있습니다. 그러나 그것은 당신에게 모든 것을 할 수있는 더 많은 방법을 제공하기 때문입니다.

  • +0

    나는 Matlab/R 스타일을 열었습니다. 말하자면, csv 파일을 열어 큰 배열/행렬에 넣습니다. 내 걱정은 그 다음에 대화 형 개발 스타일에서 발생하는 코드를 다시 선택하여 실행하면 두 개의 큰 행렬이 생기고 그 중 하나는 섀도 복사 된 것입니다. 나 맞아? – Tristan

    +0

    @Tristan : .Net 가비지 수집은 참조 할 때 여분의 "쉐도우 복사본"을 제거해야합니다. 원래 게시물은 당신이 시도한 것처럼 들리며 문제였습니다. 이제는 이것이 문제가 될 것이라고 생각하는 것 같습니다. 그거 정리 해줄 수 있니? –

    +0

    @ 존 : 네, 추측하고 있습니다. 나는 "let = x 1 ;; x = 2 ;;''는 범위를 벗어나는'x '와 같습니다. ''let x = 2''를 수행하자마자 x = 1 객체는 삭제 표시가됩니까? 크리스 스미스 (Chris Smith)의 책에서는 이것을 섀도 잉 (shadowing)이라고 부른다. – Tristan

    1

    , 당신은에 ;;을 입력해야합니다 각 문장의 끝과 직접 결과를 얻을 : 일반적으로 F # -Codefile 당신이 전화에 값을 생성하는 일련의 단계로 대화하지 평가가 개별 함수의 집합으로 볼 수 있어야

    > 1 + 2;; 
    val it : int = 3 
    

    표시됩니다. # 2

    :

    이 코드 자체의 문제가 될 것으로 보인다

    : file에게 기능을 확인, 그래서 읽기/복사 만 완료되면 정말 (필요한 경우 그렇지 않으면하자가 평가 될 것이다 바인딩 처음).

    +0

    문제는 이것이 형식 추론을 변경한다는 것입니다. – Tristan

    +1

    그런 다음 피할 수없는 곳에 명시 적으로 유추 해주십시오. – Dario

    +0

    이것은 F # 유형 시스템의 결함입니다. 대화 형 Haskell (GHCi)에서는 타입 시스템이 typeclasses를 사용하여 그러한 함수를 일반화 할 수 있기 때문에 훨씬 더 좋습니다. – Dario