【发布时间】:2018-01-17 00:32:17
【问题描述】:
在这里我很难想出一个好的标题,但希望我的描述能弥补它。
作为一个业余爱好,我正在尝试为 toy language(您必须为这本书付费,只需链接以显示我来自哪里)从 Go 移植到 F#。
这一切都很好,直到我需要调用函数字典中的其他函数。
这是一个用 F# 编写的 Go 代码尝试执行的非常简化的示例:
let processA a remainingCharacters =
1
let processB b remainingCharacters =
2
let processC c remainingCharacters =
// this doesn't work, obviously, as funcMap is declared below
let problem = funcMap.[remainingCharacters.Head]
3 + problem
// i assume there is a better way of doing this, I'm just not sure what it is
let funcMap = dict[('a', processA); ('b', processB); ('c', processC)]
let processCharacter currentCharacter remainingCharacters =
let processFunc = funcMap.[currentCharacter]
processFunc currentCharacter remainingCharacters
let input = ['a'; 'b'; 'a'; 'c']
let processInput() =
let rec processInputRec currentCharacter (remainingCharacters: char list) sum =
if remainingCharacters.IsEmpty then
sum
else
let currentValue = processCharacter currentCharacter remainingCharacters
processInputRec remainingCharacters.Head remainingCharacters.Tail (sum + currentValue)
processInputRec input.Head input.Tail 0
let result = processInput()
sprintf "%i" result |> ignore
因此,基本上,它试图将给定的输入值映射到不同的函数,在某些情况下,需要在这些函数中引用该映射(或至少获取另一个映射函数)。
我将如何在 F# 中做到这一点?
【问题讨论】: