문제

필터를 이용하여 얻으로 F#에는 하지만 난 계속 있습니다.왜?

기 때문에 상관 없이는'초보자'자원 내가 살펴보십시오 나는 아주 간단한 예제는 시작을 사용하여 운영자 ->.

그러나,아무데도 나는 발견으로 아직 제공하는 명확한 간단한 설명은 이 연산자를 의미한다.그것이 있어야 하지만 그렇게 분명하지 않는다는 설명이 필요 심지어는 완료하는 초보자.

내가 해야 합니다 따라서 정말 밀도 또는 아마도 그것은 약 3 년의 경험을 잡고 있습니다.

기에서 동시에 사용할 수 있습,그것을 설명 또는 지점을 진정으로 액세스할 수 있는 자원을 설명하지?

도움이 되었습니까?

해결책

'->'은 연산자입니다.에 나타나 F#구문에 장소의 숫자,그리고 그 의미를 따라 달라집에 사용되는 방법의 일환으로 더 큰 생성.

내부형'->'에 대해 설명합 기능 유형으로 사람들은 위에서 설명한입니다.예를 들어

let f : int -> int = ...

는'f'하는 함수 int int 를 반환합니다.

내부에는 람다("일을 시작으로'재미있는'키워드"),'->'구문을 분리하는 인수합니다.예를 들어

fun x y -> x + y + 1

은 표현을 정의하는 두 개의 인수 기능을 가진 주어진 구현합니다.

내부"일치"를 건설,'->'구문을 분리하는 패턴 코드에서 실행해야 하는 경우 패턴이 일치합니다.예를 들어,

match someList with
| [] -> 0
| h::t -> 1

물건의 왼쪽에 각각'->'는 패턴 및 물건의 오른쪽에서 일어나는 것인 경우 패턴에 왼쪽에 있었던 일치합니다.

의 이해에 어려움이 될 수 있는 뿌리에서 결함이 있는 가정'->'은"운영자"하나의 의미이다.비유이 될 수 있습니다"."C#에서,당신이 본 적이없는 경우에는 모든 코드기 전에,그리고 분석하는"."운영자에 따라 보고"obj.방법"및"3.14"과"시스템입니다.컬렉션",당신이 얻을 수 있습니다 매우 혼란 때문에,기호가 다른 의미합니다.일단 당신이 충분히 알고의 언어를 인식하는 이러한 맥락,그러나,일이 취소 될 수 있습니다.

다른 팁

그것은 기본적으로한다는 것을 의미"맵".그것을 읽는 방식으로 또는"로 변"또는 이와 같습니다.

그래서, F#에서 20 분 튜토리얼

> List.map (fun x -> x % 2 = 0) [1 .. 10];;
val it : bool list
= [false; true; false; true; false; true; false; true; false; true]

코드(미 i->난%2=0)정의 익명의 기능이라고 하는 람다 식 있는 매개변수 및 x 기능의 결과를 반환합니다"x %2=0",는지 여부 x 니다.

첫 번째 질문은 당신이 익숙한 람다 식 C#?록하는 경우->in F#과 같=>에서는 C#(나는 당신이 그것을 읽고'갑').

The->연산자를 찾을 수 있습의 컨텍스트에서는 패턴 매칭

match x with
| 1 -> dosomething
| _ -> dosomethingelse

나는 확실하지 않으면 이것은 또한 람다 식,또는 다른 것이지만,나는'갑'여전히 보유하고 있습니다.

어쩌면 당신이 무엇을 말하는 F#파서의'비밀'응답:

> let add a b = a + b
val add: int -> int -> int

이미(으로 대부분의 예로 설명)에 추가'val'는 두 개의 수를 반환합니다 int.나이 완전히 불투명하다.내 말은 어떻게 알 수 있는 추가하지 않 val 는 한 int 반환한 두 개의 정?

잘한 것은 의미에서,그것은 않습니다.제가 만약에 추가 단지 하나의 int,내가 다시 얻으(int->int):

> let inc = add 1
val inc: int -> int

이(커링)은 것 중의 하나 만드는 F#도 섹시한다.

에 대한 유용한 정보 F#,내가 찾는 블로그는 훨씬 더 유용한 그의 공식'문서':여기에 몇 가지 이름을 체크 아웃

(a>b)의 의미는"기능을".에서 형식 주석,그것을 나타내는 함수 입력.예를 들어,f:(int->문자열)는 것을 의미 f 말하는 기능은 정수 문자열을 반환합니다.그것은 또한 사용으로 contstructor 의 값으로서

val f : (int -> int) = fun n -> n * 2

를 창조하는 가치는 기능에서는 일부 수 n 하는 같은 수의 곱하여 두.

의 많은 훌륭한 답변이 이미 여기에,나는 그냥을 추가 할 대화의 또 다른 방법이 이 문제에 대해서 고민했습니다.

'->'의 기능입니다.

을'->'b 함수는'가 반환하는'b

('a*b)->('c*d)함수는 튜플 유형의('a'b)및/td>('c,d).등 int/문자열을 반환합 부동/char.

그것은 재미있은에 캐스케이드의 경우'a->'b>c.이 함수는'가 반환하는 함수('b->'c),또는 함수는'b>c.

그래서 만약 당신이 쓰:let f x y z=()

유형 될 것입니다 f:을'->'b->'c->장치,그래서 그는 경우에만 적용되는 첫 번째 매개 변수 결과가 될 것이 카레 기능'b->'c->'유닛이다.

Microsoft:

기능 유형 유형은 주어 첫 번째 클래스 기능을 가 쓰 int->int.그들은 유사한 니다.NET 대리인 종류를 제외하고,그들은 지 않은 주어진 이름입니다.모든 F# 식별자를 사용할 수 있습으로 첫 번째 클래스 기능 값,그리고 익명 기능 값을 사용하여 만들 수 있습니다 의(재미있는...->...)식 형태입니다.

많은 훌륭한 대답을 이 질문,덕분에 사람들이다.고 싶은 여기에 넣 편집 가능한 대답을 제공하는 것을 함께합니다.

에 익숙한 사람들을 위해 C#이해->되는 것과 같=>lamba 표현은 좋은 첫 번째 단계입니다.이용가:-

fun x y -> x + y + 1

이해할 수 있으로 동등하다:-

(x, y) => x + y + 1;

그러나 그 명->더 fundemental 의미에서 유래하는 개념이 기능하는 두 개의 매개 변수는 예 위와 같이 감소할 수 있(는 정확한 용어?) 하는 일련의 기능을 복용 하나의 매개 변수입니다.

따라서 위에서 설명한 다음과 같다:-

Int -> Int -> Int

그것이 정말로 도움을 알->은 바로 연관 따라서 위에 고려 될 수있다:-

Int -> (Int -> Int)

Aha!우리가 사용하는 함수 Int 및 반환(Int->Int)(a 변환 기능이?).

The explaination 는->으로 표시될 수 있습니의 일부 유형 definiton 도 도움을 주었다.(Int->Int)의 유형은 어떤 의 기능 Int Int 를 반환합니다.

또한 도입->에 나타나 다른 구문과 같은 일치하는지만 거기에 있지 않는 동일한 의미가 있는가?는 것입니다.나는 그것이 확실하지 않습니다.그것은 동일한 의미하지만 없어요 어휘를 익스프레스는 아직이다.

참고 목적으로의 이 대답은지를 생성한 답변 그러나 공동으로 편집하여 당신을 만드는 사람들을 더 확실한 대답합니다.Utlimately 좋은 것은 모든 uncertainies 및 fluf(과 같은 이 단락)를 제거하고 더 나은 예로 추가됩니다.할 수 있도 이 대답으로 액세스할 수 있는 독으로 가능합니다.

의 맥락에서 정의 기능,그것은 유사한 => 에서는 람다 식 C#3.0.

F#: let f = fun x -> x*x
C#: Func<int, int> f = x => x * x;

-> F#에서도 사용 패턴 일치하는 곳에,그 의미합니다:면 표현과 일치하는 부분 사 |->, 다음으면 어떻게 되는지 -> 는 결과가:

let isOne x = match x with
 | 1 -> true
 | _ -> false

에 대 한 좋은 것은 언어와 같은켈(그것은 매우 비슷하 F#,모르겠지만 정확한 구문을--이해 이해하는 데 도움이 됩->,하지만)이 적용할 수 있는 유일의 부분 인수를 만들기 카레 기능:

adder n x y = n + x + y

다른 말로:"나에게는 세 가지고 나는 그들을 추가한다."When you throw 숫자에 그것을 컴파일러는 것을 추론의 유형 n x 및 y.말 당신이 쓰

adder 1 2 3

유형 1,2 및 3Int.따라서:

adder :: Int -> Int -> Int -> Int

는가,내게 세 개의 정수,그리고 내가 될 것입니다 정수,결국,또는 동일한 것으로 말하기:

five :: Int
five = 5

하지만,여기에 좋은 부분!이것을 보십시오:

add5 = adder 5

으로,당신이 기억하기 int,int,int,그리고 당신 뒤 int.그러나지 않는 전체 진리로,당신이 볼 수니다.사실,add5 있을 것입니다 이 유형:

add5 :: Int -> Int -> Int

되는 경우 당신은"벗"의 정수(맨 왼쪽),그리고 붙어는 그것을 직접하는 기능입니다.자세히 보면에서 함수 서명은,우리는 것을 알->은 오른쪽 결합,즉:

addder :: Int -> (Int -> (Int -> Int))

이들에게 아주 분명:을 줄 때 가산 첫 번째 정수,그것을 평가하여 최상의 오른쪽에 첫 번째는 화살표 또는:

add5andtwomore :: Int -> (Int -> Int)
add5andtwomore = adder 5

이제 사용할 수 있습니다 add5andtwomore 대신에"가산기 5"입니다.이 방법을 적용할 수 있는 다른 정수를 얻(say)"add5and7andonemore":

add5and7andonemore :: Int -> Int
add5and7andonemore = adder 5 7

당신이 볼로,add5and7andonemore 고 싶어 정확히 다른 인수를 줄 때 하나,그것은 갑자기 될 것입니다 정수!

  > add5and7andonemore 9
 => ((add5andtwomore) 7) 9
 => ((adder 5) 7) 9)
<=> adder 5 7 9

대체하는 매개변수를 가산기(n x y)위(5 7 9),우리가 얻을:

  > adder 5 7 9 = 5 + 7 + 9
 => 5 + 7 + 9
 => 21

사실, 론도 함수 int 당신에게 다시 다른 int,그래서 위의 정 더:

  > 5 + 7 + 9
 => (+ 5 (+ 7 9))
 => (+ 5 16)
 => 21

당신이 간다!

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