Skip to content

Commit

Permalink
fixes #915 (#1046)
Browse files Browse the repository at this point in the history
  • Loading branch information
martin-henz authored Jul 10, 2024
1 parent dbae760 commit 4d8a92f
Showing 1 changed file with 50 additions and 0 deletions.
50 changes: 50 additions & 0 deletions xml/chapter4/section1/subsection2.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2140,6 +2140,56 @@ list("logical_composition",
as derived components.
</JAVASCRIPT>
</SPLIT>
<SOLUTION>
GitHub user EmilyOng provides a solution for the alternative:
how to implement
<JAVASCRIPTINLINE>&amp;&amp;</JAVASCRIPTINLINE> and
<JAVASCRIPTINLINE>||</JAVASCRIPTINLINE>
as derived components.
<SNIPPET>
<JAVASCRIPT>
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 === "&amp;&amp;"
? 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 &amp;&amp; b;")));
display(logical_comp_decl_to_conditional_expr_decl(parse("a || b;")));
display(logical_comp_decl_to_conditional_expr_decl(parse("(a &amp;&amp; !b) || (!a &amp;&amp; b);")));
</JAVASCRIPT>
</SNIPPET>
</SOLUTION>
</EXERCISE>

<EXERCISE>
Expand Down

0 comments on commit 4d8a92f

Please sign in to comment.