이 문제는 여전히 많은 문제가 있습니다. 내가 (string * string list) list
있고 부울 매트릭스로 변환하고 싶습니다.부울 행렬로 변환 할 때 오류가 발생했습니다.
변환 할 때 특별한 조건이 있습니다. 예를 들어 나는이 목록을 가지고 :
let entries = [("name", ["string"; "label"]); ("label", ["int"; "name"]);
("symbol", ["string"])]
여기서 "string
"와 "int
"내 실제 데이터에, 나는 정의는이 유형을 설명하지 않기 때문에 정의되지 않은 유형, 정의되지 않은 유형이다. 그래서 정의되지 않은 유형의 목록을 만들었습니다.
let undefined = ["string"; "int"]
그리고 목록의 첫 번째 위치 ("name
", "label
", "symbol
")가 정의 유형, 정의 형은 내 데이터의 정의를 가지고있는 유형입니다.
let defined = ["name"; "label"; "symbol"]
내가이 일을하려고 오전 : entries
에서,이 위치해야한다 :
name: 2; string: 0; label: 3; int: 1; symbol: 4
을 그리고 목록 entries
에서 관계를 따라 표시 할 때, 그것은 자신의 위치를 변경하지 않습니다. 예를 들어 name(2)
링크 string(0)
및 label(3)
및 label (3)
에 int(1)
및 name (2)
에 에지를 갖는다 '등과 ...
I 이러한 기능을 가지고
는 목록 내의 위치 (num_of_name
) 소자 (
name_of_num
)를 반환한다.
let rec position x = function
| [] -> raise Not_found
| y :: ys -> if x = y then 0 else 1 + position x ys
let len_undefined = List.length undefined
let num_of_name defined undefined len_undefined s =
try (position s defined) + len_undefined;
with Not_found -> position s undefined
let name_of_num defined undefined len_undefined k =
if k < len_undefined then
List.nth undefined k else
List.nth defined (k - len_undefined)
는 그래서 entries
목록에서 나는 기능 num_of_name
를 사용하여이 관계를 부울 행렬 쇼를 구축하고자합니다. 그래서 난 내 함수를 작성 :
let matrix =
let len = List.length defined + len_undefined in
let boolmat = Array.make_matrix len len false in
List.iter (fun (s, strs) ->
let pos1 = num_of_name defined undefined len_undefined s in
List.iter (fun t ->
let pos2 = num_of_name defined undefined len_undefined t in
boolmat.(pos1).(pos2) <- true) strs) entries;
boolmat
let print_mat m =
for i = 0 to Array.length m - 1 do
for j = 0 to Array.length m.(0) - 1 do
print_string (string_of_bool m.(i).(j));
Printf.printf " ";
done;
Printf.printf " \n";
done;
;;
let test_print = print_mat matrix
그것은 "Fatal error: exception Not_found
는"
죄송합니다. 감사합니다 – Quyen
당신이하고 싶은 것을 설명해 주시겠습니까? 'undefined'와'defined'의 역할은 무엇입니까? – pad
정말요 ?? 나는 다시 달리려고 노력했다. 그리고 그것은 나에게 같은 오류를 돌려 준다. – Quyen