diff --git a/xml/chapter4/section1/subsection2.xml b/xml/chapter4/section1/subsection2.xml
index 3e9685cdf..3a5e1231e 100644
--- a/xml/chapter4/section1/subsection2.xml
+++ b/xml/chapter4/section1/subsection2.xml
@@ -2140,6 +2140,56 @@ list("logical_composition",
as derived components.
+
+ GitHub user EmilyOng provides a solution for the alternative:
+ how to implement
+ && and
+ ||
+ as derived components.
+
+
+function make_conditional_expr_decl(predicate, consequent_expression, alternative_expression) {
+ return list("conditional_expression", predicate, consequent_expression, alternative_expression);
+}
+function make_literal(value) {
+ return list("literal", value);
+}
+
+// Syntax selectors
+function logical_operation(component) {
+ return head(tail(component));
+}
+function first_expression(component) {
+ return head(tail(tail(component)));
+}
+function second_expression(component) {
+ return head(tail(tail(tail(component))));
+}
+
+function logical_comp_decl_to_conditional_expr_decl(component) {
+ const operation = logical_operation(component);
+
+ return operation === "&&"
+ ? make_conditional_expr_decl(
+ first_expression(component),
+ second_expression(component),
+ false
+ )
+ : operation === "||"
+ ? make_conditional_expr_decl(
+ first_expression(component),
+ true,
+ second_expression(component)
+ )
+ : error(component, "unknown operation -- logical_comp_decl_to_conditional_expr_decl");
+}
+
+display(logical_comp_decl_to_conditional_expr_decl(parse("a && b;")));
+display(logical_comp_decl_to_conditional_expr_decl(parse("a || b;")));
+display(logical_comp_decl_to_conditional_expr_decl(parse("(a && !b) || (!a && b);")));
+
+
+