Changes between Version 8 and Version 9 of WikiStart


Ignore:
Timestamp:
08/14/24 14:21:01 (9 months ago)
Author:
Enrico Schwass
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • WikiStart

    v8 v9  
    5151schedule = Schedule(unrolled)
    5252}}}
    53 
    54 Certainly! Let's break down the task with an example:
    55 
    56 ### Given:
    57 - You have a list of lists.
    58 - You want to split each sublist at the point where the sublist starts with a given symbol.
    59 
    60 ### Example:
    61 
    62 #### Input:
    63 ```python
    64 list_of_lists = [
    65     ['a', 1, 2, 3],
    66     ['b', 4, 5, 6],
    67     ['*', 7, 8, 9],
    68     ['c', 10, 11],
    69     ['*', 12, 13],
    70     ['d', 14, 15, 16]
    71 ]
    72 symbol = '*'
    73 ```
    74 
    75 #### Expected Output:
    76 ```python
    77 [
    78     [['a', 1, 2, 3], ['b', 4, 5, 6]],
    79     [['*', 7, 8, 9], ['c', 10, 11]],
    80     [['*', 12, 13], ['d', 14, 15, 16]]
    81 ]
    82 ```
    83 
    84 ### Steps:
    85 
    86 1. **Initialize an empty result list**: This will hold the final split sublists.
    87 2. **Iterate through each sublist**: Check if the first element of the sublist is the given symbol.
    88 3. **When the symbol is found**: Start a new group in the result list.
    89 4. **Continue grouping until the symbol is encountered again**.
    90 
    91 ### Python Code Implementation:
    92 
    93 ```python
    94 def split_list_of_lists(list_of_lists, symbol):
    95     result = []
    96     current_group = []
    97    
    98     for sublist in list_of_lists:
    99         if sublist[0] == symbol and current_group:
    100             result.append(current_group)
    101             current_group = []
    102         current_group.append(sublist)
    103    
    104     if current_group:
    105         result.append(current_group)
    106    
    107     return result
    108 
    109 # Example usage
    110 list_of_lists = [
    111     ['a', 1, 2, 3],
    112     ['b', 4, 5, 6],
    113     ['*', 7, 8, 9],
    114     ['c', 10, 11],
    115     ['*', 12, 13],
    116     ['d', 14, 15, 16]
    117 ]
    118 symbol = '*'
    119 output = split_list_of_lists(list_of_lists, symbol)
    120 print(output)
    121 ```
    122 
    123 ### Output:
    124 ```python
    125 [
    126     [['a', 1, 2, 3], ['b', 4, 5, 6]],
    127     [['*', 7, 8, 9], ['c', 10, 11]],
    128     [['*', 12, 13], ['d', 14, 15, 16]]
    129 ]
    130 ```
    131 
    132 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.
    133 
    134 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.
    135 
    136 ### Steps:
    137 
    138 1. **Base Case**: If the list of lists is empty, return an empty list.
    139 2. **Recursive Case**:
    140     - If the first sublist starts with the given symbol and the current group is not empty, start a new group.
    141     - Otherwise, continue adding sublists to the current group.
    142 
    143 ### Scheme Implementation:
    144 
    145 Here’s how you can implement this in Scheme:
    146 
    147 ```scheme
    148 (define (split-list-of-lists list-of-lists symbol)
    149   (define (split-helper lists current-group result)
    150     (cond
    151       ((null? lists)
    152        (if (null? current-group)
    153            result
    154            (append result (list current-group))))
    155       ((equal? (caar lists) symbol)
    156        (if (null? current-group)
    157            (split-helper (cdr lists) (list (car lists)) result)
    158            (split-helper (cdr lists) (list (car lists)) (append result (list current-group)))))
    159       (else
    160        (split-helper (cdr lists) (append current-group (list (car lists))) result))))
    161   (split-helper list-of-lists '() '()))
    162 
    163 ;; Example usage:
    164 (define list-of-lists
    165   '((a 1 2 3)
    166     (b 4 5 6)
    167     (* 7 8 9)
    168     (c 10 11)
    169     (* 12 13)
    170     (d 14 15 16)))
    171 
    172 (define symbol '*)
    173 
    174 (split-list-of-lists list-of-lists symbol)
    175 ```
    176 
    177 ### Explanation:
    178 
    179 1. **`split-list-of-lists`**: The main function that initializes the recursive process with an empty `current-group` and `result`.
    180 
    181 2. **`split-helper`**:
    182     - **Base Case**: When `lists` is empty, if `current-group` is also empty, return the `result`. Otherwise, append the `current-group` to the `result`.
    183     - **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.
    184     - **Else case**: Append the current sublist to the `current-group` and continue the recursion.
    185 
    186 ### Example Output:
    187 Running the above code with the example `list-of-lists` and `symbol`, you should get:
    188 
    189 ```scheme
    190 '(((a 1 2 3) (b 4 5 6))
    191   ((* 7 8 9) (c 10 11))
    192   ((* 12 13) (d 14 15 16)))
    193 ```
    194 
    195 This Scheme code recursively processes the list of lists and splits them into groups based on the given symbol.
    196