2010-03-18 44 views

Trả lời

30

là gì Có một mô-đun printf trong GHC.

import Text.Printf 
str :: String 
str = printf "%d %d" 10 20 

tuy nhiên nó có lẽ là đơn giản chỉ làm

str = show 10 ++ " " ++ show 20 
+0

Không hoạt động Tôi nhận được 'ERROR filename.hs: 3: Không thể biện minh cho ràng buộc trong ràng buộc rõ ràng đã gõ'. Tôi đang sử dụng WinHugs. –

+13

Bạn nên chuyển sang GHC. Hugs không được duy trì, chậm và hỗ trợ rất ít gói trên Hackage. Nó cũng không phải là một phần của đặc tả nền tảng Haskell. –

+0

'Text.Printf.printf' trả về một hành động IO (' IO() ') khi được áp dụng đầy đủ, không phải là một' Chuỗi'. – SwiftsNamesake

4

Đây có phải là những gì bạn đang tìm kiếm?

printf "%d %d" 10 20 

Xem Text.Printf.

22

Bạn có thể sử dụng các chức năng được cung cấp bởi format gói text-format-simple:

import Text.Format 
format "{0} {1}" [show 10, show 20] 

Chức năng này có chữ ký:

format :: String -> [String] -> String 

Vì vậy, tất cả bạn cần là cung cấp các thông số của bạn như dây đàn.
Một ví dụ khác:

format "Some {0} believes that 1 + 1 = {1}." ["people",show 10] 
+0

Chà! Định dạng kiểu C# trong haskell. Công việc tuyệt vời Dmitry! và chào mừng bạn đến với stackoverflow! –

+4

Tôi khuyên bạn nên/không/sử dụng gói đó, vì nó rất hạn chế trong những gì nó có thể làm. Tôi đang làm việc trên một gói có tên [định dạng văn bản] (http://hackage.haskell.org/package/text-format) thường có khả năng hơn và hoàn toàn có thể sử dụng cho mục đích này. –

+0

Dmitry, tất cả các gói bạn liệt kê tiết kiệm cho chuyển đổi kép được bao gồm trong Nền tảng Haskell. Phần lớn người dùng sẽ không phải cài đặt nhiều. Đối số của bạn vẫn hợp lệ. –

6

Đưa trả lời ở đây trong trường hợp ai đó tìm kiếm định dạng thư viện trong Haskell trên StackOverflow. Có thư viện định dạng nhanh và an toàn loại được gọi là fmt ngay bây giờ. Với nó, bạn có thể viết mã như thế này:

> "There are "+|n|+" million bicycles in "+|city|+"."