3
A
回答
5
在流程的只有假值#f
(雖然有時false
別名也用相同的值來定義),什麼都被認爲是真實的 - 其中包括:0
,""
,'()
,等於是明確在此表達式:
(if 0 'a 'b)
值0
是truthy,因此整個表達式的計算結果爲'a
作爲一個結果。
0
不同的語言對於非布爾值是否可以視爲布爾值以及哪些值計爲True
vs False
做出了不同的決定。有關某些語言的行爲的比較,請參閱here。
方案是使決策語言:
- 你可以在需要布爾
- 任何值比典型虛假符號
#f
是truthy其他環境中使用非布爾值。
0
大多數LISPers有關於空列表一樣的感覺。年初以來的LISP nil
/()
也是唯一的錯誤值。計劃推出#f
爲假,並保持()
幾個報告爲假,直到他們刪除()
爲假值。因此只有#f
被認爲是錯誤的。
你不能輕易改變的報告,所以我建議你做一個程序做你想要什麼:
(define (boolean x)
(not (or (eq? x '())
(eq? x #f)
(eqv? x "")
(eqv? x 0))))
(boolean "") ; ==> #f
(if (boolean 0) 'a 'b) ; ==> b
另外,如果你使用這個有很多,你可以讓自己的宏:
(define-syntax mif
(syntax-rules()
((_ predicate consequent alternative)
(if (boolean predicate) consequent alternative))))
(mif 0 'a 'b) ; ==> b
隨着R6RS和R7RS您可以在一個庫中做到這一點,作爲if
與(except (rnrs) if)
一起重新命名了這一點,那麼你可以導入,而不是(rnrs)
這一點,得到這個if
行爲,而不是標準。請注意,您不能更改使用rnrs或其他庫的內容,因此您需要製作所有特殊表單的版本,這些表單的行爲與所需行爲有所不同。閱讀你的代碼的人可能會感到困惑。
相關問題
- 1. 試圖使價值真正的點擊與if語句
- 2. 價值if語句
- 3. 爲什麼語句if(!condition){console.log(condition)}顯示爲真
- 4. 爲什麼javascript(jquery)if語句不能像php if語句那樣工作?什麼是解決方案?
- 5. 當IF語句爲真時,Firefox沒有打開批處理
- 6. 什麼是處理多個if/else語句的更好方法?
- 7. 爲什麼我的if語句意外?
- 8. 爲什麼if語句在JS
- 9. 爲什麼&在這個if語句中?
- 10. 其條件爲真在if語句
- 11. if語句的參數長度爲0
- 12. 爲什麼開關語句在案例
- 13. 什麼是設置if語句來處理document.getElementsByClassName(「class_name」)undefined的正確方法?
- 14. 批處理 - 在IF語句
- 15. 在if語句爲真的情況下一次處理一個結果
- 16. 爲什麼我的if語句跳過了我的else語句?
- 17. 在if語句中的價值
- 18. 當if語句匹配時,爲什麼我的批處理腳本同時運行if和else語句?
- 19. if語句和TextInput價值
- 20. 爲什麼如果語句返回真?
- 21. 爲什麼if語句中的print語句沒有運行?
- 22. Collections.synchronizedList/synchronizedMap的真正價值是什麼?
- 23. 如何在Java中爲真正的if語句打印多個值?
- 24. 爲什麼這是if語句失敗?
- 25. 爲什麼這個if語句引起
- 26. 爲什麼if語句被忽略?
- 27. 爲什麼這個if語句失敗?
- 28. 爲什麼這是if語句True
- 29. 爲什麼這個'if'語句循環?
- 30. 爲什麼IF語句不起作用?
「這是我的理解是零是一個虛假的價值。」據誰? – newacct