# 빈 리스트에 대한 all? 함수의 리턴 값은? - 공허참(vacuous truth)

> Clean Markdown view of GeekNews topic #12382. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=12382](https://news.hada.io/topic?id=12382)
- GeekNews Markdown: [https://news.hada.io/topic/12382.md](https://news.hada.io/topic/12382.md)
- Type: news
- Author: [ohyecloudy](https://news.hada.io/@ohyecloudy)
- Published: 2023-12-17T18:07:03+09:00
- Updated: 2023-12-17T18:07:03+09:00
- Original source: [ohyecloudy.com](http://ohyecloudy.com/pnotes/archives/vacuous-truth/)
- Points: 12
- Comments: 3

## Topic Body

- 빈 리스트에 대한 `Enum.all?` 함수 리턴 값이 `true`   
   - Haskell의 `all`, Python의 `all`, Clojure의 `every?` 함수도 똑같이 동작  
- 빈 리스트에 대해 true를 리턴하면 구현하기 쉬움  
   - `true && f(elem1) && f(elem2) ...`  
   - 하지만 구현상 편의 때문에 저렇게 구현한 게 아님  
   - 논리학의 공허참(vacuous truth) 정의에 부합하게 구현한 것임  
- 공허참을 이해하기 위해선 실질 조건문을 살펴봐야 함  
   - p가 거짓이면 p → q는 항상 참  
   - “자유의 여신상이 서울에 있다면 에펠탑은 포항에 있다”는 참  
       - p인 “자유의 여신상이 서울에 있다”가 거짓이기 때문  
   - 이런 실질 조건문에서 p가 거짓이라 무조건 참이되는 걸 공허참이라고 함  
- 공허참에서는 비어있는 집합(set)에 대해서는 어떠한 명제도 참이 된다  
   - '방 안의 모든 휴대폰이 꺼져 있다'를 예로 들면  
   - x는 방에 있는 모든 것  
   - P(x)는 'x는 휴대폰이다'  
   - Q(x)는 'x는 꺼져있다'  
   - x가 비어 있기 때문에 P(x)는 거짓. 공허참에 의해 항상 참이 된다.  
- 그래서 비어 있는 리스트에 대한 Enum.all? 함수의 리턴 값은 true가 된다.

## Comments



### Comment 21463

- Author: tapu1125
- Created: 2023-12-18T07:16:12+09:00
- Points: 1

배워갑니다ㅎ공유 감사해요  
수학적, 컴공적 접근은 이래도 코딩땐 헷갈려서 활용 안하는게 좋아보여요ㅋㅋ  
특히 if문에서는 빈 리스트를 False로 인식해서 많이 헷갈립니다  
  
파이썬 기준 아래와 같습니다.  
all([]) == True  
all([[]]) == False

### Comment 21471

- Author: p0rygon
- Created: 2023-12-18T09:52:29+09:00
- Points: 2
- Parent comment: 21463
- Depth: 1

저는 그래서 코드를 읽을 사람을 위해 조건을 명시적으로 작성하는 방향을 선호합니다.  
if not arr: 보다는 if len(arr) == 0: 처럼요.  
if not flag: 대신 if flag is False: 같은 예시도 있겠네요.  
  
제 기준에 따르면 all([[]]) 는 all([조건식 for ... in []]) 로 고쳐 쓰는 게 코드를 더 잘 읽히게 해줄 테고요.

### Comment 21466

- Author: ohyecloudy
- Created: 2023-12-18T08:39:16+09:00
- Points: 1
- Parent comment: 21463
- Depth: 1

아~ python에서는 빈 리스트가 falsy values라서 all([[]]) 리턴 값이 False가 되는거군요. 언어마다 Truthy, Falsy values가 달라서 다른 언어를 할 때, 한 번씩 실수를 하네요. :)  
  
참고로 Elixir는 nil 또는 false만 Falsy values라서 Enum.all?([[]]) 값은 true가 나와요.
