gpt4 book ai didi

haskell - 谁能解释 ((.)$(.)) (==) 1 (1+) 0 的含义

转载 作者:行者123 更新时间:2023-12-04 10:08:07 26 4
gpt4 key购买 nike

haskell.org我遇到了这个自由风格的功能,被称为“猫头鹰”。

((.)$(.))

它的类型签名是
(a -> b -> c) -> a -> (a1 -> b) -> a1 -> c .

相当于
f a b c d = a b (c d)显然,
((.)$(.)) (==) 1 (1+) 0返回 True .

所以我的问题是:
  • a1 是什么意思在类型签名中是什么意思?是否与a 相关? ?
  • (==)某种函数相等运算符?因为0 (==) 0在 GHCi 中引发错误。
  • 1 (1+) 0 是什么意思在这种情况下是什么意思?我看不出这甚至是一个有效的表达方式。
  • 为什么表达式返回 True ?
  • 最佳答案

  • a1是“只是另一个类型变量”。它可能意味着任何东西,包括 a ,但并不一定意味着什么。很可能与 a 不同。 .
  • (==)== 的“强制前缀”形式正则相等运算符构成 Eq类型类。通常你会写 a == b , 但这只是 (==) a b 的语法糖, == 的前缀应用.
  • 1 (1+) 0在这种情况下并不意味着什么,三个子表达式中的每一个都是“猫头鹰”的独立参数,最终需要四个参数。
  • 我们可以通过减少。
    ((.)$(.)) (==) 1 (1+) 0
    === [ apply ]
    ((.)(.)) (==) 1 (1+) 0
    === [ implicit association ]
    ((.)(.)(==)) 1 (1+) 0
    === [ apply the definition: (f.g) x = f (g x) ]
    ((.) (1 ==)) (1+) 0
    === [ implicit association ]
    ((.) (1 ==) (1+)) 0
    === [ apply the definition: (f.g) x = f (g x) ]
    1 == (1+0)
    === [addition]
    1 == 1
    === [equality]
    True


  • this page提到,猫头鹰相当于一个函数 f
    f a b c d = a b (c d)

    也就是说,它将其第一个参数(两个参数的函数)应用于其第二个参数,并将其第三个参数应用于其第四个参数的结果。对于给出的示例 ((.)$(.)) (==) 1 (1+) 0这意味着您首先申请 (+1)0 ,然后结合 1(1+0)使用 (==)这就是我们减少的情况。

    更广泛地说,您可能会将其视为修改二进制操作 a 的函数。对其第二个论点稍作改动。

    关于haskell - 谁能解释 ((.)$(.)) (==) 1 (1+) 0 的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17607775/

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