#haskell
Вопрос:
Я определил два типа, как показано ниже, с Vname, представляющим имя переменной в виде строки, и Val, представляющим целое значение:
type Vname = String type Val = Int type State = ...
с состоянием типа, которое еще предстоит определить (я также не уверен, правильно ли я сделал Vname и Val). Состояние должно быть отображением между Vname и Val, и я предполагаю, что оно будет соответствовать:
type State = Vname-gt;Val
но я действительно не уверен. Любые разъяснения по этому поводу были бы полезны.
это для реализации низкоуровневой машины с командами для работы со стеком, с Vname
именем переменной числа, которое вы помещаете в стек, и Val
значением. Типы существуют для пользовательских входных имен ghci.
Спасибо.
Комментарии:
1. На этот вопрос невозможно ответить в его нынешнем виде. Как мы должны знать, для чего предназначен любой из этих типов?
2. @leftaround о том, что это для реализации низкоуровневой машины с командами для работы со стеком, где Vname-имя переменной числа, которое вы помещаете в стек, а Val-значение. Типы существуют для пользовательских входных имен ghci. Я надеюсь, что это полезно, я приношу извинения, если нет, меня не слишком эффективно учили Хаскеллу.
Ответ №1:
Чтобы быть точным, вы определили два псевдонима типов, а не два типа.
State
может быть функцией:
type State = Vname -gt; Maybe Val foo :: State foo "x" = Just 3 foo "y" = Just 5 -- etc foo _ = Nothing
или это может быть список пар имя/значение.
type State' = [(Vname, Val)] foo' :: State' foo' = [("x", 3), ("y", 5)]
Обратите внимание, что foo
и x -gt; lookup x foo'
(или flip lookup foo'
) в основном выполняют одну и ту же функцию.
То, что вы выберете, в основном зависит от того, как вы планируете использовать значение типа State
. Иногда функция будет более удобной, в других случаях список пар. Я мог бы склониться к списку, так как проще создать функциональную форму (используя lookup
, как показано выше) из списка, чем создать список из функции (поскольку для этого требуется список значений, к которым применяется функция).