У меня есть рекурсивная функция, работающая в рамках строго определенного интерфейса, поэтому я не могу изменить сигнатуры функций.Работает ли Data.Map в методе pass-by-value или pass-by-reference? (Лучшее объяснение внутри)
Код компилируется отлично и даже запускает штрафы без ошибок. Моя проблема в том, что это большой набор результатов, поэтому очень сложно проверить, есть ли семантическая ошибка.
Мой основной вопрос: В последовательности вызовов функций A to B to A to B to breaking condition
, учитывая ту же самую исходную карту, передается всем функциям до нарушения условия, а некоторые функции возвращают Integer, будет ли вставка на карте в функцию, которая возвращает только целочисленное значение, которое будет отражено после возврата элемента управления к первой функции?
primaryFunc :: SuperType -> MyMap -> (Integer, MyMap)
primaryFunc (SubType1 a) mapInstance = do
let returnInt = func1 a mapInstance
(returnInt, mapInstance)
primaryFunc (SubType2 c) mapInstance = do
let returnInt = primaryFunc_nonprefix_SuperType c mapInstance
let returnSuperType = (Const returnInt)
let returnTable = H.insert c returnSuperType mapInstance
(returnInt, returnTable)
primaryFunc (ConstSubType d) mapInstance = do
let returnInt = d
(returnInt, mapInstance)
func1 :: SubType1 -> MyMap -> Integer
func1 oe vt = do
--do stuff with input and map data to get return int
returnInt = primaryFunc
returnInt
func2 :: SubType2 -> MyMap -> Integer
func2 pe vt = do
--do stuff with input and map data to get return int
returnInt = primaryFunc
returnInt
Что такое 'MyMap', а что такое' SuperType'/'SubTypeₓ'? (Звучит подозрительно во всяком случае: в Haskell нет подтипов. Ваш код не должен даже проверяться на практике.) – leftaroundabout
Data SuperType = SubType1 sb1 | SubType2 sb2 outputing (Eq, Ord, Show) – user3013086
Почему это завалено нотными обозначениями, но не в монаде? Я думаю, вам нужно почитать о каком-то базовом хаскеле, посмотрели ли вы на «Учиться тебе Хаскелл за великое благо»? – jozefg