답변:
변수를 사용할 수없는 경우 여러 let 표현식 대신 튜플 분해를 사용하십시오.
let a,b ="",[]
대신에
let a=""
let b=[]
F # 핵심 라이브러리에 대한 별명을 정의 System.Console.In
라고합니다 stdin
. 이를 통해 입력을 읽을 수 있습니다.
// Signature:
stdin<'T> : TextReader
그것보다 짧다는 사실을 제외하고 큰 장점 Console
은 시스템을 열 필요가 없습니다.
string은 기본적으로 a char seq
이므로 Seq.map
문자열과 직접 사용할 수 있습니다. 그것들을 이해하는 데 사용할 수도 있습니다[for c in "" do]
모든 읽기 작업에 셀을 역 참조하기위한 추가 문자가 제공되므로 참조 셀을 사용하는 것이 항상 짧은 것은 아닙니다.
완전한 match .. with
인라인 을 작성할 수 있습니다
function|'a'->()|'b'->()|_->()
영숫자가 아닌 문자 앞뒤에 공백이 필요하지 않습니다.
String.replicate 42" "
if Seq.exists((<>)'@')s then
if(Seq.exists((<>)'@')s)then
공백으로 문자열을 왼쪽 또는 오른쪽으로 채워야하는 경우 [s] printf [n] 플래그를 사용할 수 있습니다.
> sprintf "%20s" "Hello, World!";;
val it : string = " Hello, World!"
id는 항등 함수를 나타내는 연산자입니다.
let u x=x|>Seq.countBy (fun x->x)
쓸 수있다
let u x=x|>Seq.countBy id
여기에 사용합니다
내 솔루션 중 하나 에서이 팁에 대해 Laikoni 에게 감사드립니다 .
예를 들어, 대문자는 3, 다른 모든 문자는 1로 문자열을 합산하는 함수를 생각해보십시오. 그래서:
let counter input = Seq.sumBy (fun x -> if Char.IsUpper x then 3 else 1) input
에 의해 ETA 변환 이는 다음과 같이 다시 쓸 수있다 :
let counter = Seq.sumBy (fun x -> if Char.IsUpper x then 3 else 1)
이전과 같은 방식으로 호출됩니다.
counter "Hello world!" |> printfn "%i"
>>
이제 우리의 원래 도전은 문자열을 대문자로 3과 소문자로 1을 합산하고 다른 모든 문자는 제외하는 것이라고 가정하십시오.
이것을 다음과 같이 쓸 수 있습니다 :
let counter input = Seq.filter Char.IsLetter input |> Seq.sumBy (fun x -> if Char.IsUpper x then 3 else 1)
정방향 구성 연산자 ( >>
)를 사용하여 두 함수 ( Seq.filter
및 Seq.sumBy
)를 함께 연결할 수 있습니다 . 에타 변환으로 함수 정의는 다음과 같습니다.
let counter = Seq.filter Char.IsLetter >> Seq.sumBy (fun x -> if Char.IsUpper x then 3 else 1)
Chris Smith는 MSDN 블로그 에서 >>
운영자에 대해 글을 올렸습니다 .
let f = [(0,1);(1,4)]|>Seq.map(fst)
printfn "%A" f
쓸 수있다
let f = [0,1;1,4]|>Seq.map fst
printfn "%A" f
이것은 코드에서 줄 바꿈 문자 하나까지 지불하기 시작합니다. 하나의 사용 사례는 다음과 같습니다.
string.Concat"\n"
string.Concat"
"
es6에 대한 Chiru의 답변 에서 영감 을 얻었습니다 .
여기에 사용
.NET은 많은 훌륭한 내장 기능을 제공합니다. F #에서 사용할 수 있으므로 잊지 마십시오!
예:
open System.Linq
도움이 될 수 있습니다!
module
키워드는 반복적으로 사용하는 경우 모듈 이름을 단축 할 수 있습니다. 예를 들면 다음과 같습니다.
Array.fold ...
Seq.iter ...
List.map ...
될 수있다
module A=Array
A.fold ...
module S=Seq
S.iter ...
module L=List
L.map ...
이것은 모듈 메소드가 반복적으로 사용되는 (그리고 RequireQualifiedAccess
수정자가 있기 때문에 매번 완전히 이름을 지정해야하는) 더 긴 프로그램에 더 유용하며 , 특히 일반 CLR 배열을 사용하는 것이 더 유용한 경우 (예 : 가변성) 몇 개의 문자를 제거 할 수 있습니다. )보다 F # seq
또는 list
.