Re: [轉錄][新聞] 30÷2(2+3)÷5是多少? 計算機딠…
抱歉 直接回一個古文
不過這篇文章的重點就是講一下一個很接近數學的程式語言 Fortress 中
「空白」運算子(juxtaposition)的優先順序問題
※ 引述《CloudyWing (孤單ㄉ翼)》之銘言:
: 前提2:省略乘號是否定義擁有優先權
: 前面有一位前輩有說部分教科書有說明省略乘號優先權為優先,但非是世界通用規則
: 也就是這是實際上沒有定義的東西,但部分教科書編輯者卻將自己的認知編輯進去
: 這種情況應該是那些教科書編輯錯誤...
: 至少在"省略乘號擁有優先權"確實被定義出來前,省略乘號是沒有優先權
不太同意這句話
有教科書說「省略乘號優先權為優先」不一定代表不寫這句話就是
「至少在"省略乘號擁有優先權"確實被定義出來前,省略乘號是沒有優先權」吧
: 不如用念力來請求哪位數學系高手中之高高手來去翻原始定義引經據典替大家解答(咦!?)
不好意思繼續 po 文煩版友 畢竟這真的不是一個數學問題
好啦 進入主題
不過我也不是研究 programming language 的 只是剛好有去聽過這個語言的演講
Fortress 是由發明 Scheme 還有寫出 JavaScript、Java 第一版規範的 Guy Steele
跟他在 Sun 的團隊做出來的一個很接近數學的程式語言
http://en.wikipedia.org/wiki/Fortress_%28programming_language%29
其中最大的特色是可以用非 ASCII 的符號寫程式 比如說:
這些算式都是合法的 u · (v × w) 或是 (a + b) ∪ c 算子隨便你 overload
當然有 2(3+4) 之類的東西 另外還有:
f(x) = x^2 + sin(x) + cos(2x) 可以簡寫成 f(x) = x^2 + sin x + cos 2 x
(不能把 2 x 變成 2x)
f(x) = sin(sin(x)) 可以解寫成 f(x) = sin sin x
(也就是有部份 right-associative!!)
if A ⊆B = C ⊂D then ... end (這叫做 chained operator)
它內建一個程式碼到LaTex 的轉換器 不過我不太不曉得涵蓋情形怎麼樣
回到原來的問題跟他的變形 Fortress的執行狀況如下:
6÷2(1+2) = 6/2(1+2) = 6 ÷ 2 (1+2) = 1
6÷2 (1+2) (語法錯誤)
6/2 (1+2) = 6/2 (1+2) = 9
解釋一下這個結果 根據 Fortress 規範 (http://bit.ly/lMtMer ) 16.2
跟這幾個式子有關運算子的順序如下:
1. tight juxtaposition — 沒有空白的「空白」運算子 (如:2(1+2))
2. tight fractions — 沒有空白的'/'
3. loose juxtaposition — 有空白的「空白」運算子 (如:2 (1+2),sin x,2 3)
4. ÷
5. +
(對於為什麼「6÷2 (1+2)」是語法錯誤有興趣的請看規範)
這說明了幾件事:
- 真的有「空白」運算子這種東西 八卦版Zmittermeyer的還蠻厲害的 xdd (#1DmEi-IU)
只是「空白」運算子根據 type 有時候還會是 function application
- 「÷」跟「/」可以不一樣
- 「6/2 (1+2)」 這個問題(八卦版#1DmDoM4e 推文) 靠把「空白」運算子
分成兩個也解決了
- 「語法錯誤」也是一招 只是在這個版說這個不知道會不會被當成是「不想討論」
- Mathematica 用了另一套 Fortress 用了這一套
這說明了這真的不是一個數學問題 而是設計問題 要什麼有什麼
而設計問題就是使用者最大 而真正的使用者不包含會需要去算「6÷2(1+2)」的人
(因為這是一個假問題)
而是那些看著論文上的分式去打計算機的人
「需不需要為了省打一次誇號而引入這套複雜演算法」才是問題所在
(因為使用者也可能會忘掉打誇號)
所以我上一篇才說需要做 usability study (其實數學版可以辦一個投票)
最後 再出一題好了
請問 「2+3 - 4+2」 是多少?
1) 3
2) -1
3) (語法錯誤)
Fortress的答案是 3) 就跟 sin x+y 一樣
沒關係 我沒什麼興趣為這題爭分數 xddd
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.43.113.25
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 45 之 48 篇):