スコアリング関数 (既に作成済み) と文字列のペアのリスト (書き方について混乱している) の両方を入力として取り、変更された文字列のペアのリストを返す関数を作成するにはどうすればよいですか?返されるリストには、入力関数に従ってスコア付けされた、入力からのすべての最適な文字列ペアが含まれている必要があります。
入力例:
'( ("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)))))