簡體   English   中英

具有運算符作為參數的Haskell函數應用程序語法

[英]Haskell function application syntax with operator as argument

運算符是否可以成為前面的函數參數而不將其括在Haskell的括號中?

這些定義將不會解析:

let x f = f .
let x f = f $ .

似乎運算符成為前一個函數的參數的唯一方法是將其括在這樣的括號中:

   let x f = f (.)

如果這是真的,那么對我來說,掌握這樣的表達式會容易得多:

 e f <?> g h

正如@RobinGreen指出的那樣,您必須將運算符括在括號中才能將其用作參數。 這樣做的原因是因為將其括在括號中使編譯器將其視為前綴函數而不是中函數。 因此以下兩個是等效的:

1 + 2
(+) 1 2
(1 +) 2   -- Partially applied operator is still an operator
          -- Note: this is not the same as (+ 1) 2 in general
          -- because argument order matters.  It would be
          -- silly to say that (f .) g is the same as (. f) g

本質上,括號使中綴運算符成為普通的前綴函數,可以像其他任何前綴函數一樣傳遞。

是的,您的猜測是正確的。 如果不將運算符括在括號中,則不能將其視為參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM