## Monday, February 23, 2009

### Programming Without If's: Challenge One

During the time between 2005-2009 I began my software design courses with a problem I call the “Bergin Calculator Problem” (Inspired by Joe Bergin’s Polymorphic Calculator). It requires the student to program a simple calculator with only six buttons. Three number buttons (2,3,5) , two operator buttons (+,-) and an equals button. The calculator need only perform one binary operation before yielding an answer following a strike on the equals button. A typical computation would involve entering 2, 2, +, 3, 3, = … and the display would indicate the answer of 55. The display would show the numbers entered in both the pre-operator and post-operator modes, but not the operator itself. Thus, one would only ever see numbers in the display. Following each computation, striking the equals button would also render the calculator ready for a subsequent computation with an entirely new set of numbers.
Over ninety per cent of the submissions I graded used conditional logic to solve the problem. The week following, the class would go through the problem and together, construct a calculator that uses no conditional logic nor loop structures. The fact that this exercise amazes many students, indicates the very real possibility that most have been taught how to use an object-oriented language to do procedural programming - a very easy thing to do. In fact, I recall one graduate student who had taken the problem back to his work place and one of his co-workers, literally a rocket scientist, said the problem couldn’t be solved without the use of if’s. Since then, I have taken to giving problems to students that require them to produce a solution not dependent on conditional logic – I call this “Programming without if’s.”
I will discuss in another place the problem of over-engineering but for now assume it’s OK, in fact desirable, to construct an over-engineered solution. Why? The metaphor I like to use is that of the toolbox. When you go to your toolbox and see only a hammer, then every problem appears to be a nail. Most contemporary programmers were taught by procedural programmers whose only adaptation to learning object-oriented programming was to begin using an object-oriented language. One way to break out of this mental trap is to solve some problems without reaching for the hammer, which in the programmer’s case is the conditional logic structure.
Do I expect programmers to avoid using conditional logic as a best practice? No, the student of programming has to understand the difference between what we do to expand our capabilities, ie., put more tools in the toolbox, and what we do when programming professionally. Programming without if’s will expand your ability to see alternatives in the power offered to you by the object-oriented paradigm. If you’d like to take the Calculator Challenge a zipped Eclipse project named SwingCalculatorWithIfs is here. See if you can refactor this code to a solution that contains no conditional logic (if statements). A discussion of the answer will follow and I will post a solution at the same address the challenge code was posted.

#### 1 comment:

1. 2009年4月5日 星期日
論證

[組成]
[涉及]
因此，任何論證就包含有論題、論據和論證三個[組成部分]或[要素]

演繹的直接論證
歸納的直接論證
類比的直接論證

間接
反證法
淘汰法

(一)反駁論題
1.直接反駁法
2.間接反駁法
(1)另立相反論題反駁法
相互排斥(矛盾 反對)
(2)歸謬法
(二)反駁論據
(三)反駁論證方式

第四節 論證中[必須遵循]的邏輯思維[規律]
[try&error]
一、同一律以及論辯中違反同一律而發生的邏輯錯誤
(一)同一律的基本內容
A=A(或「A->A」)
(二)論辯中違反同一律的典型錯誤
1.「偷換概念」
內涵 外延 熱力學 密度 比容 倒數關係
混淆概念
2.轉移論題
偷換論題
中心
天馬行空 東拉西扯，節外生枝 「論題不清」是「轉移論題」一種極端情形。
辯護 看不慣 跟著做
這裡，本來確立的論題是「真理有階級性」，而在引用論據進行論證時，卻把它變成了「認識、利用和接受真理都有階級性」。這一論證，撇開其內容的正確或錯誤不說，僅從邏輯上看，他預先確立的論題和實際證明的論題就不是同一回事，這就犯「轉移論題」的錯誤。
已構成 完全可能
二、矛盾律以及論辯中違反矛盾律而發生的邏輯錯誤
(一)矛盾律的基本內容
~(A^~A)
(二)論辯中違反矛盾律的典型錯誤
自相矛盾
三、排中律以及論辯中違反排中律而發生的邏輯錯誤
(一)排中律的基本內容
AV~A
(二)論辯中違反排中律的典型錯誤
模稜兩可
模稜以持兩端
騎牆居中、似是而非，在相互否定的兩種思想面前，既否定這種，又否定那種，貌似有所斷定，實則是在兩種思想游移不定、含糊其辭。這就是說，其思維特徵直接表現出來的卻是「模稜兩不可。」
觀點含糊、模稜兩可
一種情形
基本粒子是又間斷又連續，若斷若續、非斷非續，續中有斷、斷(段?!)中有續(序?@!)；可能愈分愈小，也可能愈分愈大。
玄 論證者在這裡就既未肯定「A」這樣的觀點，也未肯定「~A」這樣的觀點；似乎是這樣的觀點，又似乎不是這樣的觀點。表面看來，表達的觀點全面、論證，實則讓人不明究竟。
另一種情形
論證中對某個問題的態度，「是」也否定，「非」也否定，讓人無法確認論證者的觀點和態度究竟是什麼；或者，在對待別人關於某個問題的態度上，你這樣做他要指責，不這樣做他也指責，讓人動輒得咎、無所適從。

四、充足理由律以及論辯中違反充足理由律而發生的邏輯錯誤
(一)充足理由律的基本內容
B^(B->A)->A
(二)論辯中違反充足充足理由律的典型錯誤
1.「理由虛假」
論據虛假
顛倒黑白、無中生有 捏造事實 而且就是這種錯誤的極端情形
維生素B17 Vit?!VITMIN
2.「預期理由」
想當然 估算的生活費用
3.「循環論證」
冒充
4.「推不出來」
不能推出
一種情形 無關論證
態度 意見
我是中國人，何必學外文
亂列理由
盜竊糧食 抗美援朝被俘 訓練班正式學員
錯誤的極端情形
三、充足理由律以及論辯中違反充足理由律而發生的邏輯錯誤
(一)充足理由律的基本內容
B^(B->A)->A
(二)論辯中違反充足充足理由律的典型錯誤
1.「理由虛假」
論據虛假
顛倒黑白、無中生有 捏造事實 而且就是這種錯誤的極端情形
維生素B17 Vit?!VITMIN
2.「預期理由」
想當然 估算的生活費用
3.「循環論證」
冒充
4.「推不出來」
不能推出
一種情形 無關論證
態度 意見
我是中國人，何必學外文
亂列理由
盜竊糧食 抗美援朝被俘 訓練班正式學員
錯誤的極端情形

楞嚴經
陰魔
第五節 法庭辯論中常見的非形式謬誤
fallacy謬誤 fallacia 悖謬 詭辯 虛妄 荒誕 橘去掉木部改言部詭
貌似正確、似是而非 以任意的方式，憑藉虛假的根據，或者將一個真的道理否定、動搖了，或者將一個虛假的道理說得非常動聽，好像真的一樣
二、法庭論辯中的[非形式謬誤]
(一)故意利用語詞歧義的謬誤
還 偷換概念
(二)任意解釋、曲解法律條款的謬誤
以事實為根據，以法律為準繩
犯 「任意解釋」「曲解法律條款」
「解釋的錯誤」
很年輕
(三)顛倒黑白、強詞奪理的謬誤
想占便宜
主觀責任和客觀條件是兩個不同的問題，絕不能把「責任」和「條件」混為一談；更不能顛倒、用後者去代替前者。
(四)訴諸情感的謬誤
(五)以人為據、人身攻擊的謬誤

自己定義的能力 仿句 例子判例 排比法作文李思翰陳建宏化學CCH
尹衍樑
出生:1950年
現職:潤泰集團總裁
學歷:臺灣大學商學碩士 政治大學企管博士
家庭:已婚，育有1子1女
興趣:開跑車、飛機、遊艇、騎重型機車等
總裁不用的9種人
1.太過俊美的人
2.強烈宗教信仰的人
3.黑道背景的人
4.大官子女
5.富裕家庭子女
6.藝術性格的人
7.心理殘疾的人
8.工作換太多的人
9.自認學歷高的人

所知障
張貼者： 垃圾桶:縮短網址.銀行.更新.流量(登入? 文章?) 位於 上午 8:35

2009年4月5日 星期日
我說阿 膠囊 悉怛多缽怛囉 阿門 陳鴻偉獨生子我
法律邏輯學 雍琦◎著 楊智傑(http//tw.myblog.yahoo.com/yangjames2000/)◎校訂
出版者-五南圖書出版股份有限公司
ISBN 978-957-11-5295-0
性質命題
複合命題
規範命題
演繹推理
歸納推理
類比推理
偵查假說
論證
張貼者： 垃圾桶:縮短網址.銀行.更新.流量(登入? 文章?) 位於 上午 4:44
9 意見:

垃圾桶:縮短網址.銀行.更新.流量(登入? 文章?) 提到...
此文章已被作者刪除。
2009年4月5日 上午 5:38
垃圾桶:縮短網址.銀行.更新.流量(登入? 文章?) 提到...
此文章已被作者刪除。
2009年4月5日 上午 5:58
垃圾桶:縮短網址.銀行.更新.流量(登入? 文章?) 提到...

性質命題

「關係項」 「關係」
「等於」 「大於」 「相鄰」 「夥同」 「同窗」 「批評」
基本類型
(一)全稱命題與特稱命題
(二)肯定命題與否定命題
SAP
SEP
SIP
SOP
反對關係 下反對關係
差等關係 矛盾關係
隱含命題

複合命題

基本形式
一、聯言命題
在自然語言中，表示聯言命題的[連接詞]多種多樣。如「不但......而且......」，「既......又......」，「雖然......但是......」，「......並且......」等
二、選言命題
析取
三、假言命題
表達假言命題的[連接詞]有:「如果......，那麼......」、「只有......才......」、「當且僅當......，才......」，以及「只要......，就......」、「若......，就......」，等等

等值式
若僅從複合命題各肢命題之間的關係來看，除前面所講的「合取」、「析取」、「蘊涵」(含「逆蘊涵」)等關係外，還有一種「等值」關係，符號表示為「<->」
2009年4月5日 上午 6:05
垃圾桶:縮短網址.銀行.更新.流量(登入? 文章?) 提到...

規範命題

所謂模擬命題，就是一切[包含]有「可能」、「必然」、「必須」、「禁止」等這類模擬態的命題。
狹義 [包含]有「可能」、「必然」
廣義 [包含]有「必須」、「允許」、「禁止」
(一)必然命題□
表達必然命題的模態詞，除「必然」外，還有「一定」、「必定」、「必將」、「總是」之類的語詞。
(二)或然命題◇

法律規範 「行為模式(假定 處理)」 「法律後果(制裁)」
(一)「允許」型規範命題的模態詞，通常用「允許」、「可以」、「可」、「有權」、「有......的權利」等一類語詞表示。
(二)「必須」型規範命題，亦稱為義務性規範命題或命令性、強制性規範命題，也就是包含有「必須」、「應當」一類模態詞的命題。
「必須」型規範命題，除了包含有「必須」、「應當」這類模態詞命題以外，還有包含「有義務」、「有......的義務」、「有......的責任」這類語詞的命題。
除「允許」型和「必須」型兩種基本的規範命題類型之外，還有「禁止」型規範命題，亦即包含有「禁止」、「嚴禁」、「不得」、「不准」、「不許」之類語詞的命題。由於「禁止」與「必須」可以互推(如前所述，「禁止C」=「必須非C」)
「允許P」Permission
「必須O」Obligation 「禁止F」Forbid 「A行為規定」規範命題的邏輯變項
2009年4月5日 上午 6:33
垃圾桶:縮短網址.銀行.更新.流量(登入? 文章?) 提到...

演繹推理

S小項M中項P大項
假言推理基本形式
充分條件
必要條件
v ^ ->

二難推理
就是以兩個充分條件假言命題和一個選言命題(或聯言命題)做前提而構成的演繹推理。
二難 釋放 不釋放 權衡

R-法律規定
F-確認的案件事實
___________________
D-裁判結論

T->R(具備T構成要件者適用R法律效果)
S=T(待決案件事實符合T構成要件)
___________________
S->R(該待決案件事實適用R法律效果)
2009年4月5日 上午 7:01
垃圾桶:縮短網址.銀行.更新.流量(登入? 文章?) 提到...

歸納推理

一、完全歸納推理
(一)窮舉歸納推理
(S1、S2、S3...Sn是S類的全部個體對象)
__________________________________
所以，所有S都具有P屬性
(二)分類歸納推理
(S1、S2、S3...Sn是S類的全部對象的所有可能情況)
__________________________________
所以，S類(或S對象整體)都具有P屬性。

不完全歸納推理
ERRor
推理過程中「輕率概括」，必然導致結論「以偏概全」
所謂「懶散概括」，亦稱「懶散歸納」，其錯誤情形與「輕率概括」又恰好相反。「信念」

因果
場合 相關因素 被研究現象
_______________________
一、契合法
二、差異法
相關因素 被研究對象 有無大小高低正反
[三、契合差異並用法]
[四、共變法]
[五、剩餘法]
2009年4月5日 上午 7:16
垃圾桶:縮短網址.銀行.更新.流量(登入? 文章?) 提到...

類比推理

類比法律推理
(一)類推適用
(二)判例適用

比對推理 識同別異
2009年4月5日 上午 7:21
垃圾桶:縮短網址.銀行.更新.流量(登入? 文章?) 提到...

假說與[偵查假說]

望聞問切

[程序] 假說的[建立][過程]是一個比較複雜的思維過程，大致可分為[假說的提出、假說的推演、假說的驗證三個階段]
不過，由於偵查假說是一種[作業]假說，假說的推演和驗證常常結合在一起進行。

(H ->e)^H->e

H->e
e
_______
∴H(?)

H->e
~e
_________
∴ ~H
2009年4月5日 上午 7:29
垃圾桶:縮短網址.銀行.更新.流量(登入? 文章?) 提到...
此文章已被作者刪除。
2009年4月5日 上午 7:29 悉怛多缽怛囉阿門證據時效