Вы можете использовать
List<DataRow> list = new List<DataRow>(dt.Select());
dt.Select()
, чтобы возвращать все строки в вашей таблице, как массив datarows, а конструктор List
принимает этот массив объектов в качестве аргумента для первоначального заполнения ваш список с.
Использование помощника просто означает, что вы должны разбить вашу программу на более мелкие части и, возможно, инкапсулировать циклы с дополнительными параметрами в отдельных процедурах - и в схемах циклы часто реализуются через рекурсивные вызовы. Одним (наивным) способом реализации процедуры is_prime
будет:
(define (is_prime n)
(cond ((<= n 1) #f)
((= n 2) #t)
((= (modulo n 2) 0) #f)
(else (check 3 n))))
; recursive helper
(define (check i n)
(cond ((> (* i i) n) #t)
((= (modulo n i) 0) #f)
(else (check (+ i 2) n))))
Существует много способов реализации этой процедуры и множество возможных оптимизаций; вышесказанного должно быть достаточно для начала.