The Racket repository
![]() errors and treats them as failing to satisfy the property This bug disables the occurs check and, thanks to the now tighter contracts on the uh function, this can cause it to signal an error. Here's the example: (term (unify (x → (list int)) ((list x) → x))) found by in-order enumeration (so naturally it had || variables in it, not 'x's originally) This leads to this trace in the uh function: (uh ((x → (list int)) ((list x) → x) ·) ·) (uh (x (list x) ((list int) x ·)) ·) (uh ((list int) (list x) ·) (x (list x) ·)) (uh (int x ·) (x (list x) ·)) (uh (x int ·) (x (list x) ·)) (uh · (x int (int (list int) ·))) whereby the third step sets up a problem (that's where the occurs check should have aborted the program) but instead, a few steps later when we get a substitution for 'x', it causes the second argument to not have the form of variables-for-types substitution. I don't think this can happen when the occurs check is in place because the variable elimination step makes sure that we don't set ourselves up to change the domain of anything in the second argument to 'uh' (except possibly when the occurs check fails, of course). Here's an example that shows this: (unify (q → q) (y → int))) (uh ((q → q) (y → int) ·) ·) (uh (q y (q int ·)) ·) (uh (y int ·) (q y ·)) (uh · (y int (q int ·))) In the second to last step we don't have (q int ·), we have (y int ·) because the variable elimination step changes the q to a y. |
||
---|---|---|
native-pkgs@b698e73c35 | ||
pkgs | ||
racket | ||
.gitattributes | ||
.gitignore | ||
.gitmodules | ||
.mailmap | ||
.travis.yml | ||
INSTALL.txt | ||
Makefile | ||
README.txt |
This is the source code for the main Racket distribution. See "INSTALL.txt" for information on building Racket. License ------- Racket Copyright (c) 2010-2014 PLT Design Inc. Racket is distributed under the GNU Lesser General Public License (LGPL). This means that you can link Racket into proprietary applications, provided you follow the rules stated in the LGPL. You can also modify Racket; if you distribute a modified version, you must distribute it under the terms of the LGPL, which in particular means that you must release the source code for the modified software. See racket/src/COPYING_LESSER.txt for more information.