Как мне написать функцию, которая принимает как функцию подсчета очков (которую я уже написал), так и список пар строк в качестве входных данных (которую я запутался в том, как писать), и возвращает измененный список пар строк , где возвращаемый список должен содержать все оптимальные пары строк из ввода, оцененные в соответствии с входной функцией.
Пример ввода:
'( ("hello" "b_low") ("hello_" "b_l_ow") ("hello" "_blow") ("hello" "blow") ("h_e_llo" "bl_o__w") )
Пример вывода:
( ("hello" "b_low") ("hello_" "b_l_ow") ("hello" "_blow") )
функция принимает список пар строк, как показано выше. Он также принимает функцию. Он использует эту функцию как средство для оценки списка пар строк. Затем он возвращает список пар строк, содержащий все пары строк, которые имеют наивысшую оценку совпадения на основе функции, которая была дана для их оценки. Другими словами, у всех (("hello" "b_low") ("hello_" "b_l_ow") ("hello" "_blow")) одинаковая оценка -3, но ("h_e_llo" "bl_o__w")) оценка -12, поэтому он исключается из списка.
Функции для вычисления alignemt:
(define (char-scorer char1 char2)
(cond
((char=? char1 char2) 2)
((or (char=? char1 #\_ ) (char=? #\_ char2)) -2)
(else -1)))
(define (alignment-score s1 s2)
(define min-length (min (string-length s1) (string-length s2)))
(let loop ((score 0) (index 0))
(if (= index min-length)
score
(loop (+ score (char-scorer (string-ref s1 index) (string-ref s2 index)))(+ index 1)))))