小编Ada*_*dam的帖子

F# 构造类型语法是否特殊?

我对 F# 的“构造类型”语法很好奇。它被记录在这里

类型参数 通用类型名称

或者

通用类型名称

通过以下示例:

int option

string list

int ref

option<int>

list<string>

ref<int>

Dictionary<int, string>

我很好奇“向后”语法是否有什么特别之处,即参数位于类型之前,或者它是否只是具有一个参数的泛型类型的糖。以下内容有效:

type 'a MyOption = // MyOption<'a> also works
  | MySome of 'a 
  | MyNone
Run Code Online (Sandbox Code Playgroud)

但我无法让它与多个类型参数一起使用。为什么 F# 开发人员更喜欢这种带有一个参数的类型语法?是否有可能或需要让它与两个人一起工作?

syntax f#

3
推荐指数
1
解决办法
129
查看次数

如何在 F# 异步表达式中使用 while 循环?

我该如何用 F# 编写以下内容?

var reader = await someDatabaseCommand.ExecuteReaderAsync();
while (await reader.ReadAsync())
{
  var foo = reader.GetDouble(1);
  // ... 
}
Run Code Online (Sandbox Code Playgroud)

我对 F# 很陌生,所以这是我能想到的最好的方法

task { 
  let! reader = someDatabaseCommand.ExecuteReaderAsync ()
  let! tmp1 = reader.ReadAsync ()
  let mutable hasNext = tmp1
  while hasNext do
    // ...
    let! tmp2 = reader.ReadAsync ()
    hasNext <- tmp2
}
Run Code Online (Sandbox Code Playgroud)

我知道它是一个 C# 库,所以它不会是完美的,但我想避免需要将结果存储ReadAsync在变量中,更不用说有两个临时变量了。我不知道有什么方法可以在Task不将其绑定到名称的情况下获得 a 的“结果”。也许递归解决方案会起作用?

f# c#-to-f#

3
推荐指数
1
解决办法
400
查看次数

可以在 Fortran 中重用函数结果吗?

我读过,取决于函数结果变量的值是非标准的 Fortran。

integer function my_sum(x, n)
  integer, dimension(n), intent(in) :: x
  integer              , intent(in) :: n

  integer :: i

  my_sum = 0
  do i = 1, n
    my_sum = my_sum + x(i) ! Error! Cannot re-use my_sum
  end do
end function
Run Code Online (Sandbox Code Playgroud)

相反,我们必须使用局部变量并在函数末尾对其进行赋值。需要明确的是,我并不期望该值在调用之间保存,而是在函数体内保存,就好像它是局部变量一样。

此说法在 Fortran 90 或更高版本中正确吗?它适用于我的编译器(英特尔),但我不确定这是否是标准的,并且除了在线随机大学幻灯片之外还没有找到任何东西。

编辑:我找到了函数名称的来源。它位于本演示文稿的幻灯片 4 中,链接来自官方 fortran-lang.org 网站。

函数中的某处必须有一个或多个如下所示的赋值语句:

函数名 = 表达式

其中表达式的结果保存到函数的名称中。

请注意,函数名称不能出现在任何表达式的右侧。

fortran

2
推荐指数
2
解决办法
147
查看次数

标签 统计

f# ×2

c#-to-f# ×1

fortran ×1

syntax ×1