클로져의 개념을 유심히 생각하다보니까

대략 클로져가 성립하기 위한 조건을 유추할수 있을거 같아요


1. 변수명(심볼)들은 참조일 뿐이고 실제 데이터는 힙에 할당된것마냥 딴곳에 따로 존재함
2. 함수가 객체로 분리됨, 그래서 함수가 선언될 시간의 어휘적인 환경(변수명 유효범위)을 함수객체 어딘가에다 저장함


자바스크립트 같은 경우 동적 타입이지만 변수를 쓰려면

반드시 앞대가리에 var 를 써서 지역변수임을 분명히 하기 때문에

어떤 유효범위에 속했나 깔끔하게 알수 있는데


파이썬의 경우에는 그냥 변수 선언이 없었어도 그냥 바로 사용이 되기 때문에

무조건 가장 안쪽 유효범위에만 바인딩 되는 단점이 있네요 (파이썬 2.X)

def foo():
    n = 100
    def boo():
        n -= 1 # 파이썬 2.X에서 불가능, 이시점에서 n은 바깥쪽 foo 유효범위를 의도한거지만 무조건 안쪽 유효범위만 가능해서..에러남
    return boo

func = foo()    # 함수를 리턴
func()            #리턴 받은 함수를 실행


이걸 해결하는 방법으로는 리스트의 값으로 바꾸거나.. ㅡㅡ

파이썬 3에서는 nonlocal 이라는 키워드까지 도입을 했네요

def foo():
    n = 100
    def boo():
        nonlocal n
        n -= 1
    return boo

func = foo()    # 함수를 리턴
func()            #리턴 받은 함수를 실행



솔직히 파이썬은 처음부터 펑셔널을 지원할 생각은 없었는데

그냥 대충 나중에 개념을 끼워넣은듯한 느낌이 들기더 해여

lambda 함수가 그 대표적인 예인듯.. 좀 어거지같은 느낌



여기서 루비가 왜 , while, for, if, return ... 와 같은 놈들을

표현식으로 만들었는지 이해가 가네요

리얼 펑셔널하네요



또 망령이 들었나

태생부터 펑셔널인 언어 하나 해보고 시픈 유혹이 슬금슬금

예전에 스킴 좀 하다가 짜증나서 때려쳤는데 ㅋㅋ

프갤에 하스켈 취미로 파는 흉들 있잖아요 ㅠㅠ


얼랭인가? 이거 병렬로 동작하는거 촙내 빠르다던데

아는횽 잇듬?