هل من الممكن طباعة كافة التخفيضات في هاسكل - باستخدام WinHugs؟

StackOverflow https://stackoverflow.com/questions/416956

سؤال

لقد كتبت الوظيفة التالية ..وتنفيذها باستخدام WinHugs

teneven =  [x | x <- [1..10], even x]

مخرجاتي:

Main> teneven
[2,4,6,8,10] :: [Integer] 
(63 reductions, 102 cells)

هل هناك على أية حال لطباعة كافة التخفيضات..حتى أتمكن من معرفة التقييم الأساسي الذي يحدث داخل WinHugs؟

هل كانت مفيدة؟

المحلول

بعض الافكار:

  1. خيار سطر أوامر التصحيح (الذي يمكنك ضبطه باستخدام :set +d في Hugs) غنية بالمعلومات، ولكنها مطولة للغاية ولا تظهر لك التخفيضات في بناء جملة Haskell.

  2. يحاول القبعة - هاسكل تراسر.لقد جربته للتو على برنامج بسيط وهو رائع جدًا.أنا لا أستخدم نظام التشغيل Windows، ولا أعرف مدى صعوبة تشغيله.من المحتمل أن يكون الأمر صعبًا إلى حد ما، وهو أمر مؤسف لأنه رائع وهو في الأساس ما تريده.إذا قمت بتشغيله، يمكنك الحصول على شيء مثل هذه المعلومات من Hat:

    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.أيضًا، إذا كنت تريد، يمكن لـ Hat تتبع مكالمات 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.

صدقني، أنت لا تريد أن تذهب بهذه الطريقة.

مجموعة (وترتيب) التخفيضات المستخدمة في كل حالة معينة ستعتمد على تطبيق لغة معينة (العناق يمكن أن يفعل ذلك بطريقة واحدة، ghci - بطريقة أخرى، jhc - بطريقة أخرى، وما إلى ذلك).

من الأفضل أن تقرأ شيئًا عن الطرق العامة لتنفيذ برنامج التحويل البرمجي/المترجم الفوري/الجهاز الظاهري للغة الوظيفية - مثل جهاز SECD، وما إلى ذلك.

عدة روابط:

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top