디버깅/테스트 용 print 문을 코드 블록에 넣을 수 있습니까? 예를 들어, 자바에서는 System.out.println("")
을 사용하여 변수 나 다른 것들을 검사 할 수 있지만, OCaml에서는 print_string
과 같은 명령을 사용할 수 있습니까? 따라서 단위를 인쇄하는 대신 오류를 발생시키는 단위 유형의 값을 반환하지 않을까요?OCaml Print statements
답변
인쇄물을 expression sequence에 삽입하면 문제가 없습니다. 위의 대답이 아니라, 링크와 함께 답변 만 좋은 답변이되지 않으며, 오히려 짧고 때문에
UPDATE 여기
는, 구체적인 예이다. 그것은 계승의 고전 꼬리 재귀 공식이다 (예,하지만 익숙한 지루한) : 여기
# let fac n =
let rec f i n acc =
if i >= n
then acc
else (Printf.printf "%8d%8d%8d\n" i n acc; f (i+1) n ((i+1)*acc))
in
f 0 n 1;;
val fac : int -> int = <fun>
# fac 5;;
0 5 1
1 5 1
2 5 2
3 5 6
4 5 24
- : int = 120
당신이 인쇄의 부작용을 볼 수 있습니다,하지만 결과는 여전히 예상대로 (120)으로 밝혀졌다.
위대한, 정말 고마워! 이것은 내가 찾고 있었던 바로 그 것이었다. 표현식 시퀀스는 일반적으로 다른 용도로 사용 되나요? 아니면 이것의 주요 용도입니까? 변수의 값을 변경하는데도 사용할 수 있다고 생각하십니까? – dxu
예, 상태 값을 업데이트해야하는 것 (예 : 참조 값 업데이트)은 일반적으로이 방법으로 처리됩니다. 이 [여기] (http://caml.inria.fr/pub/docs/oreilly-book/html/book-ora028.html)에 대한 매우 훌륭하고 자세한 설명은 "순서"절을 참조하십시오. –
OCaml이 순수한 기능 언어가 아니기 때문에, 이것을 할 수있는 많은 방법이 있습니다. 이런 구체적인 코드를 작성하는 방법은 다음과 같습니다.
let rec mylength list =
(* DEBUG *)
let() = Printf.printf "mylength here, null list: %b\n%!" (list = [])
in
(* DEBUG *)
match list with
| [] -> 0
| _ :: rest -> 1 + mylength rest
당신이 (* 디버그 *) 주석 내부의 물건을 제거 할 수 있습니다 작동 후.
%! 버퍼를 플러시한다. printf
으로 디버깅을 많이한다면, 이것에 대해 배우는 것은 정말 유용합니다. ignore
을 사용
let get_a_string =
let a_string = "a string" in
(* The semicolon causes the return value of the statement to be discarded *)
Printf.printf "Debug: %s\n" a_string;
a_string
let() = Printf.printf "Result: %s\n" get_a_string
함수의 반환 값을 무시하는 또 다른 방법 :
ignore (Printf.printf "Debug info");
다음
'(* DEBUG *) Printf.printf "여기에 널 길이, % list : % b \ n %!"라고 쓰는 것이 더 간단 할 것입니다. (목록 = []); (* DEBUG *) ' – newacct
예. 내가 진정으로 쓰는 방법을 보여주고 있다고 말했듯이. 나는 배움에 남겨진 많은 우선 순위 때문에 괄호 밖에서 세미콜론을 사용하는 것에 대해 수줍음을 느낍니다. –
- 1. python print statements fixes OverflowError
- 2. Excel Embeded If Statements
- 3. php mail() statements
- 4. if else statements PHP
- 5. Ocaml 소개
- 6. Ocaml 구현
- 7. sqlite prepared statements - 디버그 방법
- 8. Prepared Statements VB.net의 ODBC의 경우
- 9. mysqli prepared statements 및 mysqli_real_escape_string
- 10. Haskell : print TextEncoding
- 11. 하단에 print css를 넣어야합니까?
- 12. T-SQL의 PRINT 문
- 13. awk '{print $ 2, ",", $ 1}?
- 14. print php session username
- 15. dynamic_bit set print?
- 16. pretty print makefiles
- 17. Javascript + Pretty Print JSON
- 18. OCaml : 트리 함수
- 19. OpenMP with OCAML
- 20. OCaml 라이브러리를 설치하기위한 Makefile
- 21. 파일에서 반환 값 - ocaml
- 22. ocaml 패턴 일치 질문
- 23. OCaml 빈 글로벌 변수
- 24. mealy machine in ocaml
- 25. OCaml 패턴은 내장형에서 일치합니다.
- 26. OCaml 펑터를 설명해 주시겠습니까?
- 27. OCaml 객체의 재귀 함수
- 28. Ocaml 구문 오류
- 29. ocaml 그래픽으로 이미지 저장
- 30. Ocaml Pattern Matching
Ocaml은 Java와 다르므로 원하는대로 인쇄 할 필요가 없습니다. 예를 들어, 목록을 인쇄하려면 작성해야합니다 ... 왜냐하면 ocaml에는 객체 만 있기 때문입니다. –