我已經爲LaTeX3寫了一個十進制浮點數單元(純粹的宏...很難)。特別是,我必須決定如何解析x < y < z
。我看到三個選項:3> 2> 1爲真的語言
款待
<
爲左結合二元運算符,所以x < y < z
將相當於(x < y) < z
。這就是C
所做的:-1 < 0 < 1
變爲(-1 < 0) < 1
,因此1 < 1
,即0
。將
<
視爲右關聯二元運算符,因此x<y<z
將相當於x < (y < z)
。我認爲這個選擇沒有任何優勢。當遇到
<
,預讀更多的比較操作,並把x < y < z
等同於(x < y) && (y < z)
,其中y
將只計算一次。這是大多數非程序員所期望的。很多LaTeX用戶都是非程序員。
此刻我正在使用第一個選項,但它似乎並不自然。我認爲我可以在沒有太多開銷的情況下實施第二個案例。我是不是該?
由於這個問題是主觀的,讓我問一個客觀的問題:什麼主流語言選擇選項3?我對a <b> c == d < e != f
等混合事件發生的細節感興趣。如果它們存在,我也對其他選擇感興趣。
有趣。在我的情況下,我只有一種類型可用---浮點數(當目標是浮點數時,整數會自動轉換爲浮點數)---所以不會出現類型問題。我認爲你的方法是在產生'1 < 3 > 2'的結果時產生一個'NaN',可能是在提高'invalid operation'標誌後(參見IEEE 754 2008)? –
也許,如果你不想實現這種類型的靜態檢查,並且你也不想實現布爾邏輯值('True','False'和'NaN'的布爾對象;再次,只有在你不想實現一個合適的類型系統)。 – 2012-08-23 14:31:48
LaTeX是一種解釋的宏語言。特別是,由於它沒有被編譯,AFAIK沒有辦法對這些比較關係進行靜態檢查。我認爲,如果Python決定禁止'1 < 3 > 2',那麼它也將不得不拋出異常。 –