2011-11-25 3 views
1

디버깅 목적으로 도움말 기능 내에서 목록을 인쇄하고 싶습니다. 그리고 무엇인가의 이유로 그것은 아무 것도 인쇄하지 않습니다. 누가 잘못되었는지 알아? 난이도 시도SML로 목록 인쇄

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

우선 코드를 실제로 붙여 넣으면 대단히 도움이됩니다. –

+1

아마도 'readList'가 전혀 호출되지 않고있을 수 있습니다. – newacct

답변

4

: 난 그냥 답변을 얻을.

참고로 목록의 영향을 평가할 수있는 더 좋은 방법이 있습니다 (List.app : ('a -> unit) -> 'a list -> unit). List.map과 같지만 반환 값으로 목록을 구성하지 않습니다. 당신이 좋아하는 수있는 또 다른 하나는 종종 : 예컨대,

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

를 인쇄 코드를 쉽게 그리고 마지막 참고로, 당신은 당신의 예제 코드가 불필요한 괄호를 많이 사용했습니다하는 String.concatWith이다. 표현을 괄호로 묶을 필요가 거의 없습니다. 특히 함수 응용 프로그램이없는 경우가 아닙니다 (즉, (lst) 또는 (xx)은 항상 lst 또는 xx을 의미하며 아무런 모호성도 해결하지 않습니다. , 의미를 변경하지 않고 (그리고 아마도 가독성을 높이기 위해) (IntToken a)을 쉽게 작성할 수 있습니다.

+0

무엇을 의미합니까? 나는 함수에 대한 데이터를 제공한다. 그렇지 않으면 출력을 얻지 못할 것이다. - 괄호는 나를 위해, 나는 java \ C에서 왔기 때문에 코드를 더 잘 이해한다. :) –

+0

너를 기능시키다. 'readList'가 아니라'Reader.stringToSexpr'라고 부릅니다. 'readList'가 실제로 호출되는 곳을 볼 수 없습니다. – Gian

+0

그것은 큰 programm 다. (그래서 모든 코드가 appeares가 아니다.) 나는 공부를위한 숙제로 컴파일러를 쓰고있다. 그러나 그것은 거기에 도착한다. 그래. –