2012-06-29 14 views
5

Wiki page for Sudoku solutions में, एक समाधान "डॉट हैक" का उपयोग करने का दावा करता है। लिंक किए गए गिथब पेज अब और उपलब्ध नहीं हैं और मुझे इसके बारे में कुछ भी नहीं मिला।हास्केल "डॉट हैक"

इसके बारे में क्या है? यह क्या करता है? कैसे?

+0

मुझे आश्चर्य है कि यह .hack श्रृंखला से संबंधित है या नहीं। – Pubby

उत्तर

5

मुझे लगता है कि वह निम्न पंक्ति की चर्चा करते हुए है:

import Prelude hiding ((.)) 

जो कार्यात्मक रचना के लिए सामान्य (.) ऑपरेटर अक्षम करता है। इसके बजाए, एक ही नाम के साथ एक और ऑपरेटर का उपयोग किया जाता है, शायद उपयोगिता मॉड्यूल T.T से आयात किया जाता है। इस ऑपरेटर OOP भाषाओं में तरह बर्ताव करता है:

pretty_output solution = solution.elems.map(show).in_group_of(9) 
    .map(unwords).unlines 

जो (मुझे लगता है कि) आम तौर पर

pretty_output solution = (unlines . map unwords . in_group_of 9 . map show . elems) solution 

कि ऑपरेटर कैसा दिखेगा एफ # में |> ऑपरेटर की तरह ही काम करता है:

(|>) :: a -> (a -> b) -> b 
x |> f = f x 

जिसका उपयोग पाइप कार्यों के माध्यम से एक मूल्य (और अधिक पठनीय और बेहतर कार्यात्मक शैली, आईएमओ) के लिए किया जाता है:

pretty_output solution = solution |> elems |> map show |> in_group_of 9 |> map unwords |> unlines 

(|>) भी flip ($) जैसा ही है।

संपादित करें: यह "हैक" ऑपरेटर पहले से ही हास्केल में मौजूद है। एक ही रचना व्यवहार Control.Category से बाएँ से सही रचना ऑपरेटर के द्वारा प्राप्त किया जा सकता है: केवल

g x = x |> (f1 >>> f2 >>> f3) 

यह पाइप काम करता है, हालांकि, और वास्तव में सिर्फ f >>> g = g . f है।

+0

आप दोनों संस्करणों के साथ कुछ मुद्दों का इलाज करते हुए [यह] (http://stackoverflow.com/q/1457140/1346276) पढ़ना भी पसंद कर सकते हैं। – phg

4

यह OOP शैली उपयोग कर रहा है

thing.method 

सामान्य

method thing 

के बजाय thing पर कार्यों कॉल करने के लिए उदाहरण

row i = i `div` 9 
col i = i `mod` 9 
row_list i positions = positions.select(on_i_row) where 
    on_i_row pos = pos.row == i.row 
col_list i positions = positions.select(on_i_col) where 
    on_i_col pos = pos.col == i.col 
कि इस कार्यक्रम में

के लिए देखें।

संबंधित मुद्दे