2012-10-17 5 views
1

) 이제 막 SML부터 시작하여 두 목록 인 L1과 L2를 사용하고 둘 다 발생하는 요소 목록을 반환하는 함수를 작성하려고합니다. 이것은 내가 지금까지 가지고있는 것입니다 :두 목록에서 발생하는 요소 목록 반환 - SML

fun exists x nil = false | exists x (h::t) = (x = h) orelse (exists x t); 

    fun listAnd L1 nil = nil 
    | listAnd nil L2 = nil 
    | listAnd L1 L2 = if exists(hd(L1) L2) = true then hd(L1)::(listAnd(tl(L1) L2)) else listAnd(tl(L1) L2); 

나는 어디에서 오류인지 잘 모르겠습니다.

답변

0

exists은 두 개의 인수를 취하는 함수이므로 실수는 두 인수에 여분의 괄호를 넣는 것입니다. 예를 들어 exists(hd(L1) L2)exists (hd L1) L2으로 수정해야합니다.

  • 대신 hdL1tl
  • 에 일치하는 패턴을 사용하지 않는 값을 빈 목록 및 와일드 카드 _에 대한 []를 사용

    • 제거 중복 = true
    • :

      나는 몇 가지 제안이

      이제 수정 된 기능입니다. 이온 :

      fun listAnd _ [] = [] 
          | listAnd [] _ = [] 
          | listAnd (x::xs) ys = if exists x ys 
               then x::(listAnd xs ys) 
               else listAnd xs ys