Winhugs를 사용하여 Haskell의 모든 감소를 인쇄 할 수 있습니까?
-
03-07-2019 - |
문제
다음 기능을 작성했고 Winhugs를 사용하여 실행했습니다.
teneven = [x | x <- [1..10], even x]
내 출력 :
Main> teneven
[2,4,6,8,10] :: [Integer]
(63 reductions, 102 cells)
어쨌든 모든 감축을 인쇄 할 수 있습니까? 그래서 나는 Winhugs에서 일어나는 핵심 평가를 배울 수 있습니까?
해결책
몇 가지 아이디어 :
디버그 명령 줄 옵션 (
:set +d
Hongs에서)는 유익하지만 매우 장점이며 Haskell 구문의 감소를 보여주지 않습니다.노력하다 모자 - 하스켈 트레이서. 방금 간단한 프로그램에서 시도해 보았는데 꽤 멋지다. 그래도 나는 창문에 있지 않으며, 그것을 실행하는 것이 얼마나 어려운지 모르겠습니다. 그것은 상당히 어려울 것입니다. 그것은 시원하고 본질적으로 당신이 원하는 것이기 때문에 부끄러운 일입니다. 실행되면 모자 에서이 정보와 같은 것을 얻을 수 있습니다.
main = {IO} teneven = [2,4,6,8,10] _foldr (\..) [1,2,3,4,5,6,7,8, ...] [] = [2,4,6,8,10] (\..) 1 [2,4,6,8,10] = [2,4,6,8,10] (\..) 2 [4,6,8,10] = [2,4,6,8,10] (\..) 3 [4,6,8,10] = [4,6,8,10] (\..) 4 [6,8,10] = [4,6,8,10] (\..) 5 [6,8,10] = [6,8,10] (\..) 6 [8,10] = [6,8,10] (\..) 7 [8,10] = [8,10] (\..) 8 [10] = [8,10] (\..) 9 [10] = [10] (\..) 10 [] = [10]
람다가 있습니다
even
. 또한 원한다면 모자는foldr
그리고 다른 내부 통화; 기본적으로 그렇게하지 않습니다.
다른 팁
여기에는 Debug.Trace 및 Hugs.Observe 사용의 몇 가지 예가 있습니다.
import Debug.Trace
fact :: Integer -> Integer
fact 0 = trace "fact 0 ->> 1" 1
fact n = trace ("fact " ++ show n) (n * fact (n-1))
import Hugs.Observe
fact :: Integer -> Integer
fact 0 = observe "fact 0" 1
fact n = observe "fact n" (n * fact (n-1))
이것이 Winhungs를 사용하여 모든 감축을 인쇄하는 방법을 파악하는 데 도움이되기를 바랍니다.
제휴하지 않습니다 StackOverflow