<div dir="ltr"><div>Hello All,<br></div><div><br></div><div style>My name is Rian and I am a new Racket user and a novice programmer (Racket is my first language). First let me say that I am very grateful for the resources available online and the books, HTDP and Realm of Racket. I find your teaching methods very clear and as a result I am picking up Racket faster than I originally thought.</div>
<div style><br></div><div style>I am a System Science graduate student whose primary research focus is on Fuzzy Set Theory. A fuzzy set is a collection of distinct elements where each element has a degree of membership associated with it. </div>
<div style><br></div><div style>The representation I am currently using for a fuzzy set is the following:</div><div style>First I create a struct called fuzzy-element which consists of 2 fields; the first is the name of the element and the second is the elements degree of membership to the set which ranges from 0 to 1.</div>
<div style><br></div><div style>;; Data Definition</div><div style><br></div><div>#lang racket</div><div><br></div><div>(struct fuzzy-element (member degree-of-membership) </div><div>  #:transparent</div><div>  #:guard (lambda (member degree-of-membership type-name)</div>

<div>            (cond</div><div>              [(not (and (number? degree-of-membership)</div><div>                         (&lt;= 0 degree-of-membership 1) degree-of-membership))</div><div>               (error type-name</div>

<div>                      &quot;~e is not a number between 0 and 1&quot;</div><div>                      degree-of-membership)]</div><div>              [else (values member degree-of-membership)])))</div><div>
<br></div><div>;; fuzzy-element is (fuzzy-element Symbol Number[0, 1])</div><div>;; interp. a fuzzy-element as a struct in which:</div><div>;;         -the first field is the member&#39;s name</div>
<div>;;         -the second field is the respective members degree of membership</div><div><br></div><div style>Then I combine them with a list so what I have now is a list of fuzzy elements.</div><div><br></div><div><div>
;; ListOfFuzzyElement is one of:</div><div>;; - empty</div><div>;; - (cons fuzzy-element ListOfFuzzyElement)</div></div><div><br></div><div style>The problem with this data definition is that it allows for duplicate structs with the same field-1 elements.</div>
<div style><br></div><div style>What I am looking to create is</div><div><br></div><div>;; A Fuzzy-Set is one of:</div><div>;; - empty list</div><div>;; - (cons <b>distinct</b> fuzzy-element ListOfFuzzyElement)</div><div>
<br></div><div><br></div><div><div><br></div><div><div>Ideally the type of representation I would like to use should look like: </div><div><br></div><div><div>(fuzzy-set (fuzzy-element &#39;a .1)</div><div>               (fuzzy-element &#39;b .2)</div>
<div>               (fuzzy-element &#39;c .3)</div><div>               (fuzzy-element &#39;a .3))</div><div><br></div><div>-&gt; (fuzzy-set (fuzzy-element &#39;a .1)</div><div>                   (fuzzy-element &#39;b .2)</div>
<div>                   (fuzzy-element &#39;c .3))</div></div><div><br></div><div style>Upon evaluation, the last element, (fuzzy-element &#39;a .3) is deleted because there already exists a member named &#39;a (fuzzy-element &#39;a .1). It should work exactly like the built in &quot;set&quot; data type, except in this case it is a set of structures that checks the first fields of all structures and eliminates latter duplicates. </div>
</div><div><br></div><div style>Any guidance on how to create fuzzy-set representation this way or if you can suggest more concise and elegant methods I would be greatly appreciative. </div><div><br></div><div style>Thanks,</div>
-- <br>Rian Shams
</div></div>