2017-01-30 8 views
1

저는 SML 프로그래밍 초보자입니다. 필자는 4 개의 입력을받는 프로그램을 작성하여 변경했습니다. 이제이 프로그램이 결과적으로 2 쌍을 반환하기를 바랍니다. 이것은 코드 :SML의 결과로 2 쌍을 반환하는 방법은 무엇입니까?

fun Move(n,k,z,b): int * int = 
if (n=1) then (k+1,z) 
else (k,z); 

지금 문 I는, 예를 들어 복귀 할 경우 (K + 1, z) 및 예약 (N, b) 동시에, 대신의 (K + 1, z) . 목록을 사용하지 않고도 가능합니까 (제품의 형태로 돌아 오는 것을 의미합니까)? 그렇다면 코드를 어떻게 변경해야합니까?

답변

0

소개 도서를 읽어야하는 것 같습니다 (예 : H&R 또는 ML for the Working Programmer). 그냥 (k+1,z) 같은

k+1z의 제품입니다, 당신은 (k+1,z)(n,b)의 제품을 만들 수 있습니다. 그러한 값은 ((k+1,z), (n,b))이 될 수 있으며 두 개의 두 튜플을 두 튜플로 사용하거나 (k+1, z, n, b)을 네 튜플로 사용할 수 있습니다. 그것들은 동형이기 때문에 당신이 좋아하는 것을 선택하십시오.

사실, 그들은 네 개의 고유 값이있는 경우로 나타납니다,하지만 동시에, 그들은 네 개의 값의 하나 제품이야 수 (n,k,z,b) 입력 인수. ML에서 관례로 기능 소문자 이름을 부여하고, 경우 - 당시 다른k에 영향을 받기 때문에, 당신이있을 수 있습니다 :

fun move (n, k, z, b) = (n, if n = 1 then k+1 else k, z, b) 

을 패턴 매칭이 아닌 를 사용하는 경우 - 당시 다른, 당신은 가질 수 있습니다 :

fun move (1, k, z, b) = (1, k+1, z, b) 
    | move (n, k, z, b) = (n, k, z, b) 

나는 그 기능이 어떤 의미인지 모르겠지만.

+0

이 함수는 간단한 예제로 2 쌍을 반환하는 방법을 배우기 위해 만들었습니다. 감사 – helen