From e70a88470622b513366076a0c435648daa56c084 Mon Sep 17 00:00:00 2001 From: Arun Isaac Date: Mon, 1 Jun 2020 04:48:01 +0530 Subject: ui: Cut off search early if any regexp does not match. * guix/ui.scm (relevance): When one of the regexps does not match, cut off early and return 0. Do not try to match the remaining regexps. --- guix/ui.scm | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'guix') diff --git a/guix/ui.scm b/guix/ui.scm index 7690f48660..c1c9b6e3ea 100644 --- a/guix/ui.scm +++ b/guix/ui.scm @@ -14,6 +14,7 @@ ;;; Copyright © 2019 Chris Marusich ;;; Copyright © 2019 Tobias Geerinckx-Rice ;;; Copyright © 2019 Simon Tournier +;;; Copyright © 2020 Arun Isaac ;;; ;;; This file is part of GNU Guix. ;;; @@ -1520,11 +1521,16 @@ score, the more relevant OBJ is to REGEXPS." (+ relevance (* weight (apply + (map score-regexp lst))))))))) 0 metrics))) - (let ((scores (map regexp->score regexps))) - ;; Return zero if one of REGEXPS doesn't match. - (if (any zero? scores) - 0 - (reduce + 0 scores)))) + (let loop ((regexps regexps) + (total-score 0)) + (match regexps + ((head . tail) + (let ((score (regexp->score head))) + ;; Return zero if one of PATTERNS doesn't match. + (if (zero? score) + 0 + (loop tail (+ total-score score))))) + (() total-score)))) (define %package-metrics ;; Metrics used to compute the "relevance score" of a package against a set -- cgit v1.2.3