람다 칼큘 꼴려서 겉핥기하려고
재귀함수 Y를 피보나치 예시로 보면서 따라가는 중인데
Y = λf.(λg.f (g g)) (λg.f (g g))
에서 이해하기 위해 각각의 함수들의 타입을 생각하고 있었음
피보나치의 경우
f는 (int->int) -> int -> int
g g는 int->int 인것은 쉽게 나왔는데
g하나의 타입이 좀 복잡함
나만 처음보는 걸 수도 있겠지만
그 타입을 x라 하면
x = x -> int -> int가 되서
x -> int -> int -> int -> int ...로 확장되던데
이렇게 자기 자신의 타입을 인자로 받는 함수 타입은 처음봐서
표기를 어떻게 하는지 궁금함
링크드 리스트나 트리가 그나마 .next나 .rchild 같은 거 했을 때 자기자신 타입 나오기는 하지만
걔네는 결과로 나오는 거라 타입에 이름 붙이고 그게 나올거야 하면 되는데
이건 조금 다르니까..
그냥 A타입에 .operator+(A) 하듯 그냥 이름짓고 하는게 똑같나?
x로 이름 짓고 하부에 x를 받으면 int->int를 내놓는 functor 느낌으로 만드는 거?
이미 x = x -> int -> int 라고 너가 표기했잖아 표기법이 궁금한게 아니라 구현이 궁금한거임?
이거 하나만 표현할때는 그렇게 되는데 그 타입을 인자로 받는 함수가 있다면 타입을 표현하기 힘들어져서
let x := x -> int -> int let f := x -> int 라 하면 될 것도 같은데 그렇게 되면 한타입의 표현 방식이 여러개가 되면서 타입이란게 의미가 있는지부터 헷갈리더라구
결국 0.9999...에 대해 0.9•(윗점) 같은 표기가 있는지 궁금함