Methods 具有方法、方法链接等的函数式编程语言

Methods 具有方法、方法链接等的函数式编程语言,methods,functional-programming,method-chaining,Methods,Functional Programming,Method Chaining,我一直在研究函数式编程,我突然想到,可能有一种函数式语言,它具有不可变的对象和方法,因此支持方法链接,其中可链接的方法将返回新实例,而不是改变调用方法并返回它的实例 这将具有可读性优势,因为 o.f().g().h() 。。。可以说比以下内容更具可读性: h(g(f(o))) 它还允许您将特定的函数与特定类型的对象相关联,方法是将它们作为我理解为面向对象语言的一个优势的那些类型的方法 有这样的语言吗?有没有理由相信这是个坏主意 我知道你可以在Javascript中编写这样的程序,但Javas

我一直在研究函数式编程,我突然想到,可能有一种函数式语言,它具有不可变的对象和方法,因此支持方法链接,其中可链接的方法将返回新实例,而不是改变调用方法并返回它的实例

这将具有可读性优势,因为

o.f().g().h()
。。。可以说比以下内容更具可读性:

h(g(f(o)))
它还允许您将特定的函数与特定类型的对象相关联,方法是将它们作为我理解为面向对象语言的一个优势的那些类型的方法

有这样的语言吗?有没有理由相信这是个坏主意

我知道你可以在Javascript中编写这样的程序,但Javascript并不强制执行不变性。

有这个,它被称为TDNR类型定向名称解析。 具体地说,如果x具有类型T,并且y出现在T的命名空间中,那么x.y与T.y x相同,T.y x是从应用于x的名称空间T开始的纯英语y


这方面的实际应用包括:方便的语法,用于记录字段访问和对本机(即Java)的访问,因为Frege被编译为Java方法。

是的,例如,F使用forward pipe |>操作符,这使得代码非常可读。比如说,

(1..20)
  |> Seq.map(functionFoo)
  |> Seq.map(functionBoo)

诸如此类……

听起来很合适-它是一种混合函数式/面向对象的语言。

您不需要对象,只需定义自己的反向应用中缀运算符,大多数函数式语言都允许您这样做。接下来是咖喱。例如,在:

演示:

或者选择您喜欢的操作员名称;其他人使用|>例如。

您也可以翻转。-运算符:。
let (>>) x f = f x
let f x y z = z * (x - y)
let g x = x + 1
let h x y = y * x

5 >> f 6 2 >> g >> h 2  (* = h 2 (g (f 6 2 5)) *)