유클리드 호제법을 리슾으로 표현해보자
만일 리슾 인터프리터가 normal order를 사용한다면?
(노말 오더는 기본 연산자(여기서는 %)가 올 때까지 함수의 적용을 미룬다)
206과 40의 최대공약수를 위에서 정의한 gcd로 구해본다
(gcd 206 40) (if (= 40 0) 206 (gcd 40 (% 206 40))) (gcd 40 (% 206 40)) (if (= (% 206 40) 0) 40 (gcd (% 206 40) (% 40 (% 206 40)))) (if (= 6 0) ; <-------------- %: 1 40 (gcd (% 206 40) (% 40 (% 206 40)))) (gcd (% 206 40) (% 40 (% 206 40))) (if (= (% 40 (% 206 40)) 0) (% 206 40) (gcd (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40))))) (if (= (% 40 6) 0) ; <-------------- %: 2 (% 206 40) (gcd (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40))))) (if (= 4 0) ; <-------------- %: 3 (% 206 40) (gcd (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40))))) (gcd (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40)))) (if (= (% (% 206 40) (% 40 (% 206 40))) 0) (% 40 (% 206 40)) (gcd (% (% 206 40) (% 40 (% 206 40))) (% (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40)))))) (if (= (% (% 206 40) (% 40 6)) 0) ; 4 (% 40 (% 206 40)) (gcd (% (% 206 40) (% 40 (% 206 40))) (% (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40)))))) (if (= (% (% 206 40) 4) 0) ; 5 (% 40 (% 206 40)) (gcd (% (% 206 40) (% 40 (% 206 40))) (% (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40)))))) (if (= (% 6 4) 0) ; 6 (% 40 (% 206 40)) (gcd (% (% 206 40) (% 40 (% 206 40))) (% (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40)))))) (if (= 2 0) ; 7 (% 40 (% 206 40)) (gcd (% (% 206 40) (% 40 (% 206 40))) (% (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40)))))) (gcd (% (% 206 40) (% 40 (% 206 40))) (% (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40))))) (if (= (% (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40)))) 0) (% (% 206 40) (% 40 (% 206 40))) (gcd (% (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40)))) (% (% (% 206 40) (% 40 (% 206 40))) (% (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40))))))) (if (= (% (% 40 (% 206 40)) (% (% 206 40) (% 40 6))) 0) ; 8 (% (% 206 40) (% 40 (% 206 40))) (gcd (% (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40)))) (% (% (% 206 40) (% 40 (% 206 40))) (% (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40))))))) (if (= (% (% 40 (% 206 40)) (% (% 206 40) 4)) 0) ; 9 (% (% 206 40) (% 40 (% 206 40))) (gcd (% (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40)))) (% (% (% 206 40) (% 40 (% 206 40))) (% (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40))))))) (if (= (% (% 40 (% 206 40)) (% 6 4)) 0) ; 10 (% (% 206 40) (% 40 (% 206 40))) (gcd (% (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40)))) (% (% (% 206 40) (% 40 (% 206 40))) (% (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40))))))) (if (= (% (% 40 (% 206 40)) 2) 0) ; 11 (% (% 206 40) (% 40 (% 206 40))) (gcd (% (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40)))) (% (% (% 206 40) (% 40 (% 206 40))) (% (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40))))))) (if (= (% (% 40 6) 2) 0) ; 12 (% (% 206 40) (% 40 (% 206 40))) (gcd (% (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40)))) (% (% (% 206 40) (% 40 (% 206 40))) (% (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40))))))) (if (= (% 4 2) 0) ; 13 (% (% 206 40) (% 40 (% 206 40))) (gcd (% (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40)))) (% (% (% 206 40) (% 40 (% 206 40))) (% (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40))))))) (if (= 0 0) ; 14 (% (% 206 40) (% 40 (% 206 40))) (gcd (% (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40)))) (% (% (% 206 40) (% 40 (% 206 40))) (% (% 40 (% 206 40)) (% (% 206 40) (% 40 (% 206 40))))))) (% (% 206 40) (% 40 (% 206 40))) (% (% 206 40) (% 40 6)) ;15 (% (% 206 40) 4) ;16 (% 6 4) ;17 2 ; use remainder(%) 18 times!
그만 정신을 잃고 말았습니다...
갤러야 리습 쓰더니 한글도 괄호 중첩 지리네
미루어둔 계산법
이렇게 너무나 미개한 방식이기 때문에 보통 쓰지 않는다고 한다
이 방법도 장점이 있는
(if (p) 이문제였던가
에엥 장점이 있읍니까? 허어
아 그거 applicative는 터지는데 이건 안 터지는
그 복잡한 수학문제 풀때 마지막에 *0있으면 0되는거처럼 늘여놓고 축약할때 숏컷이 가능
걍 그거말곤 없죠 근데
내가 생각하는 파이썬의 매력은 generators인데 미개하다니 슬프네요
하스켈은 lazy evaluation이 기본입니다.
이게 lazy임??? 아무리 봐도 구린데용
스까쓰는거 배울거임 3장인가에 thunk개념 나오면서
제너레이터 만드는거 있어요
올ㅋ