2011-12-04 16 views
8

मैं हास्केल के लिए नया हूं और मुझे आश्चर्य है कि क्या हास्केल में किसी फ़ंक्शन के भीतर 'डीबग' लाइन आउटपुट करने का कोई तरीका है? अर्थात। मैं डिबग करने के लिए क्या मान एक समारोह में inputted किया जा रहा है चाहता हूँफ़ंक्शन में हास्केल प्रिंट लाइन्स

मेरे वर्तमान कोड

import Prelude 

foo(a,b,c) 
    print("input a : " ++ a) 
    = a + b + c 

main = print(foo(1, 2, 3)) 

मैं प्रोग्रामिंग के साथ अनुभव है, लेकिन यह मेरी पहली बार कार्यात्मक प्रोग्रामिंग के पास जा रहा है, इसलिए किसी भी मदद की सराहना की हो जाएगा ।

उत्तर

16

आप Debug.Trace.trace के लिए देख रहे हैं।

import Debug.Trace 
foo a b c = trace ("input a: " ++ show a) (a + b + c) 
main = print (foo 1 2 3) 

trace एक समारोह है कि अपनी दूसरी लौटने से पहले अपनी पहली तर्क प्रिंट है। हालांकि, यह संदर्भित रूप से पारदर्शी नहीं है, इसलिए इसे केवल डीबगिंग के लिए उपयोग किया जाना चाहिए।

साथ ही, ध्यान दें कि समूह के लिए केवल हास्केल में फ़ंक्शन एप्लिकेशन के लिए ब्रांड्स का उपयोग नहीं किया जाता है।

+0

बहुत बहुत धन्यवाद! मैं Google पर बंद हूं 'शो' अब – AlanFoster

+0

@ user551841, 'शो' एक मान का एक स्ट्रिंग प्रतिनिधित्व (प्रिंटिंग और ऐसे) के लिए उत्पादन करता है। –

+12

@ user551841: Google नहीं, [Hoogle] (http://www.haskell.org/hoogle/?hoogle=show)! यह हास्केल प्रलेखन के लिए एक विशेष खोज इंजन है, और इसमें _by type_ के कार्यों को खोजने में सक्षम होने की बजाय अनूठी विशेषता है। यदि आप हास्केल में जा रहे हैं, तो आप इसके साथ भी परिचित हो सकते हैं। – hammar

7

trace की @ Hammar के सुझाव के अलावा, आप traceShow इस्तेमाल कर सकते हैं (यह भी Debug.Trace से, और बस परिभाषित)

import Debug.Trace (traceShow) 
foo a b c = traceShow (a, b, c) (a + b + c) 
main = print (foo 1 2 3) 
संबंधित मुद्दे