2011-11-07 36 views
9

Có thể nếu đưa ra một chuỗi tôi có thể nhận được mỗi ký tự sáng tác chuỗi đó không?Haskell nhận mảng ký tự từ chuỗi?

+0

Yes. Tôi nghĩ rằng các chuỗi là danh sách char trong Haskell. –

+0

Bạn muốn làm gì với các ký tự? –

+0

Có, hàm này được gọi là 'id'. –

Trả lời

11

Trong Haskell, chuỗi chỉ là (danh sách) các ký tự; bạn có thể tìm thấy dòng

type String = [Char] 

một nơi nào đó trong nguồn của mọi triển khai Haskell. Điều đó làm cho các nhiệm vụ như tìm sự xuất hiện đầu tiên của một ký tự nhất định (elemIndex 'a' mystring) hoặc tính tần số của mỗi ký tự (map (head &&& length) . group . sort) không đáng kể.

Vì lý do này, bạn cũng có thể sử dụng cú pháp thông thường cho các danh sách có chuỗi. Trên thực tế, "foo" chỉ là đường cho ['f','o','o'], mà lần lượt chỉ là đường cho 'f' : 'o' : 'o' : []. Bạn có thể ghép mẫu, vẽ bản đồ và gấp chúng theo ý muốn. Ví dụ: nếu bạn muốn lấy phần tử tại vị trí n của mystring, bạn có thể sử dụng mystring !! n, miễn là 0 <= n < length mystring.

+0

'tổng hợp bản đồ. nhóm . sắp xếp' bị gõ sai cho chuỗi. Có lẽ bạn có nghĩa là một cái gì đó giống như 'map (head &&& length). nhóm . sắp xếp'? – hammar

+0

@hammar: Cảm ơn – fuz

+0

Vì vậy, nói rằng tôi đã thông qua một chuỗi trong như một tham số cho một chức năng, làm thế nào tôi thực sự sẽ truy cập mỗi char? sử dụng bản đồ? – user997112

6

Loại string chỉ là alias cho [Char] vì vậy bạn không cần phải làm gì cả.

Prelude> tail "Hello" 
"ello" 
Prelude> ['H', 'e', 'l', 'l', 'o'] 
"Hello" 
Prelude> "Hello" !! 4 
'o' 
10

Vâng, câu hỏi không nói anh ấy muốn một mảng:

import Data.Array 
stringToArray :: String -> Array 
stringToArray s = listArray (0, length s - 1) s 
+0

Đây là những gì tôi đã tìm kiếm. Trong thực tế, đây là câu trả lời * đúng * cho câu hỏi, ngay cả khi đó không phải là ý định của OP. – setholopolus

Các vấn đề liên quan