2013-03-31 33 views
9

Trong exercice trườngmẫu phù hợp trong GHCi

Tôi có Chức năng này

bar :: Float -> Float -> Float 
bar x 0 = 0 
bar 0 y = 0 
bar x y = x * y 

tôi gõ nó trong GHC như

let bar x 0 = 0; bar 0 y = 0; bar x y = x * y 

và đánh giá

bar foo 0 
bar 0 foo 

Tôi đã yêu cầu sửa đổi thanh để sử dụng '|' vì vậy tôi muốn làm một cái gì đó như:

let bar x y = | x 0 = 0 | 0 y = 0 | x y = x * y 

nhưng trong ghci tôi đã

parse error on input '=' 

Làm thế nào tôi có thể làm điều đó trong GHCi? Thực tế việc sử dụng kết hợp mẫu ('|') có thay đổi gì không?

+1

Thanh 'gốc' ban đầu của bạn sử dụng đối sánh mẫu.Bạn muốn tìm hiểu về [guards] (http://en.wikibooks.org/wiki/Haskell/Truth_values#Guards). – dave4420

+2

Bạn có thể đặc biệt thông minh và viết đơn giản là 'let bar | nếu không = (*) '... – leftaroundabout

+3

Xóa' = 'trước dấu hiệu bảo vệ đầu tiên, 'cho phép x y | x == 0 = ... | y == 0 = ... | nếu không = ... '. –

Trả lời

16

Nhìn vào cú pháp cho việc sử dụng lính gác:

bar x y | x == 0  = 0 
     | y == 0  = 0 
     | otherwise = x * y 

viết trên một dòng trong GHCi:

let bar x y | x == 0 = 0 | y == 0 = 0 | otherwise = x * y 
9

Sử dụng file

Đừng gõ mã của bạn trực tiếp vào ghci trừ khi nó thực sự là một lớp lót.

Lưu mã của bạn trong tệp văn bản có tên là PatternMatch.hs và tải mã đó bằng ghci bằng cách nhập.

:l PatternMatch.hs 

và sau đó nếu bạn thực hiện thay đổi (và tiết kiệm), bạn có thể tải lại tập tin trong ghci bằng cách gõ

:r 

Ngoài ra, bạn có thể đặt tên cho tập tin của bạn sau đó thực hiện họ đang ở, hoặc chỉ có một Temp.hs reusablle nếu nó thực sự là mã throwaway.

Bằng cách lưu nội dung vào tệp văn bản, bạn có thể chỉnh sửa và sử dụng lại dễ dàng hơn nhiều.

Modules

Sau đó bạn sẽ thu thập các chức năng có liên quan với nhau bằng một mô-đun thích hợp, để họ có thể được nhập khẩu vào các chương trình khác. Ví dụ, bạn có thể có

module UsefulStuff where 

pamf = flip fmap 

lưu trong một tập tin gọi là UsefulStuff.hs và sau đó trong tập tin khác bạn có thể

import UsefulStuff 

và sau đó sử dụng các chức năng từ UsefulStuff đó.

Mô-đun quá mức cần thiết cho những gì bạn đang làm bây giờ, nhưng nhận được quy trình chỉnh sửa, lưu, biên dịch lại, thử nghiệm, lặp lại, bạn sẽ tiết kiệm cho mình một chút công sức.

+0

Chào mừng đến với thế kỷ 21. Các tệp nằm trong một tủ có tay cầm bằng đồng. Trong ngày và tuổi này, những đứa trẻ tuyệt vời đã viết mã của họ trong JSFiddle và bật lên nút Run hoặc vọc trong một hộp cát Swift để thỏa mãn ngay lập tức, câu trả lời này sẽ không giành được nhiều người lập trình Haskell tiềm năng. Những đứa trẻ thực sự thú vị có lẽ đang hướng đến [Shen] (http://www.shenlanguage.org/), nơi chúng có thể có tất cả các chương trình chức năng và loại kiểm tra lòng tốt mà chúng muốn, và sau đó là một số. Và oh có, nó có một REPL cho phép đầu vào nhiều dòng "ra khỏi hộp", gõ chữ ký và tất cả. – ack

+1

@ack Tôi nghĩ bạn nhầm lẫn tôi với một người quan tâm đến những đứa trẻ thú vị, trong khi tôi thực sự chỉ quan tâm đến việc giúp mọi người tận dụng tối đa những công cụ tôi cũng sử dụng. Cảm ơn bạn đã spam về sham. – AndrewC

+0

Nếu bạn quan tâm nhiều đến vậy, có thể bạn đã có thể gọi [câu trả lời này] (http://stackoverflow.com/a/8443096/588561), không yêu cầu sử dụng tệp. – ack

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