2011-12-04 41 views
8

Tôi mới sử dụng Haskell và tôi tự hỏi liệu có cách nào để xuất các dòng 'gỡ lỗi' trong một hàm trong Haskell không? I E. Tôi muốn gỡ lỗi gì giá trị đang được đầu vào thành một chức năngDòng in Haskell có chức năng

mã hiện tại của tôi là

import Prelude 

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

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

Tôi có kinh nghiệm với lập trình, nhưng đây là lần đầu tiên tôi đi gần lập trình chức năng, vì vậy bất kỳ trợ giúp sẽ được đánh giá cao .

Trả lời

16

Bạn đang tìm kiếm 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 là một hàm in đối số đầu tiên trước khi trả về giá trị thứ hai. Tuy nhiên, nó không phải là tham chiếu trong suốt, vì vậy nó chỉ nên được sử dụng để gỡ lỗi.

Ngoài ra, lưu ý rằng dấu ngoặc đơn không được sử dụng cho ứng dụng chức năng trong Haskell, chỉ để nhóm.

+0

cảm ơn rất nhiều! Tôi tắt cho google những gì 'show' hiện nay – AlanFoster

+0

@ user551841, 'show' tạo ra một chuỗi đại diện của một giá trị (để in và như vậy). –

+12

@ user551841: Không phải Google, [Hoogle] (http://www.haskell.org/hoogle/?hoogle=show)! Nó là một công cụ tìm kiếm chuyên biệt cho tài liệu Haskell, và nó có tính năng khá độc đáo để có thể tìm kiếm các hàm _by type_. Nếu bạn đang đi vào Haskell, bạn cũng có thể làm quen với nó. – hammar

7

Ngoài đề nghị @ Hammar của trace, bạn có thể sử dụng traceShow (cũng từ Debug.Trace, và chỉ đơn giản định nghĩa)

import Debug.Trace (traceShow) 
foo a b c = traceShow (a, b, c) (a + b + c) 
main = print (foo 1 2 3) 
Các vấn đề liên quan