2012-09-28 2 views
2

ml 함수로하고 있으며 성가신 것들이 있습니다.ML 재귀 함수에 대해 묻기

간단한 코드로 설명하겠습니다. 예를 들어 목록 (int * int)이 있고 첫 번째 요소에 3을 포함하는 튜플이 있는지 확인하고 싶습니다. 나는 다음과 같은 코드를 작성 그래서 만약

L = [(1,2),(2,3),(3,5),(3,4)] 

그래서이 목록에, 내가 ML에, 그러나 5, 4 을 얻으려면, 함수는 재귀입니다. 이 간단한 함수

fun a(list) = 
    if #1(hd(list)) = 3 then #2(hd(list)) 
    else a(tl(list)) 

, 그것을 5를 얻을 수 있지만없는 4가 (3,5)이도 5 반환 기능 완료 조건을 만족하는 것이 검출되면 때문이다.

4 가지 방법이 있습니까?

답변

3

나는 ml의 모르지만, 기본적으로 대신 다른 일을 당신이 수행해야합니다

fun a(list) = 
    if list = nil then nil 
    else 
    if #1(hd(list)) = 3 
    then 
     #2(hd(list)) :: a(tl(list)) 
    else 
     a(tl(list)) 

(I 점차이 응답을 편집하고

내가 ML : 당신은 잊었

3

에 대한 자세한 내용은로를 조건이 보관 된 목록의 꼬리에서 재귀 적으로 함수를 호출합니다.

ML에서는 hdtl을 거의 사용하지 않지만 대신 패턴 일치를 사용합니다. List structure

fun filter [] = [] 
    | filter ((x, y)::xys) = if x = 3 
          then y::(filter xys) 
          else filter xys 

그리고 상위 기능은 당신이 그들을 사용하고자하는 경우에는 다른 옵션이다 : 그리고 당신은 더 쉽게 읽을 수 튜플에 패턴 일치시킬 수 있습니다.