2011-04-26 14 views
1

아니면 정말 내가이 등의 작업에 브래킷을 피할 수 있습니다 : 그것은 모두 여부를 파이프로 몇 가지 트릭을 할 수있는 경우 Seq.iter에서 대괄호를 피할 수 있습니까?

X |> Seq.iter(fun x ->()) 

그래서 내가 알고 싶어요. 이미 다른 방법으로 시도했지만 나는 그것을 다시 내가 | |

X |> Seq.iter <| fun x -> 
+2

왜이 작업을 수행 하시겠습니까? '<|'는'()'와 같은 문자 수입니까? – Daniel

+0

-> 연산자의 우선 순위가 너무 낮습니다 ... – LLS

+0

그냥 명명 된 함수를 사용합니다. 'X |> Seq.iter f' –

답변

4

물론 같은 것을 사용하여 그것을 할 수 어쩌면 물어보고 싶은 알고, 당신은 쓸 수 있습니다 :

for x in X do() 

좋아, 아니에요 당신이 요구하고있는 것이지만, 시퀀스 표현과 for은 구문 적으로 파이프 라인을 표현하는 더 간단한 방법입니다.

질문으로 돌아 가기 - <|이 작동하지 않는 이유는 파이프 라인이 더 길기 때문에 우선 순위가 다르기 때문에 우선 순위가 너무 낮습니다. 코드가 올바르게 구문 분석 될 수 있도록 |>보다 우선 순위가 높은 연산자가 필요합니다. (

let (+<) f a = f a 

[1..10] |> Seq.map +< fun x -> x * x 
     |> Seq.iter +< fun x -> printfn "%A" x 

을하지만, 그것은 당신에게 어떤 입력을 저장하지 않으며, 당신의 코드를 읽을 다른 F 번호 프로그래머를 혼동하기 때문에 정말, 경우에 따라서는이를 사용하는 것은 좋지 않습니다 : 당신은 예를 들어 쓸 수 있습니다 Haskell과 달리 $을 사용할 때).

+1

Tomas, 당신은 방금'^ '을 사용하여 오른쪽 연관 뒤로 파이프'인라인 (^ <|) f a = f a'을 만들 생각을했습니다. http://fssnip.net/4o –

+0

@Stephen : 트위터를 통해 스 니펫을 알아 챘습니다 :-). 좋고 & 유용한 샘플! 게시 해 주셔서 감사합니다. –

+0

감사합니다. 나는 그것을 좋아한다. – Cynede

2

유형 추론을 위해, 당신이 가지고있는 것이 가장 좋은 방법 일 것입니다. 이 먼저 주어지기 때문에 'a -> unit 함수는 'a 유형을 알 수 있습니다 (유형 유추는 위에서 아래로/왼쪽에서 오른쪽으로 작동합니다). 표현식을 몇 가지 다른 방식으로 재정렬 할 수 있지만 키 입력을 저장하지 않으므로 더 어색 할 수 있습니다.

관련 문제