簡體   English   中英

降低R中的中綴運算符優先級?

[英]Lowering infix operator precedence in R?

我正在嘗試為R中的邏輯變量創建一個“隱含”運算符,以使命題演算更容易。 然而,它似乎與否定運算符不一致。 正如這里的最后4行所示,我必須在括號中包含否定變量以使蘊涵運算符正常工作。

我懷疑運算符優先級是問題,但我不確定。 從我讀到的內容來看,沒有辦法改變中綴運算符的優先級。 有沒有辦法我可以重新定義implies()以便(!q) %->% (!p)中的括號不是必需的?

> implies <- function(p, q) !p | q
> "%->%" <- implies
> 
> p <- c(TRUE, TRUE, FALSE, FALSE)
> q <- c(TRUE, FALSE, TRUE, FALSE)
> p %->% q
[1]  TRUE FALSE  TRUE  TRUE
> !q %->% !p
[1]  TRUE FALSE FALSE FALSE
> (!q) %->% !p
[1]  TRUE FALSE  TRUE  TRUE

R無法控制運算符優先級。 它在幫助頁面中描述了?Syntax 你的問題是否定的優先級低於特殊操作符,所以

!q %->% !p

被解析為

!(q %->% !p)

可能最好的建議是不要嘗試將R用於你正在進行的項目,因為它並不是真的設計用於那種事情。 但是,您可能想要的是:R允許您從表達式中查看解析樹,並告知括號出現的位置:

> getParseData(parse(text="!q %->% !p"))
   line1 col1 line2 col2 id parent   token terminal text
11     1    1     1   10 11      0    expr    FALSE     
1      1    1     1    1  1     11     '!'     TRUE    !
10     1    2     1   10 10     11    expr    FALSE     
2      1    2     1    2  2      4  SYMBOL     TRUE    q
4      1    2     1    2  4     10    expr    FALSE     
3      1    4     1    7  3     10 SPECIAL     TRUE %->%
9      1    9     1   10  9     10    expr    FALSE     
5      1    9     1    9  5      9     '!'     TRUE    !
6      1   10     1   10  6      8  SYMBOL     TRUE    p
8      1   10     1   10  8      9    expr    FALSE     

可以想象,這可以讓你編寫一個可以修改表達式的函數! 優先級高於%->%

或者,您的函數可以只進行文本替換以更改%->%! 在解析之前進入不同的優先級運算符,然后在評估之前將其更改回來。

暫無
暫無

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

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