【发布时间】:2016-05-16 18:59:18
【问题描述】:
这是我学习 F# 的第一天。当我遇到以下主题的示例时,我正在浏览 tryfsharp.org Functions as Values
let chrisTest test =
test "Chris"
let isMe x =
if x = "Chris" then
"it is Chris!"
else
"it's someone else"
chrisTest isMe
网站说明:- chrisTest 是一个简单的高阶函数,它针对字符串值执行测试。 isMe 函数检查字符串是否等于“Chris”。将 isChris 传递给 chrisTest 将字符串“Chris”作为参数传递给“isChris”函数,并返回“it is Chris!”的结果。
我的想法:-isMe 函数的值在程序的最后一行被传递给函数chrisTest。但是我没有得到的是没有传递给isMe 函数的值。 isMe函数如何决定执行返回什么值?
【问题讨论】:
-
chrisTest将"Chris"传递给您提供的每个参数(是的,参数是一个函数-因此更高阶)-所以当您传递isMe到chrisTest最后一个将"Chris"传递给isMe并返回结果(在这种情况下为"it is Chris!") - 您可以通过将test "Chris"更改为不同的东西来尝试此操作(如test "Christine")跨度> -
推论:- 所以函数执行的顺序很重要,因此
chrisTest首先执行,其值'chris'传递给isMe。问题:- 我们是将chrisTest传递给isMe还是将isMe传递给chrisTest?或者它是因为chrisTest是高阶而写的,因此首先执行因此写为chrisTest isMe而不是isMe chrisTesst -
正如 John Palmer 回答的那样,您可以使用替换来逐步减少和简化代码,一次一步。首先将
chrisTest isMe替换为chrisTest的定义,test参数的值为isMe,给你isMe "Chris"。然后用它的定义替换isMe,其中x被替换为"Chris"等等。
标签: function f# functional-programming