小编J C*_*per的帖子

什么是"自由变量"?

(我确信这个必须已经在这个网站上得到了解答,但搜索被C语言中的变量调用free()的概念所淹没.)

我遇到了"eta reduction"这个术语,它被定义为f x = M x ==> M如果x"不是M中的自由".我的意思是,我认为我理解它试图说的内容的主旨,看起来就像你将一个函数转换为无点样式时所做的那样,但我不知道关于x的限定符不是自由的意思.

haskell functional-programming lambda-calculus

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

通过fromList创建(非列表)数据结构是否实际创建了列表?

基本上我很好奇,如果代码如下:

let myCollection = Data.SomeCollection.fromList [1, 2, foo]
Run Code Online (Sandbox Code Playgroud)

实际上是在运行时看起来是什么样的,并创建链接列表作为创建SomeCollection-or 的中间步骤,如果这只是语法上的便利,并且编译器避免在编译的代码中创建列表?

如果这是一个愚蠢的问题,请道歉,但自从学习一些Haskell以来,我一直想知道.

haskell compile-time data-structures

17
推荐指数
1
解决办法
331
查看次数

坚持Scala中的功能范式的功效

我最近买了Scala编程,并一直在阅读它.语言肯定不是我的预期!具体来说,除了Lisp宏和Haskell的类型级别副作用隔离之外,它似乎实现了我所知道的几乎所有编程语言的想法.

坦率地说,它让我有些不知所措.虽然我认为拥有这么多工具很好,但我真的只是在JVM上寻找一种强类型的函数式语言.我想我可能会以这种方式使用Scala,但我想如果我与任何库交互或通过其他人的代码,我会遇到很多这种高级(对我而言)OOP的东西 - 特征和"对象层次结构"线性化,"所有这些抽象和重要的业务,单例,包和伴随对象,隐式转换......更不用说各种语法快捷方式和糖.

人们经常哀叹那些试图将一种语言的风格转变为另一种语言的程序员,原因很多.但并非所有语言都像Scala一样具有多范式,所以也许它的社区有不同的看法?例如,在F#中,编程风格和使用的OOP似乎有一些余地.但是从阅读中我不确定这对Scala来说是否也是一个好的哲学.

更有经验的Scala程序员可以帮助我吗?为清晰起见编辑:基本上,我可以安全地使用Scala的FP功能而不用担心其高级OOP方面吗?

抱歉这个漫无边际的问题!

paradigms programming-languages functional-programming scala jvm-languages

16
推荐指数
3
解决办法
1111
查看次数

J中的术语"monadic"是否与Haskell的使用有关?

(对不起,我很愚蠢,没有受过教育,所以这可能是一个荒谬的问题.)

我刚开始看J,他们使用术语"monadic"和"dyadic"来表示(对我来说)是一元和二元运算符.为什么要这样做,它与我听到的那个地方(Haskell)有什么关系呢?我的猜测是他们是无关的同音异义词,但我不确定.

monads haskell terminology j

16
推荐指数
4
解决办法
1078
查看次数

何时在Haskell中利用类型推断?

我很好奇经验丰富的Haskell程序员在实践中经常使用类型推理.我经常认为它比某些其他语言所需的永远明确的声明更有优势,但出于某种原因(也许只是因为我是新的),它"感觉"只是一直在写一个类型签名.我确信在某些情况下确实是必需的.

一些有经验的Haskellers(Haskellites?Haskellizers?)能提供一些输入吗?

haskell coding-style type-inference

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

将"Ex"添加到函数/方法名称时,这意味着什么?

我没有太多使用Windows API,但我已经看到它在那里使用以及偶尔在代码库中工作.

language-agnostic winapi naming-conventions

14
推荐指数
3
解决办法
4923
查看次数

功能编程:状态与重新分配

我需要帮助了解我当前的OOP状态概念与在Haskell或Clojure等函数语言中完成的方式之间的区别.

使用一个陈腐的例子,假设我们正在处理简化的银行账户对象/结构/任何事情.在OOP语言中,我有一些类持有对BankAccount的引用,BankAccount将具有诸如利率之类的事件的实例变量,以及诸如setInterestRate()之类的方法,其改变对象的状态并且通常不返回任何内容.在说Clojure中,我有一个银行账户结构(一个美化的散列图),以及带有银行账户参数和其他信息的特殊函数,并返回一个新的结构.因此,我现在不再更改原始对象的状态,而是返回一个具有所需修改的新对象.

那么......我该怎么办呢?覆盖引用旧银行帐户的任何变量?如果是这样,那是否比改变状态的OOP方法有优势?最后,在这两种情况下,似乎有一个变量引用具有必要更改的对象.像我一样迟钝,我对发生的事情只有一个模糊的概念.

我希望这是有道理的,谢谢你的帮助!

language-agnostic oop comparison functional-programming immutability

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

Forth中的内存管理

所以我只是在学习Forth,并且好奇是否有人可以帮助我理解内存管理通常如何工作.目前我只有(一些)使用C stack-vs-heap范例的经验.

根据我的理解,可以在Dictionary中或在堆上进行分配.字典是否比C中的堆栈更快/更喜欢?但与C不同,没有范围和自动堆栈回收,所以我想知道是否只使用字典来表示全局数据结构(如果有的话).

就堆而言,它是否与C非常相似?堆管理是标准(ANS)概念,还是实现定义的?

heap memory-management forth

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

功能编程:不变性等

我最近问了一个关于函数式编程的问题,并收到了(好的!)答案,这些答案提出了更多问题(有时似乎是学习的情况).以下是几个例子:

  1. 一个答案提到了不可变数据结构的优点:每个线程都可以拥有自己的副本.现在,对我来说,这听起来更像是一个版本控制系统(使用类比),而不是锁定某人已经签出的代码,以便其他人无法修改,每个人都可以查看自己的副本.听起来不错.但是,在VCS中,您有"合并"更改的概念,如果两个人更改了相同的内容.似乎这个问题肯定会出现在多线程场景中......那么当线程看到最新数据时,如何完成"合并"呢?

  2. 这个答案讨论了在对象的循环中执行操作的情况,以及如何每次使用新对象而不是更新旧对象.但是,假设bankAccount正在非循环场景中进行更新 - 例如GUI银行系统.操作员单击"更改利率"按钮,该按钮将触发一个事件(例如,在C#中)执行类似操作bankAccount.InterestRate = newRateFromUser.我觉得我在这里很密集,但希望我的例子是有意义的:必须有某种方式来更新对象,对吧?其他一些事情可能取决于新数据.

无论如何,如果你能帮助我了解范式转变,我会很感激.我记得我的大脑经过类似的"愚蠢阶段",在学习OOP后,采用简单的程序性命令式编码方法.

language-agnostic concurrency functional-programming immutability

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

Ocaml中的打开和关闭联合类型

我是第一次看OCaml,有一些F#和Haskell的背景知识.因此,很多东西都很熟悉,但有一点不是"开放"和"封闭"联合的概念(使用反引号和[<语法]).

这些有用的是什么以及它们使用的次数是多少?

ocaml types idioms

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