2013-11-18 2 views
1
open Map 
open Pretty 

let d_doc() (x : doc) : doc = x 

let d_str() = text 

let d_map d_k d_v() m : doc = 
    printf "{%a}" 
     d_doc 
     (Map.fold (fun k v acc -> printf "%a, %a -> %a" d_doc acc d_k k d_v v) m (text "")) 

сообщает мне «Ошибка: несвязанное значение Map.fold». Как мне это сделать? (Я хотел бы либо указатель на ссылку, которая объясняет, как использовать функции карты (или вообще функции модуля в целом), стандартный библиотечный симпатичный принтер для карт и/или исправление для моего кода.)Как распечатать карту в OCaml?

+0

Ваш вопрос заголовок вводит в заблуждение. Вы действительно задаетесь вопросом, почему «Map.fold» не найден, что совсем не о печати. Вы следуете примеру из определенной книги? Нам также нужно знать, какие библиотеки вы загрузили. –

+0

Нет, моя конечная цель - распечатать карту из стандартной библиотеки. У меня есть код шаблона из pset для анализа программ, и я пытаюсь распечатать свою карту для отладки. Map.fold был первым, что я пробовал, и если кто-то просто скажет мне, почему Map.fold не найден, но это не заставляет меня знать, как распечатать карту, тогда я не буду удовлетворен ответ. –

+7

Вот неудовлетворительный ответ: «Карта» - это функтор, а не модуль. Таким образом, он не имеет функции 'fold' как таковой. Он создает модули, которые имеют функцию 'fold'. Если вы просто хотите отлаживать, возможно, вам будет проще сосредоточиться на реальных модулях, которые у вас есть (приложения «Map.Make»). –

ответ

0

Вы можете распечатайте карту с помощью sexplib довольно удобно. Вот как вы это сделаете, используя Core.

open Core.Std 

let map = Int.Map.of_alist_exn [1,"one"; 2,"two"; 3,"three"] 
let() = 
    (<:sexp_of<string Int.Map.t>> map) 
    |> Sexp.to_string_hum 
    |> print_endline 
Смежные вопросы