2014-10-01 3 views
2

최근에 하스켈을 배우기 시작했고 지금 당장 수업을 시작했습니다. 피아노 (Phano) 번호 클래스를 구성하고이를 Num typeclass에 인스턴스화했습니다.하스켈 피아노 (Haskell Peano) 곱셈의 숫자와 게으름

강의 도중 교수님이 후계자 기능을 S x = x + 1 또는 S x = 1 + x으로 보았는지 여부에 따라 곱셈 정의에 대한 적절한 후속 사례가 달라질 것이라고 내 교수는 주장했습니다. 각각 :

x * S y = x * y + x 
x * S y = x + x * y 

또한, 그는 그것이 lazier는하지만 문제가이 경우 어떻게보고하는 데 문제가 있기 때문에이 두 가지 선택의 첫 번째를 사용하는 것이 바람직하다 주장했다.

우리는 x + y == z을 평가하는 것이 훨씬 더 빨리 발생하지만 곱셈에 대한 유사한 사례를 찾을 수 없기 때문에

x + S y = S (x + y) 

의 추가 정의가보다 나은

x + S y = S x + y 

인의 예를 바라 보았다.

강의 노트 현재 위치 : http://cmsc-16100.cs.uchicago.edu/2014/Lectures/lecture-02.php

+0

질문에 작은 오류가 많이있는 것 같습니다 – Carsten

+1

곱셈의 정의가 후행 함수를 사용하지 않으므로 (첫 번째 질문은 무엇을해야할지 모르겠습니다. 'S'형식 생성자와 이 모든 다른 정의 할 수 없습니다) 나머지는 – Carsten

+0

나는 당신이 준 링크에서 당신의 교수보다 더 잘할 수 없다고 말해야 만합니다 - 설명은 아주 좋습니다. IMHO - 어쩌면 당신은 이해할 수없는 부분을 복사 할 수 있습니다. 그들에 대해 이야기하십시오 – Carsten

답변

0

게으름은 약 속도하지만 얼마나 빨리볼 수 없습니다.

infinity * (S (S Z)) > 5 
infinity * (S Z) + infinity > 5 
infinity * Z + infinity + infinity > 5 
infinity + infinity > 5 

(거기에서 나머지는 사소한) 나는 모든 생각하지 않는다, 그러나

을 : 그것은 그래서 확장 때문에 x * S y = x * y + x

당신은 매우 빠르게 infinity * 2 > 5에 응답 할 수 있습니다 당신의 교수가 주장한만큼 좋았습니다! 이 형식주의에서 2 * infinity > 5을 확장하려고하면 실망하게됩니다 (또는 매우 오랜 시간 동안 바쁘다 : -P). 다른 한편, 곱셈의 다른 정의와 함께, do 대답을 얻으십시오. 우리는 또한의 "좋은"정의가있는 경우

지금, 나는는 당신이 중 하나 위치에 무한대로 답을 얻을 수있는 경우에해야한다고 생각 . 실제로 Nats를 정의하는 몇 가지 하스켈 패키지의 출처를 확인한 결과 실제로 교수님이 주장한 방식보다 x * S y = x + x * y을 선호했습니다.