2009-12-11 4 views
19

F #에서 일부 목록 이해를 시도하고 있습니다. 그리고 this을 찾았습니다.F의 목록 이해 #

let evens n = 
    { for x in 1 .. n when x % 2 = 0 -> x } 
print_any (evens 10) 

let squarePoints n = 
    { for x in 1 .. n 
     for y in 1 .. n -> x,y } 
print_any (squarePoints 3) 

첫 번째는 여전히 작동하지만 두 번째는 오래된 것입니다. 최신 (1.9.7.8) F # 컴파일러는이 스타일을 지원하지 않습니다. 나는이

let vec1 = [1;2;3] 
let vec2 = [4;5;6] 
let products = [for x in vec1 do for y in vec2 do yield x*y] 

작동 발견 된 일부 검색 후

사람 점은 왜 구문을 변경할 수 있습니까? 감사.

답변

20
  • 중첩 for 루프는 do이 필요합니다.

  • seq {..}을 사용해야합니다. seq없이 {..} 양식을 더 이상 사용할 수 없습니다.

  • when 가드 루프에서 for 루프 패턴도 더 이상 지원되지 않습니다.

  • print_any something은 더 이상 사용되지 않습니다. 대신 printf "%A" something을 사용하십시오.

이 코드는 작동합니다 : 당신이 원하는 모든 단일 값 반환되는 경우

let evens n = 
    seq { for x in 1 .. n do if x%2=0 then yield x } 
printf "%A" (evens 10) 

let squarePoints n = 
    seq { for x in 1 .. n do 
      for y in 1 .. n -> x,y } 
printf "%A" (squarePoints 3) 

당신은 여전히 ​​->을 사용할 수 있습니다 : 그런데

let vec1 = [1;2;3] 
let vec2 = [4;5;6] 
let products = [for x in vec1 do for y in vec2 -> x*y] 

을, 내가 발견 F #이 시간이 지남에 따라 어떻게 발전했는지 살펴 보는 것은 흥미 롭습니다. 얼리 어답터는 서가에 부분적으로 오래된 책이 있습니다. (나는 그렇게 생각하지 않습니다.)

+2

글쎄, 얼리 어답터는 그 당시 많은 선택의 여지가 없었어요 :) – Benjol

+3

우리는 초기에 저자를 채택하지도 않았습니다. ;-) –