小编jus*_*ive的帖子

F#之间的区别是让add1 x = x + 1并让add2 x = x +1

let add1 x = x + 1和之间有什么区别let add2 x = x +1.意外删除的空间从改变的函数的类型
val add1 : x:int->int
val add2 : x:(int -> 'a) -> 'a

据我所知,第一种类型的声明说add1映射intint.但第二个是什么意思.

好吧,'a代表一个泛型类型,但该函数如何'add2'返回泛型?

谢谢你的帮助.

f# types

13
推荐指数
1
解决办法
158
查看次数

如何在函数式编程中建模继承关系

面向对象的编程范例使用继承来建模遵循泛化 - 专业化关系的实体之间的关系.这里,Base类用于封装一组实体的公共(常规)属性和行为,Derived Classes 通过添加其他属性和/或添加/修改现有行为来扩展基类.

作为功​​能编程的新手,我需要在F#等函数语言中建模这种关系的指导.

例如,建模如下所示的简单情况的最佳方法是什么:

abstract class Tutorial { 
  private String topic;
  abstract public void learn();
}

class VideoTutorial extends Tutorial {
  private float duration;
  public void learn () {
    System.out.println ("read PDF");
  }
}

class PDFTutorial extends Tutorial {
  private int pageCount;
  public void learn () {
    System.out.println ("Watch Video");
  }
}
Run Code Online (Sandbox Code Playgroud)

然后使用教程集合并调用学习 观察多态行为.

oop inheritance f# functional-programming

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

功能组合错误

在阅读有关函数组合的教程时,我尝试了以下内容:

let prefixFun a b = a + "" + b;;
let exclaim s = s + "!";;
let bigHello = prefixFun >> exclaim;;
Run Code Online (Sandbox Code Playgroud)

但是定义bigHello返回以下类型不匹配错误

let bigHello = prefixFun >> exclaim;;
----------------------------^^^^^^^

stdin(28,29): error FS0001: Type mismatch. Expecting a
'(string -> string) -> 'a'
but given a
    'string -> string'
The type 'string -> string' does not match the type 'string'
Run Code Online (Sandbox Code Playgroud)
  1. 这个错误意味着什么
  2. 根据我的理解,函数组合要求第一个函数的返回类型与第二个函数的参数相同,我认为这是正确的,因为prefixFun返回字符串并exclaim期望字符串.

你能帮我理解并解决问题吗?

谢谢.

f# functional-programming function-composition

0
推荐指数
1
解决办法
63
查看次数