英語の「○○もできないの?」という質問に対して「はい、できます」と返す謎をプログラミングで解明する


英語の否定疑問文「Can't you speak English ? (あなたは英語もできないの?)」に対し、
日本語なら「はい、できません」か「いいえ、できます」と答えるところを、
英語では「No, I can't.」か「Yes, I can.」とYes/Noを日本語と逆に答えますが、僕はどうしてもこれがしっくりきません。

いざ会話のときにすごく混乱します。

というわけで何が起きているのかJavaScriptで書いて頭を整理してみます…。

通常の疑問文

日本語
const canSpeakEnglish = true

// あなたは英語ができるの?
if (canSpeakEnglish) {
  console.log('はい、できます。')
} else {
  console.log('いいえ、できません。')
}
英語
const canSpeakEnglish = true

// Can you speak english ?
if (canSpeakEnglish) {
  console.log('Yes, I can.')
} else {
  console.log('No, I can\'t.')
}

日本語英語ともにyes/noの差はありません。どちらもごく自然です。

否定疑問文

日本語
const canSpeakEnglish = true

// あなたは英語もできないの?
if (!canSpeakEnglish) {
  console.log('はい、できません…。')
} else {
  console.log('いいえ、できます!')
}
英語
const canSpeakEnglish = true

// Can't you speak english ?
if (!canSpeakEnglish) {
  console.log('No, I can\'t.') // どっち!?
} else {
  console.log('Yes, I can.') // どっちやねん!
}

なんでそうなるんだ!!

Booleanで書くと:

const canSpeakEnglish = true

// あなたは英語もできないの?
if (!canSpeakEnglish) {
  console.log('true、できません。')
} else {
  console.log('false、できます。')
}

// Can't you speak english ?
if (!canSpeakEnglish) {
  console.log('false, I can\'t.')
} else {
  console.log('true, I can.')
}

A. 述べている対象が全然違う

日本語の「はい/いいえ」は条件式(質問)について述べている:

英語の「yes/no」は話している対象自体について述べている:

つまり、「日本語と逆にしなきゃ!」という考えを捨てて、
回答の頭につく「yes/no」は日本語の「はい/いいえ」とは存在意義が全く異なることを認識しないと、この違和感はずっと取れないのかもしれない。

(ちなみに勝手にそう行き着いたので、全然間違っているかもしれません…)

「否定疑問文内のnotを無視して答える」とも教えられたことがあるけど、頭の「yes/no」の捉え方はそっちが正しい…?