> magicFunction 'l' '_' "hello world"
["he_lo world", "hel_o world", "hello wor_d"]
Có chức năng ma thuật như vậy trong Prelude chuẩn hoặc nó có thể được viết dễ dàng với các chức năng khác không?Tính toán tất cả các khả năng thay thế một ký tự bằng một ký tự khác
Và không, đây không phải là bài tập về nhà, nhưng vẫn không tốn quá nhiều thời gian cho việc giải pháp phức tạp của riêng bạn, tôi muốn tự làm điều đó hơn là phí thời gian của bạn;) chuẩn mực.
EDIT: Đây là nỗ lực đầu tiên của tôi:
import Data.List (findIndices)
replace i y xs = take i xs ++ y : drop (i+1) xs
magicFunction x y xs = map (\i -> replace i y xs) (findIndices (== x) xs)
Nó có thể được cải thiện? Chắc chắn một cái gì đó như replace
phải ở trong tiêu chuẩn? Tôi đã tìm thấy replace :: Eq a => a -> a -> [a] -> [a]
trong Network.CGI.Protocol
nhưng chữ ký sai.
bạn đang cố gắng để thực hiện một đường vòng lọc thô tục? XD – Mysticial
Có gì sai với chữ ký 'replace'? Đặt 'a ~ Char' thành' [a] ~ String', và chúng ta có '' Char '', vậy vấn đề là gì? – dave4420
@ dave4420 Vấn đề đầu tiên là nó nằm trong 'Network.CGI.Protocol' ... Khá ngẫu nhiên khi nhập cho loại chức năng này (mà bạn _can_ tìm thấy ở các vị trí thích hợp hơn) – Jedai