Python で遊んでみると、次のコードが期待どおりに機能することがわかりました。
f = lambda S,b : (S if len(S)==b else f(S[1:],b))
リスト S から、S の長さが b に等しくなるまで、最初の要素を再帰的に削除します。たとえば、f([1,2,3,4,5,6],3) = [4,5,6] です。
しかし、驚いたことに、「b if c else a」(別名「c?b:a」) の代わりに「三項ハック」 [a,b][c] を使用する次のソリューションは機能しません。
g = lambda S,b : (g(S[1:],b),S)[len(S)==b]
これは最大再帰深度を超えます。
なぜこれが機能しないのですか?
(どちらも優れたコーディング スタイルの例ではないことはわかっていますが、それは今では重要ではありません。)