2013-09-02 1 views
3

SML에서 첫 번째 목록을 반전시킨 다음 두 번째 목록과 연결합니다 (list1 = [5,3,1] 및 list 2 = [6 .누적 계산기 목록이있는 SML 역 목록

오류 :

fun inv (nil,nil) = [] 
|inv (ha::ta,hb::tb) = 
if ha = [] then ta::(hb::tb) 
else ha::inv(ta,hb::tb); 

그것은이 반환 7 8] 다음 INV (리스트 1,리스트 2) = [1,3,5,6,7,8]) 여기서 코드의 유형 의 경우 [원형 성] 분기 : ''Z 목록 목록 목록 else 분기 : ''Z 목록 목록 표현식 :

만약 ha = nil이면 ta :: hb :: tb 다른 ha :: inv (ta, ::)

아무도 도와 줄 수 없습니까?

+0

어때요?'fun inv (xs, ys) = rev xs @ ys' –

답변

4
fun inv ([], b) = b 
| inv (h::t, b) = inv(t, h::b) 

두 번째 목록에는 패턴 일치가 필요하지 않습니다. 이는 꼬리 재귀 함수의 표준적인 예입니다. 그것은 일정한 스택 공간을 가지고리스트를 뒤집는 방법이다. 첫 번째 인수에 '목록'유형이있는 곳에 cons (: :)를 사용하는 중 오류가 발생했습니다.

0

목록을 사용 중이므로 ha = []이면 list1에 다른 용어가 없습니다.

+0

아니요. 'ha'는 목록의 머리입니다. 즉,'ha = []'이면 목록의 목록입니다. 빈 목록으로 시작하는 모든 의도가 아닙니다. – Tayacan