summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arith.c35
1 files changed, 25 insertions, 10 deletions
diff --git a/arith.c b/arith.c
index 88e6db13..91f65d03 100644
--- a/arith.c
+++ b/arith.c
@@ -4387,20 +4387,35 @@ val numeqv(val first, struct args *rest)
val numneqv(struct args *args)
{
- val i, j;
- val list = args_get_list(args);
+ if (!args->list) {
+ cnum i, j, n = args->fill;
+
+ if (n == 1) {
+ (void) unary_arith(lit("/="), args->arg[0]);
+ return t;
+ }
+
+ for (i = 0; i < n; i++)
+ for (j = i + 1; j < n; j++)
+ if (numeq(args->arg[i], args->arg[j]))
+ return nil;
- if (list && !cdr(list)) {
- (void) unary_arith(lit("/="), car(list));
return t;
- }
+ } else {
+ val i, j;
+ val list = args_get_list(args);
- for (i = list; i; i = cdr(i))
- for (j = cdr(i); j; j = cdr(j))
- if (numeq(car(i), car(j)))
- return nil;
+ if (list && !cdr(list)) {
+ (void) unary_arith(lit("/="), car(list));
+ return t;
+ }
- return t;
+ for (i = list; i; i = cdr(i))
+ for (j = cdr(i); j; j = cdr(j))
+ if (numeq(car(i), car(j)))
+ return nil;
+ return t;
+ }
}
static val sumv(struct args *nlist, val keyfun)