2011-04-22 2 views
3

나는 상태를 만드는 함수를 가지고 있습니다.Ocaml : 정수 배열의 배열에 요소 인쇄하기

type state = graph * bool array;; 

그래프이다 :

type graph = int list array;; 

그래프가 배열되고 각 인덱스에서 그 인덱스에 저장된 INT리스트가있을으로하는 상태가 정의되어있다.

상태를 만든 함수가 있는데 상태의 요소를 출력 파일로 인쇄하려고합니다.

let state_of_graph (s:state) (out:out_channel) : unit = 
    match s with 
    (g, b) 

가 I 기본적 돈 그렇지 내 그래프 (g)를 반복하고 요소가 존재하는 경우 (또한 인덱스 및 INT 목록의 각 요소를 출력 할 '다음

는 I 함수를 정의 빈 요소를 출력하지 마십시오).

난 방식으로이를 출력 할 :

index0 -> element1 
index 0-> element2 

1 -> 2 3 

자체 그래프 부울 배열 모두 된 상태 (고려 인덱스 0은 2 개 개의 요소를 갖는다). 나는 여기서 정확히 무엇을해야하는지 혼란 스럽다 (구현). 나는 내 그래프를 반복하고 인덱스를 출력 한 다음 화살표가 따라 와서 별도의 int를 인쇄해야한다는 것을 안다.

하지만 정확히 어떻게해야합니까?

+0

하지 마세요! 사람들이 계속 읽을 수 있도록 질문을 그대로 둡니다. 질문이 해결되었다는 것을 나타 내기 위해서, 당신이 해왔 던 것처럼 대답 중 하나 (가장 도움이되는 것)를 받아 들일 정도로 충분합니다. (왼쪽에있는 숫자 위의 위쪽 삼각형을 클릭하면 도움이되는 부분을 찾을 수 있으면 원하는만큼 답변을 upvote 할 수 있습니다.) – Gilles

답변

1

귀하의 데이터 구조에 대한 설명이 매우 부족합니다. 예를 들어, "그래프는 배열이고 각 인덱스에는 해당 인덱스에 저장된 int 목록이있을 수 있습니다."글쎄, 거의 type graph = int list array의 의미입니다 (사실, 항상 각 인덱스에 int리스트가 저장되어 있습니다). 영어 문장은 추가 정보를 전달하지 않습니다. 각 배열 요소가 나타내는 것을 설명하는 것이 더 유용 할 것입니다. 그래프에 대해 이야기하고 있으므로 a.(i)j이 포함되어있는 것 같아서 i에서 j으로 가장자리가 있다는 뜻입니까?

그러나 수행하도록 설정 한 작업은 데이터 구조의 측면에서 설명하기 때문에 사용자가 원하는 작업을 이해하고 있다고 생각합니다.

배열을 반복하려면 두 가지 가능성이 있습니다 : for 루프를 작성하거나 Array.iter 또는 Array.iteri 함수 중 하나를 사용하십시오. 이 작업은 Array.iteri에 적합합니다. 배열을 다녀 가며 색인을 알아야하기 때문입니다.

let print_graph (g, a : state) (out : out_channel) : unit = 
    Array.iteri (fun i l -> …) g;; 

이제 우리는 각 배열 요소에 대해 무엇을해야하는지 알 필요가 있습니다. 각 요소는 정수 목록입니다. l의 유형은 int list입니다.샘플 출력에서, 중간에 공백이있는 순서로 목록 요소를 출력하기 만하면됩니다. 목록의 요소를 순서대로 반복하려면 표준 라이브러리 함수 List.iter이 적합합니다.

let print_node (l : int list) (out : out_channel) : unit = 
    List.iter (fun j -> print_char ' '; print_int j) l;; 

이제 print_graph을 완료 print_node을 사용할 수 있어야합니다. 각 줄의 시작 부분에 색인과 화살표를 인쇄하고 색인이있는 경우에만 줄을 인쇄해야합니다.

0

나는 배열 및 목록 모두가 map이 있습니까 내가

:-) 코드를 작성하지 않는 것이 미안, 내 OCaml의 대부분을 잊으 셨나요? 그렇다면 배열을 매핑하고 index + "->"를 반환하고 목록에 매핑하고 int를 문자열로 변환 한 다음 연결할 때 얻은 정보를 추가합니다.

도움이 되었습니까?