This code takes a list of lists and splits it into separate groups whenever a sublist starts with the specified symbol. Each group is then added to the result. The result is a list of these grouped sublists. To solve this problem in Scheme recursively, let's define a recursive function that will process the list of lists and split them into groups whenever a sublist starts with the specified symbol. ### Steps: 1. **Base Case**: If the list of lists is empty, return an empty list. 2. **Recursive Case**: - If the first sublist starts with the given symbol and the current group is not empty, start a new group. - Otherwise, continue adding sublists to the current group. ### Scheme Implementation: Here’s how you can implement this in Scheme: {{{ (define (split-list-of-lists list-of-lists symbol) (define (split-helper lists current-group result) (cond ((null? lists) (if (null? current-group) result (append result (list current-group)))) ((equal? (caar lists) symbol) (if (null? current-group) (split-helper (cdr lists) (list (car lists)) result) (split-helper (cdr lists) (list (car lists)) (append result (list current-group))))) (else (split-helper (cdr lists) (append current-group (list (car lists))) result)))) (split-helper list-of-lists '() '())) ;; Example usage: (define list-of-lists '((a 1 2 3) (b 4 5 6) (* 7 8 9) (c 10 11) (* 12 13) (d 14 15 16))) (define symbol '*) (split-list-of-lists list-of-lists symbol) }}} ### Explanation: 1. **`split-list-of-lists`**: The main function that initializes the recursive process with an empty `current-group` and `result`. 2. **`split-helper`**: - **Base Case**: When `lists` is empty, if `current-group` is also empty, return the `result`. Otherwise, append the `current-group` to the `result`. - **When symbol is encountered**: If the current group is not empty, append it to the result and start a new group. If the current group is empty, simply start a new group with the current sublist. - **Else case**: Append the current sublist to the `current-group` and continue the recursion. ### Example Output: Running the above code with the example `list-of-lists` and `symbol`, you should get: {{{ '(((a 1 2 3) (b 4 5 6)) ((* 7 8 9) (c 10 11)) ((* 12 13) (d 14 15 16))) }}} This Scheme code recursively processes the list of lists and splits them into groups based on the given symbol.