2017-01-20 12 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) 

в данном случае мы имеем входную строку, которая является «Hello» и еще один, который «Мир», а затем с положит в «emptyString». Это работает для одной строки, потому что когда мы вводим следующую команду в консоли:

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

мы получаем «Мир» на входе «а». Теперь сложная часть: мы должны иметь возможность хранить несколько из них (поиск их - еще одна задача, которая не нужна прямо сейчас). Мы думали, что мы могли бы быть в состоянии использовать «а» теперь, когда объявить еще одну переменную:

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

Это называют в «Ъ» функции сохранены как «а» и в это «emptyString». Как вы, возможно, догадались - это не работает! И мы действительно не понимаем, как продолжать.

Когда вы достигли этой части, это означает, что вы нашли время, чтобы понять наше сложное объяснение нашей задачи - большое спасибо.

Спасибо за предложения и помощь заранее!

+1

Что такое "store"?Что такое «2x Strings»? –

+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. Итак, вы можете запросить dat с s :: String, и он выведет еще String. В работе dat s, если развернуть его к определению

dat s = myCode a b pb s 

у вас есть доступ к трем струнам, a, b, и каким бы то ни pb s возвращаются. Вы создадите функциональность рекурсивно, либо сделав что-то с помощью ab и s, либо проталкивая его по дороге до pb, позволяя продолжению обрабатывать его.

Надеюсь, что это поможет, не отводя слишком много.

+0

Так легко догадаться, задача - должна быть общей :) Большое спасибо за вашу помощь – Fapprentice