Toggle navigation
?
users online
Logout
Open hangout
Open chat for current file
% Student exercise profile :- set_prolog_flag(occurs_check, error). % disallow cyclic terms :- set_prolog_stack(global, limit(8 000 000)). % limit term space (8Mb) :- set_prolog_stack(local, limit(2 000 000)). % limit environment space % given a Lst, compute ...the minimum, in a list. /* Here is a version which corresponds to our tail-recursive * version from a previous exercise * * ;min‑helper : number, list‑of‑number ‑> number; * ;Return the smallest number out of those in `nums‑remaining` and `min‑so‑far`.; * ;Note that nums‑remaining may be empty * (define (min‑helper min‑so‑far nums‑remaining) * (cond [(empty? nums‑remaining) min‑so‑far] * [(cons? nums‑remaining) (let* {[a (first nums‑remaining)]} * (min‑helper (if (< min‑so‑far a) min‑so‑far a) * (rest nums‑remaining)))])) */ /* % A first version -- transliterated from above, but not yet idiomized. myMin( Nums, Answer ) :- Nums=[F|R], minHelper( F, R, Answer ). minHelper( MinSoFar, NumsRemaining, TheMin ) :- NumsRemaining=[], TheMin=MinSoFar. minHelper( MinSoFar, NumsRemaining, TheMin ) :- NumsRemaining=[F|R], A=F, MinSoFar < A, minHelper(MinSoFar,R,TheMin). minHelper( MinSoFar, NumsRemaining, TheMin ) :- NumsRemaining=[F|R], A=F, MinSoFar >= A, minHelper(A,R,TheMin). */ % Now, just idiomize by removing "=" from r.h.s.s myMin( [F|R], Answer ) :- minHelper( F, R, Answer ). minHelper( TheMin, [], TheMin ). minHelper( MinSoFar, [F|R], TheMin ) :- MinSoFar< F, minHelper(MinSoFar,R,TheMin). minHelper( MinSoFar, [F|R], TheMin ) :- MinSoFar>=F, minHelper(F,R,TheMin). /* minHelper(2,[],X). minHelper(2,[3],X). minHelper(2,[4],X). minHelper(2,[4,3],X). minHelper(2,[4,1],X). myMin([],X). myMin([4],X). myMin([3,2,4],X). */