печать списка в SML - PullRequest
       9

печать списка в SML

1 голос
/ 25 ноября 2011

Я хочу напечатать список внутри функции справки для целей отладки. И по какой-то причине он ничего не печатает. Кто-нибудь знает в чем дело?
Вот часть моего кода:

local
....
and xx(LparenToken) = "LparenToken"
| xx(RparenToken) = "RparenToken"
| xx(QuoteToken) = "QuoteToken"
| xx(DotToken) = "DotToken"
| xx(VectorToken) = "VectorToken"
| xx(IntToken(a)) = "IntToken"
| xx(CharToken(a)) = "CharToken"
| xx(StringToken(a)) = "StringToken"
| xx(SymbolToken(a)) = "SymbolToken"
| xx(BoolToken(a)) = "BoolToken"

and readList(nil) = []
| readList(lst:SchemeToken list) = (map(print)((map(xx)(lst))); read(getFirstSexpr(lst))::readList(getRestSexpr(lst)))
...
in
    some functions..
end

Я пробовал это также:

and readList(nil) = []
| readList(lst:SchemeToken list) = (print "x"; read(getFirstSexpr(lst))::readList(getRestSexpr(lst)))

это не печать. я получаю только ответ:

- Reader.stringToSexpr "#(a b (1 2 3) c)";
val it =
  Vector
    [Symbol "a",Symbol "b",Pair (Number 1,Pair (Number 2,Number 3)),
     Symbol "c"] : Sexpr

1 Ответ

4 голосов
/ 26 ноября 2011

Я подозреваю, что проблема не в вашем коде печати списка - он будет работать нормально, если он вызывается с некоторыми данными.

Для справки, есть более хороший способ оценки эффектов со списками: List.app : ('a -> unit) -> 'a list -> unit. Это похоже на List.map, но оно не создает список как возвращаемое значение. Еще один, который вам может понравиться - это String.concatWith, который часто облегчает печать кода, например ::10000

print (String.concatWith "\n" (map xx lst))

И, наконец, вы использовали множество ненужных скобок в вашем примере кода. Вам редко нужно заключать выражения в скобки - особенно если нет приложения, в котором нет функций (т. Е. Запись (lst) или (xx) всегда будет означать lst или xx и не устраняет какую-либо двусмысленность (поскольку нет.) Точно так же в ваших шаблонах их можно так же легко написать (IntToken a) без изменения значения (и, возможно, увеличения читабельности).

...