2017-01-20 125 views
0

我們目前正在從大學來完成一項任務,我們並沒有完全理解(請解決方案,但只有想法或建議)。Haskell - 有一個函數調用函數

什麼是給出一個類型:

type MyType = String -> String 

現在,我們正在努力能夠有一個功能,這需要2個字符串和函數(類型),然後給出一個函數(類型)

myCode :: String -> String -> MyType -> MyType 

,我們已經實現了一個功能,它可以作爲一個MyType的:

emptyString :: MyType 
emptyString :: (\a -> "") 

助教sk應該能夠存儲幾個2x字符串。這是我們目前的想法:

myCode :: String -> String -> MyType ->MyType 
myCode a b c = (\x -> b) 
在這種情況下

我們有一個輸入字符串是「你好」,另一個是「世界」,然後爲c我們把在「emptyString」。 這適用於一個字符串,因爲當我們鍵入控制檯以下:

a = (myCode "Hello" "World" emptyString) "" 

我們得到了「世界」上輸入「A」。現在最困難的部分是:我們應該能夠存儲其中的幾個(搜索它們是另一個任務,現在不需要)。我們認爲聲明另一個變量的時候,我們也許可以用「一」現在:

b = (myCode "1" "2" a) "Hello" "World" emptyString "") 

這就需要在「B」另存爲「A」,並在此的「emptyString」的功能。正如你可能已經猜到 - 它不工作!而且我們對如何繼續從現在開始真的感到不知所措。

當你到達這個部分,這意味着你花時間瞭解我們對我們任務的複雜解釋 - 非常感謝。

感謝您的建議和提前的幫助!

+1

什麼是「商店」?什麼是「2x字符串」? –

+2

這是對「電話簿」練習的混淆嗎? –

+1

它看起來像最近的問題一樣的任務http://stackoverflow.com/questions/41753366/identifying-input-values-for-which-a-function-does-not-generate-a-specific-outpu – amalloy

回答

1

從amalloy在評論中鏈接的問題看來,您似乎正在嘗試基於類似範式的延續傳遞風格來構建電話簿。

基本上,什麼是應該發生的你的類型

myCode :: String -> String -> MyType -> MyType 

是,你將生成一個數據dat = myCode a b pb,這是MyType類型。因此,您可以使用s :: String查詢dat,它會輸出另一個String。在dat s操作,如果你把它擴展到定義,

dat s = myCode a b pb s 

你有機會獲得三根弦,ab,不管pb s回報。您將通過使用abs或者將其推向pb的方式進行遞歸來構建功能,讓延續處理它。

希望這可以幫助不要太多。

+0

如此容易猜測的任務 - 必須是一個常見的:)非常感謝您的幫助 – Fapprentice