我在大学里接受过有关正式系统的教学,但我很失望,他们似乎并没有在真正的单词中使用它们.
我喜欢能够知道某些代码(对象,函数,等等)可以工作的想法,而不是通过测试,而是通过证明.
我确信我们都熟悉物理工程和软件工程之间不存在的相似之处(钢铁行为可预测,软件可以做任何事情 - 谁知道!),我很想知道是否有任何语言可以在真实的单词中使用(要求Web框架太多要问?)
我听说过像scala这样的函数式语言的可测试性.
作为软件工程师我们有什么选择?
java testing formal-verification functional-programming scala
我非常喜欢的一件事是阅读不同的编程语言.目前我正在学习Scala,但这并不意味着我对Groovy,Clojure,Python和其他许多人都不感兴趣.所有这些语言都具有独特的外观和一些特征.在clojure的情况下,我不理解这些设计决策之一.据我所知,Clojure非常强调其功能范式,并且几乎迫使你尽可能地使用不可变的"变量".因此,如果您的一半值是不可变的,为什么语言会动态输入?clojure网站说:
首先,Clojure是动态的.这意味着Clojure程序不仅仅是您编译和运行的东西,而是您可以与之交互的东西.
那听起来很奇怪.如果程序已编译,则无法再更改它.当然你可以与它"互动",这就是用户所使用的UI,但网站当然并不意味着整洁的"动态"GUI.
Clojure如何从动态类型中受益
我的意思是Clojure的特殊情况,而不是动态类型的一般优点.
动态类型系统如何帮助改进函数式编程
再一次,我知道没有溢出"int a;"的乐趣.整个源代码,但类型推断可以缓解很多痛苦.因此,我想知道动态类型如何支持函数式语言的概念.
paradigms functional-programming language-design clojure dynamic
可能重复:
将数组的每个元素传递给函数的更短方式
我知道这会奏效:
def inc(a)
a+1
end
[1,2,3].map{|a| inc a}
Run Code Online (Sandbox Code Playgroud)
但在Python中,我只需要写:
map(inc, [1,2,3])
Run Code Online (Sandbox Code Playgroud)
要么
[inc(x) for x in [1,2,3])
Run Code Online (Sandbox Code Playgroud)
我想知道我是否可以跳过在Ruby中创建块的步骤,并且这样做:
[1,2,3].map inc
# => ArgumentError: wrong number of arguments (0 for 1)
# from (irb):19:in `inc'
Run Code Online (Sandbox Code Playgroud)
有没有人有关于如何做到这一点的想法?
我最近发现了Ruby的块和屈服特征,我想知道:这在计算机科学理论方面适合哪些方面?它是一种函数式编程技术,还是更具体的?
我有这个代码:
fields = ['name','email']
def clean_name():
pass
def clean_email():
pass
Run Code Online (Sandbox Code Playgroud)
我怎么能叫clean_name()和clean_email()动态?
例如:
for field in fields:
clean_{field}()
Run Code Online (Sandbox Code Playgroud)
我使用了花括号,因为它是我以前在PHP中使用它的方式,但显然不起作用.
如何用Python做到这一点?
每当有人承诺"解释monad"时,我的兴趣就会被激怒,只有当被指称的"解释"是一长串的例子时才会被沮丧所取代,这些例子是由一些副手的评论所终止的,即"数学理论"背后的"深奥"在这一点上,"是"太复杂而无法解释".
现在我要求相反的事情.我对类别理论有着扎实的把握,我并不害怕图表追逐,Yoneda的引理或衍生的函子(实际上是在分类意义上的monad和adjunction).
有人能给我一个清晰简洁的定义monad在函数式编程中的含义吗?越少越好的例子:有时一个清晰的概念说明了一百多个胆小的例子.尽管我不挑剔,但Haskell作为演示语言会做得很好.
用例如Java编写的程序很大程度上依赖于动态调度.如何用Haskell等函数式语言表达这些程序?换句话说,Haskell在"动态调度"下表达这个想法的方式是什么?
我已经看到很多函数是根据模式定义的(f .) . g.例如:
countWhere = (length .) . filter
duplicate = (concat .) . replicate
concatMap = (concat .) . map
Run Code Online (Sandbox Code Playgroud)
这是什么意思?
haskell functional-programming pointfree function-composition tacit-programming
几年来我一直是一位势在必行的开发人员,我从未有过学习函数式编程的冲动.
几个月前,我终于决定学习Haskell.这是一个非常酷的语言,但我很困惑如何用这种语言编写一个事件驱动的真实应用程序.你知道一个关于它的好教程吗?
注意:当我说"真正的应用程序"时,我不是在谈论现实世界,生产就绪应用程序.我只是说一个小样本应用程序,只是为了掌握它.我觉得像windows caculator的简化版本会很棒,然后可能会更复杂一点.
我目前正在为一种编程语言开发一个简单的解释器,并且我的数据类型如下:
data Expr
= Variable String
| Number Int
| Add [Expr]
| Sub Expr Expr
Run Code Online (Sandbox Code Playgroud)
我有许多函数可以执行简单的操作,例如:
-- Substitute a value for a variable
substituteName :: String -> Int -> Expr -> Expr
substituteName name newValue = go
where
go (Variable x)
| x == name = Number newValue
go (Add xs) =
Add $ map go xs
go (Sub x y) =
Sub (go x) (go y)
go other = other
-- Replace subtraction with a constant with addition …Run Code Online (Sandbox Code Playgroud)