>source

sml/nj로 작성해야합니다 시도해 본 결과 다음과 같습니다.

함수를 실행할 때 모든 함수가 양수를 반환하기를 원하지만 예를 들어 [1,2,3] [1,1,2,3,1,2,3,1] 를 줄 때  그것 완전하지 않은 일치 실패를 반환합니다. 기능에 어떤 문제가 있으며 요소가 있는지 확인하려면 어떻게해야합니까 첫 번째 목록 중 두 번째 목록에 존재합니까?

fun elem num [] = false
  | elem num (x::xs) = if num = x then true else elem num xs
fun all [] [] =
  let
    fun qwe [] [] acc = acc
      | qwe (x::xs) (z::zs) acc = if elem x (z::zs) then qwe xs (z::zs) (1+acc) else qwe xs (z::zs) acc
  in
    qwe [] [] 0
  end

  • 답변 # 1

    all 정의 , 당신은 [] 의 생각에 미끄러 져 보인다  빈 목록이 아닌 일반 목록으로 사용합니다.

    all 정의에 실제로 나타나는 유일한 패턴   [] [] 입니다  (두 개의 빈 목록). 이것이 가장 중요하지 않은 매칭입니다.

    헬퍼 함수 qwe 이후  실제 작업을 수행하고 실제로 all 에서 패턴 일치에 아무런 의미가 없습니다.  그 자체. all 의 전반적인 형태  될 수 있습니다 :

    fun all xs ys =
      let
        fun qwe = (*insert definition*)
      in
        qwe xs ys 0
      end;
    
    

    ( zs 사용)   ys 보다는  조금 어색해 보입니다)

    que 의 정의  2-4 패턴이 있어야합니다. 4 가지 패턴 정의 (두 목록에서 작동하는 일부 기능에 필요) :

    fun qwe [] [] acc = (*insert def*)
      | qwe [] (y::ys) acc = (*insert def*)
      | qwe (x::xs) [] acc = (*insert def*)
      | qwe (x::xs) (y::ys) acc = (*insert def*)
    
    

    마지막으로 첫 번째 목록과 두 번째 목록의 각 부울 조합에 대해 하나씩 4 개의 사례가 제공됩니다. 때로는 각각에 대해 별도의 코드를 작성할 필요가 없습니다. 예를 들어

    fun qwe [] [] acc = (*insert def*)
      | qwe [] ys acc = (*insert def*)
      | qwe (x::xs) ys acc = (*insert def*)
    
    

    3 번째와 4 번째 사례를 단일 사례로 결합합니다.

    elem 의 실제 정의를 보면 it은 빈 ys 의 경우를 처리한다는 것을 알고 있습니다.   qwe 의 정의에서 멋지게 xs 에 따라 두 가지 패턴을 가질 수 있습니다.  하고있다 :

    fun qwe [] ys acc = (*insert def*)
      | qwe (x::xs) ys acc = (*insert def*)
    
    

    와이즈 비즈 이후  비어있는 목록과 비어 있지 않은 목록을 모두 일치시킬 수 있습니다. 위의 템플릿은 철저합니다.

    위의 두 가지 ys 사례에 대한 적절한 정의 (본질적으로 이미 가지고 있음) , 당신의 기능 que  작동합니다 :

    all
    
    

    - all [1,2,3] [1,1,2,3,1,2,3,1]; val it = 3 : int

관련 자료

  • 이전 kubernetes - 베어 메탈에서 NodePort를 80으로 변경
  • 다음 sql - 날짜 패턴을 설정하고 특정 날짜를 설정하는 방법이 있습니까?