2017-04-10 25 views
1

저는 SML에서 함수와 정수를 입력으로받는 함수를 작성해야하는 프로젝트에서 작업하고 있습니다. 이 함수는 전달 된 주어진 함수에 대한 입력/출력 튜플 목록을 생성해야합니다.SML에서 입력/출력 튜플을 생성하려면 어떻게해야합니까?

finiteListRepresentation(square, 5); 

:

fun square(x) = x*x 

기능은 튜플의 목록을 반환해야 :이 같은 함수를 호출 예를 들어,

[(1,1),(2,4),(3,9),(4,16),(5,25)] 

을 분명히 광장 기능이 될 수 있습니다 정수 큐브 함수 또는 이와 비슷한 함수. 내가 겪고있는 문제는 재귀 적으로 지정된 값에서 시작하는 각 정수를 "방문"하는 함수를 얻는 것입니다. 나는 SML 매우 새로운 오전 나는 기능과 같은 단일 값을 반환받을 수 있습니다 내가 어떻게 그것을에 도달 할 때까지 1부터 시작하여 모든 값을 계산하기 위해이 기능을 일반화에 관한

finiteListRepresenation(f, x) = [(x, f(x))] 

누군가가 나를 도울 수 지정된 정수?

도움 주셔서 감사합니다.

답변

0

당신이, 솔루션보다 더 많은 힌트를 찾는 map function을 확인하고 도울 수있는 방법을 알아 내기 위해 노력하는 것 때문에 :

val map : ('a -> 'b) -> 'a list -> 'b list 
map f l 

l의 각 요소에 f을 적용 왼쪽에서 오른쪽으로 결과 목록을 반환합니다.

+0

답변 해 주셔서 감사합니다. 내 주요 문제는 재귀 SML에서 숫자를 열거하는 것 같아요. 예를 들어, 하나의 정수를 취하여 1에서 그 정수까지의 목록을 생성하는 함수를 만들고 싶다면 어떻게 재귀 적으로이 작업을 수행합니까? –

0

내가 재귀 적으로 각각의 정수가 지정된 값에서 시작하여 "방문"하는 기능을 점점 데 문제.

하위 및 상위 경계 사이의 정수를 열거하는 도우미 함수 range : int * int -> int list을 작성하십시오. 예를 들어,

val [2,3,4,5,6,7] = range (2, 7) 

시작하려면 자체의 측면에서 반복적으로 range을 구현하는 것이 좋습니다. 이 기능이 있으면

(* assume i <= j *) 
fun range (i, j) = 
    if i = j then (* TODO *) 
    else i :: (* TODO *) 

finiteListRepresentationList.map 매우 간단합니다 : 여기에 힌트입니다.