gpt4 book ai didi

haskell - "you do computations in Haskell by declaring what something is instead of declaring how you get it"是什么意思?

转载 作者:行者123 更新时间:2023-12-03 14:54:38 25 4
gpt4 key购买 nike

最近想学一门函数式编程语言,我选择了Haskell .

现在我正在阅读学习你的haskell和here是一个描述似乎像 Haskell 的哲学我不确定我是否完全理解它:你在 Haskell 中通过声明某物是什么而不是声明如何获得它来进行计算。

假设我想得到一个列表的总和。

在声明您如何获得它时:
通过添加所有元素得到总和,所以代码将是这样的(不是haskell,python):

sum = 0
for i in l:
sum += i
print sum

以某种方式:
总和是第一个元素的总和和其余元素的总和,所以代码将是这样的:
sum' :: (Num a) => [a] -> a
sum' [] = 0
sum' (x:xs) = x + sum' xs

但我不确定我是否得到它。有人可以帮忙吗?谢谢。

最佳答案

命令式和功能性是解决问题的两种不同方法。

命令式 (Python) 为您提供了您需要用来获得所需内容的操作。例如,您可以告诉计算机“揉面团。然后将其放入 toastr 。打开 toastr 。烘烤 10 分钟。”。

函数式(Haskell、Clojure)为您提供解决方案。你更有可能告诉计算机“我有面粉、鸡蛋和水。我需要面包”。计算机碰巧知道面团,但它不知道面包,所以你告诉它“面包是烤过的面团”。计算机,知道烘焙是什么,现在知道如何制作面包。当计算机为你工作时,你坐在 table 旁 10 分钟。然后您可以享用新鲜出炉的美味面包。

您可以在工程师和数学家的工作方式上看到类似的差异。工程师势在必行,着眼于问题,并为 worker 提供解决问题的蓝图。数学家定义问题(求解 x)和解(x = -----),并且可以使用任意数量的经过验证的真实解来解决较小的问题(2x - 1 = ----- => 2x = - ---- + 1) 直到他最终找到所需的解决方案。

函数式语言被大学里的人大量使用并不是巧合,不是因为它难学,而是因为大学以外的数学思想家并不多。在你的引文中,他们试图通过巧妙地使用方式和内容来定义思维过程中的这种差异。我个人认为,每个人都通过将单词变成他们已经理解的东西来理解单词,所以我想我的面包比喻应该为你澄清区别。

编辑:值得注意的是,当你强制命令计算机时,你不知道最后是否会有面包(可能是你煮的时间太长而烧焦了,或者你没有添加足够的面粉)。这在函数式语言中不是问题,在函数式语言中你确切地知道每个解决方案给你带来了什么。在函数式语言中不需要反复试验,因为你所做的一切都是正确的(尽管并不总是有用的,比如意外地求解 t 而不是 x)。

关于haskell - "you do computations in Haskell by declaring what something is instead of declaring how you get it"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23821105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com