OCaml을 배우기 시작한 직전에 문자열을 출력하는 것으로 놀고있었습니다. , 단순히 "The day is Monday"
가 출력합니다OCaml 일치 및 기능 불일치에 대한 설명
open Printf;;
type days =
| Monday
| Tuesday
| Wednesday
| Thursday
| Friday
| Saturday
| Sunday
let string_from_day day = match day with
| Monday -> "Monday"
| Tuesday -> "Tuesday"
| Wednesday -> "Wednesday"
| Thursday -> "Thursday"
| Friday -> "Friday"
| Saturday -> "Saturday"
| Sunday -> "Sunday"
let d = Monday;;
Printf.printf "The day is %s \n" (string_from_day d);;
이 잘 실행 :
은 내가ocamlc
를 통해 실행하고하는 것을 냈다.
그러나 Real World OCaml에는 function
키워드로 내 기능을 정의 할 수 있다고 나와 있습니다.
Error: This expression has type days -> string
but an expression was expected of type string
내 질문은 왜 :
이open Printf;;
type days =
| Monday
| Tuesday
| Wednesday
| Thursday
| Friday
| Saturday
| Sunday
let string_from_day day = function
| Monday -> "Monday"
| Tuesday -> "Tuesday"
| Wednesday -> "Wednesday"
| Thursday -> "Thursday"
| Friday -> "Friday"
| Saturday -> "Saturday"
| Sunday -> "Sunday"
let d = Monday;;
Printf.printf "The day is %s \n" (string_from_day d);;
은, 그러나, 다음과 같은 오류가 발생합니다 : 그것은처럼 보였다 있도록 그래서 난 내 코드를 재 작성? 내 이해는 string_from_day
함수는 두 버전 모두에서 문자열로 평가되어야합니다.
내가 match
키워드 최상위 수준으로 기능을 입력하면 본인은 function
키워드 최상위 수준으로 기능을 입력 할 때
val string_from_day : days -> bytes = <fun>
은 내가
val string_from_day : 'a -> days -> bytes = <fun>
를 참조 얻을 수 최상위 결과가 두 가지 모두 다르지만 카레 기능은 bytes
으로 끝납니다. 실제 세계 OCaml 책은 이것들은 동등하지만 그렇게 보이지 않는다고 말합니다. 더 자세한 정보에 대한 설명이나 포인터가 있으면 감사하겠습니다.
아 당신에게 감사하고 엄격하게 동일합니다! 나는 그 다음 예제도보고 있었지만 다른 사용법을 본다. – Jesse
예, 'function' 키워드는 * last * 인수를 대체합니다. RWO에서 볼 수 있듯이 이전에 다른 인수를 추가 할 수 있습니다. :) – RichouHunter
'function'은 특별한 인자 구문이나 그와 같은 것이 아니라 단지 하나의 인자로 된 익명 함수를 정의한다는 것에주의하십시오. 그것은'fun x -> x와 일치하는 ... '에 대한 속기입니다. – gsg