2009-12-18 5 views
18

나는 "재미"키워드를 입력 한 후 난 당신이 C#으로에없는 기억F # : "재미있는"키워드가 필요합니까?

않을까요이 :

List.map (x -> x + 1) [1..10]

을? :만큼이나 표현해야합니다

List.map (fun x -> x + 1) [1..10]

"재미있는"키워드가 왜 필요한지 궁금합니다. 누군가 "구문"키워드가 구문 적으로 필요한 이유를 명확히 할 수 있습니까?

+4

나는 F #에 대해 아무 것도 모른다.하지만 재미있는 키워드 인 "재미"를 발견했다. 재미있는 –

+4

F #에서의 코딩이 재미 있기 때문에! 코딩 중 친숙한 알림 : – Russell

+5

그들이 그것을 꺼낸다면, f #에 재미가 없을 것입니다! 하지만 C#의 lambdas는 키워드가 필요하지 않으므로 궁금합니다. 파싱을 단순화하기 위해있을 수 있습니다. 언어가 발전함에 따라 이런 종류의 것들은 축소되거나 선택 사항이되는 경향이 있습니다. –

답변

21

언어가 없으면 모호합니다.

let x y = y z -> y z 

함수 z -> y zx 전화 y 하는가 아니면 인수를 무시하고 기능 y z -> y z을 반환합니까? 괜찮은 투기 답변

+0

흠. 요점은 분명하지만 모호성을 해결하기 위해 괄호를 추가 할 수 있습니다. "y (z -> y z)"? 흠 ... 결국 좀 더 장황하게 끝내겠습니까? – rysama

+8

그런데'재미 '를'()'로 변형 시켰습니다. C#은 람다 (lambdas)를위한 특별한 구문을 가지고 있지 않은 것으로부터 벗어날 수 있습니다. 왜냐하면 그것은 더 정교한 구문을 가지고 있기 때문입니다. F #과 같은 언어에서, 나는 "OK, lambda coming up!"라고 말하기 위해 어떤 종류의 구분자를 사용하여 어떻게 돌아갈 수 있는지 보지 못한다. – Chuck

+2

나는 이것이 모호하지 않아야한다고 생각하지 않는다. 대부분의 언어에는 모호함이 많으며 모호성을 '해소하는'우선 순위 규칙이있다. 이것은 또 다른 경우 일 수 있습니다. – Brian

-1

나는 태닝의 일환으로, 당신이 바꿀 수 있습니다 (이 post 참조) 알고

let countOneToTen = fun y List.map(fun x -> x + 1) y 
countOneToTen = [1..10] 

재미 키워드가없는

let countOneToTen y = List.map(fun x -> x + 1) y 
countOneToTen = [1..10] 

와 함께.

+2

그것이 OP가 말하는 것에 대한 것이 아닙니다. 그들은 왜 '재미있는 x -> x + 1'이 단지 'x -> x + 1'일 수 없는지 묻습니다. – bcat

+0

"재미있는 키워드가 전혀 필요한지 묻는 질문입니다."개발자 선호도에 따라 사용 및 생략 할 수있는 다른 예제를 제공했습니다. – Russell

+0

나는 알고있다. (그리고 나는 분명히하기 위해 당신을 downvoted 사람이 아니다.) 비록 솔직히 왜 누군가가 부분적인 응용 프로그램을 이용하지 않는 버전을 선호하는지 모르겠지만. :) – bcat

14

많은 이미 ... 내가 믹스에 추가 할 것입니다 :

F #을 OCaml의와 호환되는 핵심 언어를 가지고 있으며, OCaml로는 '재미'사용합니다.