나는 그 문서는 R.chain와 그 배열의 하나가 (끝)에 배열의 첫 번째 값을 추가하는 방법을 설명 buzzdecafe's Chain chain chain article는
이해하려고 노력하고 있어요 '체인' , 그리고 그것이 작동하는 이유. 그는
헤드 타입 m의 것을 쓴다 다섯 번째 마지막 단락에서
const f = chain(append, head); //=> f :: [x] -> [x]` f([1, 2, 3]); //=> [1, 2, 3, 1]
그냥 그렇게하지 않는 함수형 프로그래밍을 실험하기 시작했다 사람으로
.
배열에서 기능으로 또는 그 반대로 여러 종류의 체인에서 기사로 진행되는 대체를 완전히 이해하지 못합니다.
R.chain의 유형은 다음과 같습니다
(a -> m b) -> m a -> m b
내가 체인 가 함수가 될 수 있다는 것을 이해합니다. 따라서 R.append는 x → [x] → [x]
형식을 a -> m b
으로 다시 쓸 수 있으며 R.chain 형식의 첫 번째 부분에 맞습니다. 나는 우리가 이제 m b
이 [x] -> [x]
이되도록 정의 했으므로 마지막 m b
도 이이 [x] -> [x]
으로 대체되어야합니까? 우리는 같을 것이다 가지고있는 경우에
:
(a -> [x] -> [x]) -> m a -> ([x] -> [x])
그리고
A와 X는 우리가 (이 경우 번호에) 동일한 유형이 될 것입니다 때문에 : 그래서(x -> [x] -> [x]) -> m x -> ([x] -> [x])
을 첫 번째 과거는 R.append와 일치합니다. 끝은 반환 된 함수의 유형과 일치합니다. 좋아요, 일종의 생각입니다 ...
... 그 사이에 m x
은 R.head에 어떻게 맞습니까? m x
은 x 유형의 것을 반환하는 함수가 될 수 있습니까? 승인? 그러나 그 기능에 대한 투입물은 어떻습니까? 어떻게하면 [x]
이 R.chain 유형과 호환되는 유효한 입력이되고 나머지는 수식 조작을 볼 수 있고 이해할 수 있습니까? > (X - -> a) -> (X -> B)
쇄 : (-> (X -> b) a)이가는로부터
감사합니다 당신은 그것을 매우 간단하게 보였습니다. 저는 더 많이 이해합니다. 그러나 "왜 x는 x를 취하는 함수가 될 것인가"라는 이유를 이해하지 못합니다. 모든 "m"*은 입력과 동일한 유형을 가져야합니까? 나는 'm a'와 'm b'가 서로 다른 결과 (a와 b)를 가지기 때문에 혼란 스럽다고 생각합니다. 그래서 입력이 동일해야합니다. –
('x -> a'및 'x -> b'의 x)입니다. –
@ taz0k 이해할 수 있듯이,'mb '의'm'은'b' 부분 이외의'mb'를 정의하는 것과 관련된 것으로 볼 수 있습니다. 그래서'mb'가''x''를 반환하고''b''를 반환하는 함수이면''m''은''x''를 취하고 a를 반환하는 함수를 가리 킵니다. "_ 그 부분. 'x -> a'와 'x -> b'사이의 'x ->'부분은 그들이 공통적으로 가지고있는 부분이고 ("m"으로 캡슐화되어있다), "a"또는 "b"부분은 무엇이 구별되는지 그것들은'm'과'mb'의 외부에있는 이유입니다. – JLRishe