gpt4 book ai didi

haskell - 空格是用作函数应用运算符还是用作单词分隔符

转载 作者:行者123 更新时间:2023-12-03 13:00:39 24 4
gpt4 key购买 nike

How does outermost evaluation work on an application of a curried function?说:

in Haskell, whitespace is an operator: it applies the lhs function to the rhs argument.



这是真的吗?我在文档中找不到它。

当 Haskell 编译器词法分析 Haskell 程序时,空格是否被识别为函数应用运算符或标记分隔符?

最佳答案

我以前从未听过有人说空格是运算符。我想您可以将其视为函数应用程序上下文中的运算符,但在大多数上下文中它不是运算符。例如,在以下代码示例中,我看不到任何将空格视为运算符的方法,其中空格仅用于分隔标记:

module Main where

x = "test 1"
y = "test 2"

main = do
(z : zs) <- getLine
putStrLn $ z : (x ++ y ++ zs)

在这里很明显,空格纯粹是作为标记分隔符。类似 f x y z 的明显“操作符”最好的说法是,如果两个值彼此相邻放置,则第二个值应用于第一个值。例如, putStrLn"xxx"putStrLn "xxx"均适用 "xxx"putStrLn ;空间完全无关紧要。

编辑:在评论中,@DanielWagner 提供了两个很好的例子。首先, (f)xf x 相同, 但没有空格;在这里我们看到确认空格纯粹是作为标记分隔符,因此可以用括号(也分隔标记)替换,而不会对表达式的词素产生任何影响。其次, f {x=y}不适用 {x=y}f ,而是使用记录语法基于 f 创建新记录;再次,我们可以删除空间得到 f{x=y} ,它在分离词素方面做得同样出色。

关于haskell - 空格是用作函数应用运算符还是用作单词分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57032261/

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