मैं हास्केल सीखने की कोशिश कर रहा हूं, यह सोचकर कि यह Combinatorial Game Theory को लागू करने के लिए एकदम सही भाषा होगी। मैंने कुछ हद तक पायथन में इसे ओओपी सिद्धांतों और ऑपरेटर ओवरलोडिंग को पढ़ाने के लिए किया है, लेकिन हास्केल मुझे आकर्षित करता है क्योंकि यह इसके वाक्यविन्यास में अधिक गणितीय लगता है, और गणित पृष्ठभूमि होने पर मुझे वास्तव में यह पसंद है। इसके अलावा, आलसी रूप से लागू अनंत सूचियों को बहुत अद्भुत है।रिकर्सिव डेटा संरचनाओं को परिभाषित करना
वैसे भी, क्या मैं अब तक एक डेटा संरचना है कि संकलित लेकिन पहले समारोह मैं लिखा इसे का उपयोग किया है मुझे देता है:
Prelude> :l cgt
[1 of 1] Compiling Main (cgt.hs, interpreted)
cgt.hs:8:30:
Couldn't match expected type `([Game], b0)' with actual type `Game'
In the first argument of `fst', namely `b'
In the second argument of `(:)', namely `(fst b)'
In the expression: a : (fst b)
Failed, modules loaded: none.
यहाँ मेरी कोड है ...
--A game that is Zero (base case) is two empties
--Anything else must be two lists of games, a left list and a right list.
data Game = Zero
| Position ([Game], [Game])
putL :: Game -> Game -> Game
putL a b = Position (a :(fst b), snd b)
मुझे एहसास है कि एक गेम कुछ हद तक पेड़ की तरह है जैसा कि Wikibook पर चर्चा की गई है, लेकिन उनके पास अतिरिक्त प्रतिबंध हैं।
- एक स्थान (एक पेड़ नोड के लिए परिजन) कई संभावित चाल
- हो सकता है एक स्थिति केवल अन्य खेल
- एक विशेष खेल, शून्य नहीं है, कोई संभव चाल है कि हो सकता है।
- सभी गेम शून्य का उपयोग करके बनाए गए हैं।
तो मैं जब लिखा putL
मैं कहता हूँ, "b
के पहले भाग में एक खेल a
और एक अन्य खेल b
, और विपक्ष a
ले लो, और अकेले b
के दूसरे भाग को छोड़, एक स्थिति लौटने (जो एक है तरह का खेल)। " कम से कम, यही वह है जो मैं करने की कोशिश कर रहा हूं। इसके बजाय हास्केल सोच रहा है कि जिस प्रकार मैं लौट रहा हूं वह ([Game], b0)
है और मुझे नहीं पता कि क्यों।
धन्यवाद! तुम्हारी सहायता सराहनीय है।
वास्तव में, शून्य खेल पहले से ही 'स्थिति [] []' का प्रतिनिधित्व करती है नहीं किया जा सकता है, तो यह के लिए एक अतिरिक्त निर्माता के लिए कोई जरूरत नहीं है । – hammar
मैं देखता हूं। मैंने एक ट्यूपल का उपयोग किया क्योंकि मैं केवल पदों के दो सेट रखना चाहता था, लेकिन यह अनावश्यक है क्योंकि दो सूचियों को डेटा संरचना में परिभाषित किया गया है। और फ़ंक्शन के लिए, आप परिभाषित कर सकते हैं कि स्थिति के रूप में किस प्रकार में जाता है, जो मैं चाहता था उसे वापस कर देता हूं। –