-
Notifications
You must be signed in to change notification settings - Fork 131
Closed
Labels
Exercise solutionSolutions to textbook exercisesSolutions to textbook exercises
Description
https://share.sourceacademy.org/81fek
Show 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);")));
Metadata
Metadata
Assignees
Labels
Exercise solutionSolutions to textbook exercisesSolutions to textbook exercises