gpt4 book ai didi

Haskell 术语澄清 : "Evaluating Objects" (as used in Prof. Giesl 的 Haskell 讲座系列)

转载 作者:行者123 更新时间:2023-12-04 18:42:01 24 4
gpt4 key购买 nike

我对术语感到困惑。

在本次讲座中 38 分钟 http://youtu.be/0u8eTSc5Gmo Giesl 教授提到了“物体评估”一词。这更准确地说是什么意思?

我知道您可以在 Haskell 中评估表达式,但评估对象意味着什么?

对象本身是表达式吗?

Haskell 中的对象是什么? Int 1 是一个对象吗?函数是对象吗?

Haskell 中的表达式是什么?应用于对象的功能?

谢谢阅读

编辑:根据SICP一个数字是一个表达式,所以在这个意义上,一个数据对象(如数字)也是一个表达式,所以它可以被评估。

编辑 2:以下是 Giesl 教授讲义中的相应部分。
在这些讲义中,他说:“评估类型 IO () 的表达式”,所以也许这就是他在视频讲座中说“对象评估”时的意思。

enter image description here

编辑 3:在 59 分钟,Giesl 教授写道,“解释器只能评估 IO () 类型的对象”。

到了这一步,我才真正开始觉得,他说物就是表达。我对吗 ?所以 object 不是一个值(正如对这个问题的一些评论所建议的那样),而是一个表达式(在他的讲座中)。这是一个正确的解释吗?请比我更了解 Haskell 的人确认我的怀疑是否正确。

enter image description here

编辑4:整个讲座系列可以找到here .

编辑 5:在 his 9th lecture 的开头他使用术语对象,他指的是什么?我不认为他指的是值(value)观或表达方式。他是指代数数据类型意义上的数据对象吗?

我现在完全糊涂了。 基本问题是,吉塞尔教授所说的“物体”是什么意思?他是什么意思? 尤其是在 his 9th lecture演讲。

编辑6:

来自与 Giesl 教授的私有(private)电子邮件通信:

I used the words "object" and "value" as a synonym for "expression".
So when I speak about "evaluation of objects",
in fact I mean "evaluation of expressions".

吉斯教授写道。

最佳答案

Haskell language report 中的术语“对象”

在语言报告中,对象通常是值(value)的同义词:

§34.1.4 Marshalling lists of storable objects

withMany :: (a -> (b -> res) -> res) -> [a] -> ([b] -> res) -> res

Replicates a withXXX combinator over a list of objects, yielding a list of marshalled objects



这里我们指的是 [a]作为 a 类型对象的集合.

所以:
[4, 8, 42, 16, 23, 15]

被认为是对象的集合。

§3.15.1 Field Selection

Field labels are used as selector functions. When used as a variable, a field label serves as a function that extracts the field from an object.



对于字段标签,我们指的是记录语法和由它自动生成的功能。给定,例如:
data Sample = Sample { a :: Int, b :: Double }

生成以下函数:
a :: Sample -> Int
b :: Sample -> Double

每个函数都从“对象”中提取特定值。

§4.2.1 Algebraic Datatype Declarations

A data constructor of arity k creates an object with k components. These components are normally accessed positionally as arguments to the constructor in expressions or patterns. For large datatypes it is useful to assign field labels to the components of a data object.



在上面的引用中,我们可以看到数据构造函数创建了一个对象。所以:
Just "ok"
Nothing

都被视为对象以及:
[1, 3, 4]

§6.3.2 The Ord Class

The Ordering datatype allows a single comparison to determine the precise ordering of two objects.



这里我们指的是 Ordering这是用于在两个值之间进行比较时表示“小于”、“大于”和“等于”的数据类型。

第08讲的意义

教授说:

The evaluation of an object of type IO () has the effect that this action is performed.



他指的是当一个 IO () value 是有效需要的,计算 IO () 的 Action 的主体值被执行。

例如, main需要 IO ()数据类型:
main = putStr "sample"

main将被调用来运行程序, "sample"将应用于函数 putStr (类型为 String -> IO () )以生成 IO ()值,有效打印 sample作为副作用。

“技术术语”被定义为“一个值”:

§41.1 The IO monad

A value of type IO a is a computation which, when performed, does some I/O before returning a value of type a.

There is really only one way to ”perform” an I/O action: bind it to Main.main in your program. When your program is run, the I/O will be performed. It isn’t possible to perform I/O from an arbitrary function, unless that function is itself in the IO monad and called at some point, directly or indirectly, from Main.main.



第09讲的意义

教授说:

... return takes a value and gives you back the object where the value is incapsulated.


return的类型是:
return :: a -> IO a

这是一个接受任何值并“生成”类型为 IO a 的值的函数。包含该值。这是他将对象用作值(value)的同义词的另一种情况。

对象与表达式

At this point, I really start to have the feeling that when he says objects he means expression. Am I right?



嗯,不。我不认为你是对的。表达式不是值/对象。举个例子:
if x then 0 else 42

是一个表达式(如语言报告中第 3 节开头所述),但不是一个值。

在 Haskell 中,表达式必须产生一个值,但不一定是一个值。另一方面 042既是值又是表达式。

关于Haskell 术语澄清 : "Evaluating Objects" (as used in Prof. Giesl 的 Haskell 讲座系列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24035528/

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