2015-10-25 3 views
1

У меня есть список кортежей [("hi", 1), ("yo", 2)];, и я хочу «преобразовать» этот список в таблицу, используя стандартный вывод print s; в sml в виде таблицы.Печатать список кортежей в стандартный вывод 'table'

Например, приведенный выше список кортежей будет производить вывод, такие как:

------------ 
| "hi" | 1 | 
------------ 
etc... 
------------ 

У меня есть этот код, но его дает мне ошибку:

fun outputTable [] = print "Nothing! \n" 
    | outputTable ((hd, n)::tl) = 
     print "-----------" 
     print "| "^hd^" | "^n^" |" 
     print "-----------" 
     outputTable tl; 

Здесь ошибка:

stdIn:15.2-17.21 Error: operator is not a function [tycon mismatch] 
operator: unit 
    in expression: 
    (print "-----------") print 
stdIn:15.2-17.21 Error: operator is not a function [tycon mismatch] 
operator: string 
    in expression: 
    " |" outputTable 
stdIn:13.5-17.21 Error: right-hand-side of clause doesn't agree with function result type [tycon mismatch] 
expression: string 
result type: unit 
in declaration: 
    outputTable = 
     (fn nil =print "Nothing!" 
     | :: (<pat>,<pat>) =<exp^ <exp^ <exp<exp>) 

ответ

0

Чтобы использовать более одного выражения в SML, вы должны заключить несколько строк в круглые скобки, например:

(expr 1; expr2; ...; exprn); 

Так, чтобы исправить свою ошибку, я просто использовал эту форму для моих печатных линий:

fun outputTable [] = [] 
    | outputTable ((hd, n)::tl) = 
     (print "------------------\n"; 
     print ("| "^hd^" | "^Int.toString(n)^" |\n"); 
     print "-------------------\n"; 
     outputTable tl); 

 Смежные вопросы

  • Нет связанных вопросов^_^