對於Haskell,我真的很新,我需要返回一個「已修改」輸入函數的函數。如何根據輸入返回調用另一個函數的函數?
我想你不能複製和修改原始函數(基於某些條件),所以你必須直接實現自己的行爲,然後調用原始函數?
這是我的方法:
switchFirstEgg eggCarton = if eggCarton 1 == 0
then switchedCarton where switchedCarton position = if position == 1 then 2 else eggCarton position
else if eggCarton 1 == 1
then switchedCarton where switchedCarton position = if position == 1 then 0 else eggCarton position
else if eggCarton 1 == 2
then switchedCarton where switchedCarton position = if position == 1 then 1 else eggCarton position
else switchedCarton where switchedCarton position = eggCarton position
我從GHCI得到的錯誤是
哈斯克爾/ eggcartons.hs:42:54:輸入解析錯誤 '其中'
哪個指向第一個字之後的第一個字where
。
(參考:我也想在這裏設置多個支架http://pastebin.com/2wTqAqpm,我試圖與警衛http://pastebin.com/RVm28Y7n這樣做,但這只是使事情變得更糟而不會操作裝配理解,至少警衛工作對我來說這裏http://pastebin.com/uQeFwLU5?)
我搜索了Haskell中的函數,但我只有幾個隨機信息,我使用了我所做的where
事情。
我的理念對嗎?這只是一個小錯誤嗎?
任何幫助進一步閱讀有關返回函數的語法也非常感謝!
我不同意用'ec'更換'eggCarton'和'sc'的'switchedCarton'有助於提高可讀性。否則,這是一個很好的答案。 – WolfeFan
@WolfeFan:好吧,在這種情況下,原始版本很難閱讀,因爲它的寬度很寬。將變量縮寫爲兩個字母當然不總是一個好主意,但是任何經常出現八次的名字都應該保持較短(或者至少在本地被別名爲短)。 – leftaroundabout
很好的答案。請注意,如果'pos'爲'1'且'ec 1'爲'3',最後一個答案將會崩潰,這與以前的替代方法不同,因爲這種情況並非詳盡無遺。當然,可以在案件中添加'_ - > ec pos'來防止這種情況發生。 – chi