2011-11-13 46 views
8

Tôi đang cố gắng viết một hàm để chấp nhận chuỗi gồm 4 số cách nhau trong một chuỗi, tách biệt và chuyển đổi chúng thành số nguyên, và đặt chúng trong 4 biến số nguyên riêng lẻ. Tôi biết tôi có thể sử dụng splitWs chia chúng thành một mảng chuỗi, sử dụng !! để truy cập các yếu tố cá nhân, và một cái gì đó như sau để chuyển đổi để nguyên:Chuyển đổi chuỗi số khoảng trắng được phân tách thành chuỗi thành số nguyên và đặt chúng trong các biến

f :: [String] -> [Int] 
f = map read 

Nhưng tôi không thể tìm ra cách để đưa nó tất cả cùng nhau.

Trả lời

0

Không có biến nào trong Haskell, trong chuỗi Haskell được biểu diễn dưới dạng danh sách. Vì vậy,

thử:

import Data.List.Utils 
nums=map read $split " " "1 2 3 4" :: [Int] 

Bạn có thể truy cập vào các yếu tố duy nhất với (!!):

> nums(!!)0 
1 

HTH Chris

+0

tại sao không sử dụng 'splitWs' thay vì' chia "" '? – nimi

+5

Tại sao không sử dụng ['words'] (http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v%3awords) thay vì? –

+0

'!!' không hiệu quả so với đối sánh mẫu vì 4 danh sách traversals so với 1 – nponeccop

12

Sử dụng words chức năng để phân chia các chuỗi bởi khoảng trắng. Sau đó, bạn có thể map read kết quả.

Do đó, một thực hiện đơn giản sẽ là:

readNumbers :: String -> [Int] 
readNumbers = map read . words 

Sau đó, nếu bạn cần chính xác bốn số, sử dụng mô hình phù hợp:

case readNumbers string of 
    [a,b,c,d] -> ... 
    _   -> error "Expected four numbers" 
Các vấn đề liên quan