2017-10-24 9 views
0

내가 나중에 함수에 전달할 수 있다는 예를 들어OCaml에서 int로 목록을 인쇄하는 방법은 무엇입니까?

let lista = [1;2;3;4;5;6] 

어떻게 그렇게

int = 123456 

으로이를 작성하려면 어떻게해야합니까, 내가 어떤 목록을 말해봐? 단지

- : unit =() 

내 함수는 문자열이나 INT 나던 정말 중요 반환 여부, 그래서 int_of_string에 대해 알고,

나는
let rec print lista = 
    match lista with 
    []->() 
    |a::lista ->print_int a; print lista;; 

을 시도하지만 난 얻을 것으로 예상 결과를 해달라고.

+0

당신은 무엇을 시도? 펜과 종이로 어떻게 할 수 있습니까? – gallais

+1

내가 시도한 것을 보여주기 위해 내 게시물을 편집했습니다. – filiard

+0

정수 목록을 반복하면서 문자열을 만들고 함수를 전달 하시겠습니까? 또는 int 목록에서 새 정수를 만들겠습니까? – ShadowMitia

답변

1

솔루션에 매우 가깝습니다. 해결책을 표준 출력으로 바꾸는 대신 각 번호에 대한 문자열을 만들어 함께 추가해야합니다. 다음 기능은 당신이 필요합니다 있습니다 :

val string_of_int : int -> string

val (^) : string -> string -> string

또는

, 당신은 int_of_string을 무시하고 몰래하여 직접 솔루션을 구현할 수 :

to_int [a; b; ...; c; d] = ab...cd 
         = d + 10 * (c + 10 * (... + 10 * (b + 10 * c))) 

즉 그 이것은 깔끔한 재귀 구조를 가지고 있습니다.

+0

하지만 제 함수는 아무 것도 반환하지 않을 것입니다.'- : unit =()' – filiard

+0

'print'라고 쓰면 yes입니다. 하지만'string'을 만들면'[int] -> string' 타입을 갖게됩니다. – gallais

+0

그렇게하는 방법? 아이디어가 모자란 – filiard

2

가능한 용액 :

lista 
|> List.fold_left (fun a x -> a * 10 + x) 0;; 

어큐뮬레이터 (10)에 의해 승산되고, 우리는 목록

의 현재 요소를 추가 0

목록에 어큐뮬레이터를 초기화 두번째 파라미터. fold_left는 목록 처리에 매우 유용합니다.

인쇄해야하는 경우 결과는 직접 결과를 인쇄 할 수있는 라인을 추가하는 코드를 수정은 :

lista 
|> List.fold_left (fun a x -> a * 10 + x) 0 
|> print_int;;