SML : 각 튜플의 두 번째 요소를 사용하여 튜플 목록에서 목록을 만듭니다.

자이언트 시크

안녕하세요 저는 SML에 새로 왔으며 두 개의 int와 문자열이있는 튜플이있는 목록 (제 경우에는 목록 prussia)을 매개 변수로 가져 오는 함수를 작성하려고했습니다. 내 함수는 다음과 같이 목록을 만들어야합니다. 반복없이 목록에 나타나는 모든 연도 (목록의 각 튜플의 두 번째 요소). 두 가지 함수를 만들어야합니다 (append_if_new는 목록의 1 년을 목록에 추가하면 작동합니다). year는 목록의 모든 튜플에 대해 수행해야합니다. foldl을 사용하여 시도했지만 tycon을 얻습니다. 불일치.

Pd. 이를 위해 함수 맵, 필터 또는 접기를 사용해야하며 append_if_new 기능을 연도 함수로 이동할 수 있습니다. 나는 매개 변수로 전달하는 함수가 전달해야 할 함수 유형이 아닌 폴드 호출에 오류가 있다고 생각하지만 문제가 무엇인지 확실하지 않습니다. 감사

    val prussia =
  [(0,1875,"G"),(2,1876,"G"),(2,1877,"G"),(1,1878,"G"),(0,1879,"G"),
   (0,1880,"G"),(1,1881,"G"),(1,1882,"G"),(0,1883,"G"),(3,1884,"G"),
   (0,1885,"G"),(2,1886,"G"),...] : (int * int * string) list

fun append_if_new (lista:(int*int*string)list): int list =
    let 
        val lista2 = []
        val x = hd lista
        val z = #2x
    in
        if (List.exists (fn y => y = z) lista2) 
        then lista2
        else lista2@[z]
    end

fun years (lista:(int*int*string)list): int list =
    List.foldl append_if_new 0 lista
사이먼 샤인

반복없이 목록에 나타나는 모든 연도를 포함하는 목록을 만듭니다.

(목록의 각 튜플의 두 번째 요소)

다음을 사용하여 반복 목록을 만들고 map나중에 중복 항목을 필터링 할 수 있습니다 .

fun year_of (_, year, _) = year
fun member (y, xs) = List.exists (fn x => y = x) xs
fun nub [] = []
  | nub (x::xs) = if member (x, xs)
                  then nub xs
                  else x :: nub xs

fun years records = nub (map year_of records)

여기 nub에는 O (n²) 의 점근 적 실행 시간 복잡도가 있으며 이는 나쁘고 불필요합니다. 다음과 같이 중복 항목을 삽입하지 않도록 목록을 접을 수도 있습니다.

fun member (y, xs) = List.exists (fn x => y = x) xs

fun years records =
    let
      fun insert ((_, year, _), years) =
          if member (year, years)
          then years
          else year :: years
    in
      foldr insert [] records
    end

그러나 점근 적 실행 시간은 동일하며 읽기가 약간 더 모호합니다. 효율적인 방식으로 중복 항목을 필터링하려면 트리 기반 집합 또는 유사 항목과 같이보다 효율적인 데이터 구조를 사용하여 중복 항목을 관리해야합니다. 하스켈, 이것은 간의 차이 nubnubOrd.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

두 개의 서로 다른 튜플 목록에서 튜플의 첫 번째 요소를 교차하는 방법

분류에서Dev

사전의 목록에서 튜플의 두 번째 요소에 따라 정렬

분류에서Dev

Python을 사용하여 튜플의 각 첫 번째 값에 대해 튜플의 두 번째 값 합계

분류에서Dev

Python을 사용하여 튜플의 각 첫 번째 값에 대해 튜플의 두 번째 값 합계

분류에서Dev

튜플 목록에서 모든 튜플의 두 번째 요소에 액세스하는 방법이 있습니까?

분류에서Dev

NumPy를 사용하여 튜플 목록의 두 번째 요소 중앙값 찾기

분류에서Dev

튜플의 두 번째 요소 (튜플 목록에서)를 문자열로 가져 오기

분류에서Dev

튜플의 두 번째 항목을 기반으로 고유 항목을 가져 오기 위해 itemgetter 및 list comp를 사용하여 튜플 목록 필터링

분류에서Dev

두 번째 요소가 동일하면 목록의 첫 번째 요소를 튜플에 병합 하시겠습니까?

분류에서Dev

두 번째 요소가 임계 값보다 큰 튜플의 분할 목록

분류에서Dev

파이썬은 목록에서 튜플의 두 번째 값을 얻습니다.

분류에서Dev

목록 내 튜플의 두 번째 요소 합계를 기반으로 목록을 정렬하는 방법은 무엇입니까?

분류에서Dev

목록에있는 튜플의 i 번째 요소를 다른 목록의 키에 매핑하여 사전을 만드는 방법

분류에서Dev

3-ples 목록에서 모든 튜플의 두 번째 요소를 제거하는 방법은 무엇입니까?

분류에서Dev

R에서 두 문자열 목록을 비교하고 두 번째 목록에서 첫 번째 목록의 각 요소 부분을 찾습니다.

분류에서Dev

두 목록에서 시작하여 각 목록의 동일한 인덱스 요소를 튜플 목록에 넣는 방법

분류에서Dev

튜플 목록에서 튜플의 첫 번째 요소 범위에 액세스

분류에서Dev

튜플 목록에서 두 번째 튜플 값 바꾸기

분류에서Dev

튜플 목록의 모든 첫 번째 요소에 대한 스칼라는 두 번째 요소의 최대 값을 얻습니다.

분류에서Dev

튜플 목록에 저장된 두 요소 튜플에서 두 목록을 만드는 방법

분류에서Dev

두 개의 사전 목록을 반복하고 루프없이 튜플 목록을 만듭니다.

분류에서Dev

목록의 3 개 튜플에서 첫 번째와 두 번째 요소 가져 오기-Haskell

분류에서Dev

Spark : 두 번째 요소를 문자열 목록으로 사용하는 튜플 인 RDD

분류에서Dev

목록에서 튜플의 첫 번째 요소 제거

분류에서Dev

스칼라에서 튜플 링하기 위해 목록의 각 두 요소를 패킹하는 방법은 무엇입니까?

분류에서Dev

목록 이해력을 사용하여 두 개의 다른 조건에 대한 튜플 목록을 만듭니다.

분류에서Dev

두 번째 요소로 튜플 목록 나누기-Python

분류에서Dev

첫 번째 요소를 기반으로 튜플 목록에서 사전 만들기

분류에서Dev

제외를 사용하여 튜플 요소에서 목록 만들기

Related 관련 기사

  1. 1

    두 개의 서로 다른 튜플 목록에서 튜플의 첫 번째 요소를 교차하는 방법

  2. 2

    사전의 목록에서 튜플의 두 번째 요소에 따라 정렬

  3. 3

    Python을 사용하여 튜플의 각 첫 번째 값에 대해 튜플의 두 번째 값 합계

  4. 4

    Python을 사용하여 튜플의 각 첫 번째 값에 대해 튜플의 두 번째 값 합계

  5. 5

    튜플 목록에서 모든 튜플의 두 번째 요소에 액세스하는 방법이 있습니까?

  6. 6

    NumPy를 사용하여 튜플 목록의 두 번째 요소 중앙값 찾기

  7. 7

    튜플의 두 번째 요소 (튜플 목록에서)를 문자열로 가져 오기

  8. 8

    튜플의 두 번째 항목을 기반으로 고유 항목을 가져 오기 위해 itemgetter 및 list comp를 사용하여 튜플 목록 필터링

  9. 9

    두 번째 요소가 동일하면 목록의 첫 번째 요소를 튜플에 병합 하시겠습니까?

  10. 10

    두 번째 요소가 임계 값보다 큰 튜플의 분할 목록

  11. 11

    파이썬은 목록에서 튜플의 두 번째 값을 얻습니다.

  12. 12

    목록 내 튜플의 두 번째 요소 합계를 기반으로 목록을 정렬하는 방법은 무엇입니까?

  13. 13

    목록에있는 튜플의 i 번째 요소를 다른 목록의 키에 매핑하여 사전을 만드는 방법

  14. 14

    3-ples 목록에서 모든 튜플의 두 번째 요소를 제거하는 방법은 무엇입니까?

  15. 15

    R에서 두 문자열 목록을 비교하고 두 번째 목록에서 첫 번째 목록의 각 요소 부분을 찾습니다.

  16. 16

    두 목록에서 시작하여 각 목록의 동일한 인덱스 요소를 튜플 목록에 넣는 방법

  17. 17

    튜플 목록에서 튜플의 첫 번째 요소 범위에 액세스

  18. 18

    튜플 목록에서 두 번째 튜플 값 바꾸기

  19. 19

    튜플 목록의 모든 첫 번째 요소에 대한 스칼라는 두 번째 요소의 최대 값을 얻습니다.

  20. 20

    튜플 목록에 저장된 두 요소 튜플에서 두 목록을 만드는 방법

  21. 21

    두 개의 사전 목록을 반복하고 루프없이 튜플 목록을 만듭니다.

  22. 22

    목록의 3 개 튜플에서 첫 번째와 두 번째 요소 가져 오기-Haskell

  23. 23

    Spark : 두 번째 요소를 문자열 목록으로 사용하는 튜플 인 RDD

  24. 24

    목록에서 튜플의 첫 번째 요소 제거

  25. 25

    스칼라에서 튜플 링하기 위해 목록의 각 두 요소를 패킹하는 방법은 무엇입니까?

  26. 26

    목록 이해력을 사용하여 두 개의 다른 조건에 대한 튜플 목록을 만듭니다.

  27. 27

    두 번째 요소로 튜플 목록 나누기-Python

  28. 28

    첫 번째 요소를 기반으로 튜플 목록에서 사전 만들기

  29. 29

    제외를 사용하여 튜플 요소에서 목록 만들기

뜨겁다태그

보관