각 입력 요소가 하나 이상의 출력 요소를 생성하도록 매핑 작업을 만드시겠습니까?

안토 논

최근에 저는 Haskell에서 프로그래밍을하는 방법을 알아 내려고합니다.

간단한 작업을하려고합니다. 지금은이 예제와 같은 작업을하고 있습니다.

input = [1,2,3,4]
output = [1,2,2,3,3,3,4,4,4,4]

즉, 각 요소 xinput생성 x요소 x의이 output. 따라서 1입력 요소 의 경우 출력에 추가하십시오 [1]. 그런 다음 2입력의 요소에 [2,2]대해 출력에 요소 추가합니다 . 그런 다음 element 3, append [3,3,3]등의 경우 알고리즘은 표준 숫자에서만 작동해야합니다.

나는 그것이 매우 쉽고 "정상적인"명령형 프로그래밍에서 그것을 수행하는 것은 사소한 일이라는 것을 알고 있지만, Haskell의 함수는 stateless이기 때문에 이에 접근하는 방법에 문제가 있습니다.

누구든지 Haskell 초보자가 어떻게 대처할 수 있는지 힌트를 줄 수 있습니까?

좌회전

방금 모나드를 발견하셨습니다!

수행중인 작업에 대한 일반적인 아이디어는 다음과 같습니다.

각각의 a입력에 - 요소 (컨테이너 형이다 M a여기, [a]), 당신은 완전히 새로운 컨테이너를 지정합니다 M b. 그러나 최종 결과로 하나의 "평면"컨테이너 만 필요 M b합니다.

자, Monad유형 클래스 의 정의를 살펴 보겠습니다 .

class (Applicative m) => Monad m where
  return :: a -> m a
  (>>=) :: m a -> (a -> m b) -> m b

정확히 필요한 것입니다. 그리고 목록은의 인스턴스 Monad이므로 다음과 같이 작성할 수 있습니다.

replicates :: [Int] -> [Int]
replicates l = l >>= \n -> replicate n n

또는 다음과 같이 작성할 수 있습니다.

replicates l = do
   n <- l
   replicate n n

이해하기 쉬운 목록 이해력을 아는 것이 흥미로울 수 있습니다.

replicates l = [ n | n <- l, _ <- [1..n] ]

chi가 제안한 것처럼 실제로는 다른 모나드 표현식에 대한 구문 설탕입니다.

     [ n | n <- l, _ <- [1..n] ] ≡ l >>= \n -> [1..n] >>= \_ -> return n

... 또는 적어도 이전 버전의 GHC에 있었지만 이제는 더 최적화 된 목록 이해 구현을 사용한다고 생각합니다. 여전히 -XMonadComprehensions플래그를 사용하여 탈당 변형을 켤 수 있습니다 .

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

하나가 변경 될 때 매핑 된 각 구성 요소의 구성 요소 상태를 업데이트하는 방법

분류에서Dev

스타일이 지정된 JSX 입력 요소 매핑이 예상대로 작동하지 않습니다.

분류에서Dev

두 소스를 하나의 출력으로 매핑

분류에서Dev

파이썬에서 입력의 각 줄로 요소를 포함하는 목록을 만드는 방법

분류에서Dev

필수 속성으로 입력 요소의 유효성을 검사하고 각 입력에 대한 레이블 텍스트를 가져옵니다.

분류에서Dev

각 요소를 해당 요소의 필드에 매핑하는 Java 컬렉션

분류에서Dev

XSLT를 사용하여 "wert"요소의 ID와 값만 출력 하시겠습니까?

분류에서Dev

jquery 변경 이벤트가 입력 요소를 호출하지 않습니다.

분류에서Dev

내 입력 요소가 수동으로 값을 업데이트하거나 표시하지 않습니다.

분류에서Dev

목록 이해력을 사용하여 목록의 각 요소 추출

분류에서Dev

구성 요소 루프를 출력하고 하나의 구성 요소 만 업데이트 될 때 전체 루프를 다시 렌더링하지 않도록합니다.

분류에서Dev

여러 반응 양식 입력을 처리하고 구성 요소의 상태를 업데이트합니다.

분류에서Dev

각도 구성 요소 [의 선택자]를 변수에 입력하는 방법은 무엇입니까?

분류에서Dev

(PHP) 한 줄 출력으로 출력하기 위해 행 요소를 나누는 HTML 테이블 내용을 정렬하는 방법은 무엇입니까?

분류에서Dev

배열의 각 요소를 거듭 제곱하고 출력을 bash의 새 배열에 저장합니다.

분류에서Dev

Angular를 사용하여 ShadowDOM 내의 요소에서 입력을 자동으로 지우시겠습니까?

분류에서Dev

각 시드가 고유 한 조합을 생성하도록 목록의 요소 그룹화

분류에서Dev

각도기 요소가 보이지 않는 입력 필드

분류에서Dev

1 차원 ndarray의 각 요소를 입력하는 방법

분류에서Dev

CUDA / 추력을 사용하여 배열에서 각 float4의 요소 하나를 설정합니다.

분류에서Dev

사용자에게 생성자의 매개 변수를 입력하도록 요청합니까?

분류에서Dev

사용자에게 생성자의 매개 변수를 입력하도록 요청합니까?

분류에서Dev

페이지 새로 고침을 클릭하면; 두 개의 입력 요소가 다시 나타 납니까?

분류에서Dev

각 요소가 1에서 n까지 인 n ^ 2 요소 목록의 모든 조합을 생성 하시겠습니까?

분류에서Dev

각 행이 동일한 html 요소 세트를 포함해야하지만 고유 ID가있는 <divs>로 테이블을 생성 하시겠습니까?

분류에서Dev

AutoMapper를 사용하여 단일 속성을 컬렉션의 각 요소 속성에 매핑하는 방법은 무엇입니까?

분류에서Dev

mongodb의 필터 후에 필요한 필드 만있는 배열을 출력 / 매핑하는 방법은 무엇입니까?

분류에서Dev

다른 입력이 다른 일을하도록 만드나요?

분류에서Dev

UiKit 구성 요소가 각도 입력을 받아들이지 않는 이유는 무엇입니까?

Related 관련 기사

  1. 1

    하나가 변경 될 때 매핑 된 각 구성 요소의 구성 요소 상태를 업데이트하는 방법

  2. 2

    스타일이 지정된 JSX 입력 요소 매핑이 예상대로 작동하지 않습니다.

  3. 3

    두 소스를 하나의 출력으로 매핑

  4. 4

    파이썬에서 입력의 각 줄로 요소를 포함하는 목록을 만드는 방법

  5. 5

    필수 속성으로 입력 요소의 유효성을 검사하고 각 입력에 대한 레이블 텍스트를 가져옵니다.

  6. 6

    각 요소를 해당 요소의 필드에 매핑하는 Java 컬렉션

  7. 7

    XSLT를 사용하여 "wert"요소의 ID와 값만 출력 하시겠습니까?

  8. 8

    jquery 변경 이벤트가 입력 요소를 호출하지 않습니다.

  9. 9

    내 입력 요소가 수동으로 값을 업데이트하거나 표시하지 않습니다.

  10. 10

    목록 이해력을 사용하여 목록의 각 요소 추출

  11. 11

    구성 요소 루프를 출력하고 하나의 구성 요소 만 업데이트 될 때 전체 루프를 다시 렌더링하지 않도록합니다.

  12. 12

    여러 반응 양식 입력을 처리하고 구성 요소의 상태를 업데이트합니다.

  13. 13

    각도 구성 요소 [의 선택자]를 변수에 입력하는 방법은 무엇입니까?

  14. 14

    (PHP) 한 줄 출력으로 출력하기 위해 행 요소를 나누는 HTML 테이블 내용을 정렬하는 방법은 무엇입니까?

  15. 15

    배열의 각 요소를 거듭 제곱하고 출력을 bash의 새 배열에 저장합니다.

  16. 16

    Angular를 사용하여 ShadowDOM 내의 요소에서 입력을 자동으로 지우시겠습니까?

  17. 17

    각 시드가 고유 한 조합을 생성하도록 목록의 요소 그룹화

  18. 18

    각도기 요소가 보이지 않는 입력 필드

  19. 19

    1 차원 ndarray의 각 요소를 입력하는 방법

  20. 20

    CUDA / 추력을 사용하여 배열에서 각 float4의 요소 하나를 설정합니다.

  21. 21

    사용자에게 생성자의 매개 변수를 입력하도록 요청합니까?

  22. 22

    사용자에게 생성자의 매개 변수를 입력하도록 요청합니까?

  23. 23

    페이지 새로 고침을 클릭하면; 두 개의 입력 요소가 다시 나타 납니까?

  24. 24

    각 요소가 1에서 n까지 인 n ^ 2 요소 목록의 모든 조합을 생성 하시겠습니까?

  25. 25

    각 행이 동일한 html 요소 세트를 포함해야하지만 고유 ID가있는 <divs>로 테이블을 생성 하시겠습니까?

  26. 26

    AutoMapper를 사용하여 단일 속성을 컬렉션의 각 요소 속성에 매핑하는 방법은 무엇입니까?

  27. 27

    mongodb의 필터 후에 필요한 필드 만있는 배열을 출력 / 매핑하는 방법은 무엇입니까?

  28. 28

    다른 입력이 다른 일을하도록 만드나요?

  29. 29

    UiKit 구성 요소가 각도 입력을 받아들이지 않는 이유는 무엇입니까?

뜨겁다태그

보관