         for expr in exprs {
             do {
                 return try evaluateCallAnonymous(closure: expr, arguments: arguments, callingContext: context)
-            } catch EvaluationError.parameterArgumentMismatch {}
-        }
-        throw EvaluationError.parameterArgumentMismatch
+            } catch EvaluationError.signatureMismatch {}
+        }
+        throw EvaluationError.signatureMismatch
     }
 }

    case notABoolean(Expression)
    case notAFunction(Expression)
    case symbolNotFound(String)
    case parameterArgumentMismatch
}

extension Expression {

        case let .subfunction(subfunction):

            var extendedContext = try matchParameters(closureContext: closureContext, callingContext: callingContext, parameters: subfunction.patterns, arguments: arguments)
            let whenEvaluated = try subfunction.when.evaluate(context: extendedContext)
            guard case .booleanValue(true) = whenEvaluated else { throw EvaluationError.signatureMismatch }
            if let funcName = subfunction.name {
                extendedContext = extendContext(context: extendedContext, name: funcName, value: closure, replacing: false)
            }
