2012-11-12 7 views
0

두 개의 동일한 길이 목록을 입력하고 한 목록의 값을 다른 변수의 변수에 할당하려고합니다. 첫 번째 목록을 자동으로 변수 목록으로, 두 번째 목록을 값으로 인식하고 싶습니다. 예 : 변수 목록 [9,10,11,12,13,14]에있는 요소에 [1,2,3,4,5,6] 값을 할당하려고합니다. 즉, 1은 9, 2는 10의 값으로 목록에 있습니다.변수 목록에 값 할당

exception error 

fun assign([],_) = raise error 
    | assign(_,[]) = raise error 
    | assign(l::ls,b::ls) = (val l=b ; assign(ls,bs)); 

나는 몇 가지 문제점이 있음을 알고 있습니다. 첫째, 함수는 값을 올바르게 반환해야합니까? 내가 어떻게 처리 할 수 ​​있는지에 대한 제안? 즉, 원하는대로 값을 할당하는 의미있는 함수를 만드는 것입니다.

답변

1

값을 지정하면 변경할 수없는 유형에 의미가 없습니다. int[1,2,3,4,5,6]의 목록과 기본 값 [ref 0, ref 0, ref 0, ref 0, ref 0, ref 0] 초기화됩니다 INT references의 목록이 있습니다

: 나는이 작업을 수행하고자하는 가정합니다. 참조 번호를 [ref 1, ref 2, ref 3, ref 4, ref 5, ref 6]으로 업데이트하고 싶습니다.

당신은 당신의 기능에 작은 수정이 필요 :

fun assign([], []) =() 
    | assign(_, []) = raise error 
    | assign(_, []) = raise error 
    | assign(l::ls, r::rs)= (r := l ; assign(ls, rs)) 

기능이 unit를 반환하고 assign를 호출 한 후, 참조의 목록에 새 값을 보유하고 있습니다.

그러나 파괴적인 업데이트가있는 이러한 시나리오의 경우 array of values을 사용하는 것이 훨씬 좋습니다.

+0

ref를 보내 주셔서 감사합니다. 나는 그것을 통과 할 것이다. 및 죄송합니다. 방금 할당 할 수 없다는 것을 알았습니다. val 3 = 2; 나는 생각했는데, 여기서 3은 자동으로 변수로 변환된다. 분명히 그렇지 않다. 이제는 [a, b, c, d, e, f] 목록이 있습니다. 그리고 다른 목록 [1,2,3,4,5,6]. 나는 a = 1, b = 2, c = 3, ...을 할당하고 싶다. 내가 아는 한, 심판과 똑같지는 않은가? 그렇지 않습니까? – 700resu

+0

배열을 사용해야합니다. 'update arr 2 2' ('arr'의 세 번째 요소가 '2'값에 할당됨을 의미)를 작성할 수 있습니다. – pad