返回Racket ISL中的数字列表中的最小元素?

时间:2016-12-06 23:05:58

标签: algorithm list racket racket-student-languages

我必须在Racket ISL中编写一个函数,它接受一个数字列表并返回列表中最小的数字。最小值和最大值都不允许。我想我有一个开始;显然需要递归。

最终我将使用此功能创建一个抽象的。

(check-expect (find-smallest (list 3 8 4 9 2 0 1)) 0)
(check-expect (find-smallest (list 2 3 4 5 6)) 2)
(check-expect (find-smallest (list 58 37 28 37 58 92 24)) 24)
(check-expect (find-smallest (list 19 38 46 85 19 38 19)) 19)

;; find-smallest: list of numbers -> number
;; consumes a list of numbers and returns the
;; smallest number in the list
(define (find-smallest lon)
  (cond
    [(empty? (rest lon)) (first lon)]
    [(

2 个答案:

答案 0 :(得分:1)

看起来你的基本情况很好。您的默认情况可以如下:您使用<查找列表其余部分中的最小部分,并将其与第一个元素进行比较,例如。与app.filter('filterAll', function () { return function (dataArray, searchTerm, propertyNames) { if (!dataArray) return; if (!searchTerm) { return dataArray; } else { if (propertyNames == undefined) { propertyNames = []; for (var property in dataArray[0]) { if(typeof dataArray[0][property] == "string" && property != "$$hashKey" && property != "UnitName" ) propertyNames.push(property); } } console.log("propertyNames", propertyNames); var term = searchTerm.toLowerCase(); return dataArray.filter(function (item) { var found = false; propertyNames.forEach(function(val) { if (!found) { if (item[val] != null && item[val].toLowerCase().indexOf(term) > -1) found = true; } }); return found; }); } } }); 。那么最小的应该是结果。

答案 1 :(得分:0)

还可以使用内部命名的let循环和临时变量来存储最小值以查找最小数量的列表:

(define (find-smallest l)
  (let loop ((l l)
             (sm (first l))) ; start with first of list as smallest
    (cond
      [(empty? l) sm]
      [(< sm (first l))
       (loop (rest l) sm)]
      [else
       (loop (rest l) (first l))])))