2011-11-05 5 views
1

SML에 데이터 유형 "expr" (목록 "b")의 멤버가 포함되어 있습니다. 나는 또한 "What"이라는 함수를 가지고 있는데, 이는 인자가 "expr" 데이 터 타입에서만 나온다. b는 expr의 목록이기 때문에SML - 목록 및 재귀

datatype expr = K of string| Number2 of expr * (expr list); 
datatype number = Number1 of string | Number3 of int; 
What.... 
| What (Number2 (t,[]))= Number3(0)::What(t) 
| What (Number2 (y,(a::b)) = append (What(a), What(b)); 

오류가 발생하고, 기능 What은 "expr"가 아니라 "expr list"가지고 : 지금 나는 다음 코드에 문제가 있습니다. 모든 구성원이 "b"인지 확인하고 새 목록을 만들면됩니다. 어느 멤버가 데이터 형식 "number"에서 왔는지 확인하고 싶습니다. map function을 사용해 보았지만 도움이되지 않았습니다 (여기의 마크 : SML - unbound variable or constructor 참조).

아이디어가 있으십니까? 지도를 사용하지 않고도 할 수있는 또 다른 방법이 있습니까? 나는 하루 동안 그것을 쌓아 둔다.

+0

당신은 당신이 다른 질문을받은 솔루션 제공, "도움이되지 않았다"무슨 뜻인지 설명해야합니다. 올바른 결과물로 기대되는 것이 무엇인지 분명하지 않습니다. 'What' 함수의 완전한 정의와 입력과 예상 출력의 예제를 제공하십시오. –

+1

또한'append' 함수를 사용하는 대신 내장 함수'@'를 사용할 수 있습니다. 그것은'lst1 @ lst2'입니다. –

+0

@ Jesper.Reenberg : 정말 고마워요! 연산자 @ 문제 해결! –

답변

9

질문을 닫기 위해.

이전 질문에서 만든 append 기능 :

fun append (nil, l2) = l2 
    | append (x::xs, l2) = x::append(xs, l2); 

은 APPEND 연산자 @ 내장으로 대체 할 수있다. documentation describes으로 :

l1 @ l2 
    returns the list that is the concatenation of l1 and l2.