में वापसी मान का उपयोग करना है, तो मैं अगले if condition
को अगले if condition
को निष्पादित करने के लिए या नहीं निर्धारित करने के लिए पिछले if condition
की स्थिति की जांच करना चाहता हूं। प्रत्येक if condition
एक मूल्य वापस कर सकता है।नेस्केड को सरल कैसे करें- यदि Haskell
संपादित करें: के लिए खेद है कि उदाहरण मैं पहले थोड़ा अजीब लग रही है ... :( यह मेरा वास्तविक उदाहरण है, और मैं if-then-else
के लिए goingToMove को आसान बनाने में करना चाहते हैं प्रदान की
goingToMove p routes points w h =
if canMove p points
-- the point can be moved in the map
then let r = routes ++ [p]
l = remainList p points
in move p r l w h
-- the point cannot be moved in the maps
else []
move p routes points w h =
if (length routes) == 2
then routes
else let one = goingToMove (tallRightCorner p) routes points w h in
if (null one)
then let two = goingToMove(tallRightBCorner p) routes points w h in
if (null two)
then let three = goingToMove (tallLeftBCorner p) routes points w h in
if (null three)
then ....
...... -- until, let eight = ..
else three
else two
else one
संपादित करें: बुरा उदाहरण जब इस बात जावा में लिखा है, मैं एक अस्थायी बूलियन ध्वज का उपयोग कर सकते हैं, और एक परिवर्तनशील डेटा वापस।
public String move (int number){
// base case
if (number == 0){
return "Finished the recursion";
}
// general case
else {
String result;
boolean isNull = false;
if ((result = move(3)) == null){
isNull = true;
}
else {
return result;
}
// continue to execute the if-conditions if the previous condition failed
if (isNull){
if((result = move(2)) == null){
isNull = true;
}
else {
return result;
}
}
if (isNull){
if((result = move(1)) == null){
isNull = true;
}
else {
return result;
}
}
return null;
}
}
लेकिन हास्केल में, कोई म्यूटेबल डेटा नहीं है, और केवल if-then-else
स्थिति है। तो कोड इच्छा इस तरह दिखता है, और मैं क्योंकि मेरा असली काम में इस सरल करने के लिए चाहते हैं, तो if-then-else
के 8 स्तर जो भयानक और गंदा लग ....
move 0 = "Finished the recursion"
move n =
let one = move 3 in
if null one
then let two = move 2 in
if null two
then let three = move 1 in
then null
else three
else two
else one
क्या 'चाल' आप अपने जावा कोड में कॉल कर रहे हैं जैसा कि आप 'चाल' परिभाषित कर रहे हैं? यदि ऐसा है, तो मैं नहीं देखता कि यह गैर-शून्य इनपुट के लिए असीमित रूप से कैसे लूप नहीं करता है। 'चाल (3) 'कॉल' चाल (3) 'कॉल' चाल (3)' – rampion
आपके द्वारा प्रदान किया गया हैकेल कोड गलत प्रकार भी है। आप जावा कोड में किसी बिंदु पर स्पष्ट रूप से 'शून्य' लौट रहे हैं, जिसका अर्थ है कि हैकेल कोड 'Int -> शायद स्ट्रिंग' होना चाहिए, भले ही यह अनंत लूप न हो। ओह, और आपके द्वारा सुझाए गए हैंकेल कोड में सिंटैक्स त्रुटि भी है (इसमें एक लाइन के साथ एक लाइन गुम है?) जिससे आप यह पता लगाना मुश्किल हो जाते हैं कि आप क्या कर रहे हैं। – Carl
मैंने एक वास्तविक उदाहरण दिया है :(क्षमा करें – code4j