我必须在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)]
[(
答案 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))])))