callcc

 

 

Description

The call_cc function provides a mechanism for terminating a called function prematurely. No matter where the called function is, in terms of recursion depth, call_cc allows the called function to terminate prematurely and return to the spot just after the call_cc invocation.

In order to do this, call_cc creates an artifice called a "current continuation", which is passed to the called function as an argument. The called function must have one and only one argument, which is to be the current continuation created by call_cc.

The call_cc function passes the current continuation as an argument to function. The current continuation is also a function with one argument which, when invoked, resumes execution from the spot just after the call_cc invocation.

When to use

Use whenever you may need a call back function to a higher recursion level in a program. Multiple call_cc functions can be invoked in the same program. Each continuation will always call back to the call_cc which created it.

 

Syntax

(call_cc aFunction)



Name Description AIS Types
aFunctionA function, expecting a current continuation argument, which may terminate prematurely by invoking the current continuation.aFunction


Returns:

The value returned by the aFunction argument.

 

Examples

Here are a number of links to Lambda coding examples which contain this instruction in various use cases.

 

Argument Types

Here are the links to the data types of the function arguments.

Lambda Function

Here are also a number of links to functions having arguments with any of these data types.

addMethod(BitVector) addMethod(Boolean) addMethod(Brick) addMethod(Character)
addMethod(CpxVector) addMethod(Date) addMethod(Dictionary) addMethod(Directory)
addMethod(FltVector) addMethod(Function) addMethod(IntVector) addMethod(List)
addMethod(Matrix) addMethod(NumMatrix) addMethod(NumVector) addMethod(Number)
addMethod(ObjVector) addMethod(ObjectRepository) addMethod(Pair) addMethod(PcodeVector)
addMethod(ShortVector) addMethod(String) addMethod(Structure) addMethod(Symbol)
addMethod(Vector) addMethod(Void) argCount(Lambda) argFetch(Lambda)
attachLibrarian(ObjectRepository) balance(Lambda) callcc(Lambda) compareEQ(BitVector)
compareEQ(Boolean) compareEQ(Brick) compareEQ(Character) compareEQ(Complex)
compareEQ(CpxVector) compareEQ(Date) compareEQ(Dictionary) compareEQ(Directory)
compareEQ(FltVector) compareEQ(Function) compareEQ(IntVector) compareEQ(Lambda)
compareEQ(List) compareEQ(Matrix) compareEQ(NumMatrix) compareEQ(NumVector)
compareEQ(Number) compareEQ(ObjVector) compareEQ(ObjectRepository) compareEQ(Pair)
compareEQ(ShortVector) compareEQ(String) compareEQ(Structure) compareEQ(Symbol)
compareEQ(Vector) compareEQ(Void) compareGE(BitVector) compareGE(Boolean)
compareGE(Brick) compareGE(Character) compareGE(Complex) compareGE(CpxVector)
compareGE(Date) compareGE(Dictionary) compareGE(Directory) compareGE(Function)
compareGE(IntVector) compareGE(Lambda) compareGE(List) compareGE(Matrix)
compareGE(NumMatrix) compareGE(Number) compareGE(ObjVector) compareGE(ObjectRepository)
compareGE(Pair) compareGE(ShortVector) compareGE(String) compareGE(Structure)
compareGE(Symbol) compareGE(Vector) compareGE(Void) compareGT(BitVector)
compareGT(Boolean) compareGT(Brick) compareGT(Character) compareGT(Complex)
compareGT(CpxVector) compareGT(Date) compareGT(Dictionary) compareGT(Directory)
compareGT(Function) compareGT(IntVector) compareGT(Lambda) compareGT(List)
compareGT(Matrix) compareGT(NumMatrix) compareGT(NumVector) compareGT(Number)
compareGT(ObjVector) compareGT(ObjectRepository) compareGT(Pair) compareGT(ShortVector)
compareGT(String) compareGT(Structure) compareGT(Symbol) compareGT(Vector)
compareGT(Void) compareLE(BitVector) compareLE(Boolean) compareLE(Brick)
compareLE(Character) compareLE(Complex) compareLE(CpxVector) compareLE(Date)
compareLE(Dictionary) compareLE(Directory) compareLE(FltVector) compareLE(Function)
compareLE(IntVector) compareLE(Lambda) compareLE(List) compareLE(Matrix)
compareLE(NumMatrix) compareLE(NumVector) compareLE(Number) compareLE(ObjVector)
compareLE(ObjectRepository) compareLE(Pair) compareLE(ShortVector) compareLE(String)
compareLE(Structure) compareLE(Symbol) compareLE(Vector) compareLE(Void)
compareLT(BitVector) compareLT(Boolean) compareLT(Brick) compareLT(Character)
compareLT(Complex) compareLT(CpxVector) compareLT(Date) compareLT(Dictionary)
compareLT(Directory) compareLT(FltVector) compareLT(Function) compareLT(IntVector)
compareLT(Lambda) compareLT(List) compareLT(Matrix) compareLT(NumMatrix)
compareLT(NumVector) compareLT(Number) compareLT(ObjVector) compareLT(ObjectRepository)
compareLT(Pair) compareLT(ShortVector) compareLT(String) compareLT(Structure)
compareLT(Symbol) compareLT(Vector) compareLT(Void) compareNE(BitVector)
compareNE(Boolean) compareNE(Brick) compareNE(Character) compareNE(Complex)
compareNE(CpxVector) compareNE(Date) compareNE(Dictionary) compareNE(Directory)
compareNE(FltVector) compareNE(Function) compareNE(IntVector) compareNE(Lambda)
compareNE(List) compareNE(Matrix) compareNE(NumMatrix) compareNE(NumVector)
compareNE(Number) compareNE(ObjVector) compareNE(ObjectRepository) compareNE(Pair)
compareNE(ShortVector) compareNE(String) compareNE(Structure) compareNE(Symbol)
compareNE(Vector) compareNE(Void) compare(BitVector) compare(Boolean)
compare(Brick) compare(Character) compare(Complex) compare(CpxVector)
compare(Date) compare(Dictionary) compare(Directory) compare(FltVector)
compare(Function) compare(IntVector) compare(Lambda) compare(List)
compare(Matrix) compare(NumMatrix) compare(NumVector) compare(Number)
compare(ObjVector) compare(ObjectRepository) compare(Pair) compare(ShortVector)
compare(String) compare(Structure) compare(Symbol) compare(Vector)
compare(Void) compile(Lambda) compile(List) copy(BitVector)
copy(Brick) copy(CpxVector) copy(Dictionary) copy(Directory)
copy(FltVector) copy(IntVector) copy(Lambda) copy(List)
copy(Matrix) copy(NumMatrix) copy(NumVector) copy(ObjVector)
copy(Pair) copy(PcodeVector) copy(ShortVector) copy(Structure)
copy(Vector) debugBrowsableProcs(Context) debugBrowsableProcs(Lambda) debug(Context)
debug(Lambda) defchild(Lambda) define(macro)(Lambda) define(Lambda)
defmacro(Lambda) deforphan(Lambda) defriend(Lambda) defun(Lambda)
detachLibrarian(ObjectRepository) disassemble(Context) disassemble(Lambda) display(ByteVector)
display(FileIO) evalInSyncLocalContext(Context) eval(Lambda) eval(List)
exportTab(Lambda) exportTab(ObjectRepository) globalBinding(Context) globalBinding(Lambda)
importTab(Lambda) importTab(ObjectRepository) inspect(Context) inspect(Lambda)
inspect(ObjectRepository) isComplex(Complex) isEqual(BitVector) isEqual(Boolean)
isEqual(Brick) isEqual(Character) isEqual(Complex) isEqual(Date)
isEqual(Dictionary) isEqual(Directory) isEqual(FltVector) isEqual(Function)
isEqual(IntVector) isEqual(List) isEqual(Matrix) isEqual(NumMatrix)
isEqual(NumVector) isEqual(Number) isEqual(ObjVector) isEqual(Pair)
isEqual(ShortVector) isEqual(String) isEqual(Structure) isEqual(Vector)
isEqual(Void) isIdentical(BitVector) isIdentical(Boolean) isIdentical(Brick)
isIdentical(Character) isIdentical(Complex) isIdentical(Date) isIdentical(Dictionary)
isIdentical(Directory) isIdentical(Error) isIdentical(FltVector) isIdentical(Function)
isIdentical(IntVector) isIdentical(List) isIdentical(Matrix) isIdentical(NumMatrix)
isIdentical(NumVector) isIdentical(Number) isIdentical(ObjVector) isIdentical(ObjectRepository)
isIdentical(Pair) isIdentical(PcodeVector) isIdentical(ShortVector) isIdentical(Structure)
isIdentical(Vector) isIdentical(Void) isType(BitVector) isType(Boolean)
isType(Brick) isType(Character) isType(Complex) isType(Date)
isType(Dictionary) isType(Directory) isType(FltVector) isType(Function)
isType(IntVector) isType(Matrix) isType(NumMatrix) isType(NumVector)
isType(Number) isType(ObjVector) isType(ObjectRepository) isType(Pair)
isType(ShortVector) isType(String) isType(Structure) isType(Symbol)
isType(Vector) isType(Void) lambda(Lambda) lisp(Lambda)
lisp(List) macroReplace(String) makeLambda(Lambda) myself(Lambda)
new(BitVector) new(Brick) new(ByteVector) new(CpxVector)
new(Dictionary) new(Directory) new(FltVector) new(IntVector)
new(Lambda) new(Matrix) new(NumMatrix) new(NumVector)
new(ObjVector) new(ObjectRepository) new(PcodeVector) new(ShortVector)
new(String) new(Structure) new(Symbol) new(Vector)
onError(Error) onError(Lambda) refLibrarian(ObjectRepository) ref(BitVector)
ref(Boolean) ref(Brick) ref(Character) ref(Complex)
ref(Date) ref(Dictionary) ref(Directory) ref(FltVector)
ref(Function) ref(IntVector) ref(Lambda) ref(List)
ref(Matrix) ref(NumMatrix) ref(NumVector) ref(Number)
ref(ObjVector) ref(ObjectRepository) ref(PcodeVector) ref(ShortVector)
ref(String) ref(Structure) ref(Symbol) ref(Vector)
ref(Void) saveObject(ByteVector) saveObject(Integer) send(BitVector)
send(Boolean) send(Brick) send(Character) send(CpxVector)
send(Date) send(Dictionary) send(Directory) send(FltVector)
send(Function) send(IntVector) send(Lambda) send(List)
send(Matrix) send(NumMatrix) send(NumVector) send(Number)
send(ObjectRepository) send(Pair) send(ShortVector) send(String)
send(Structure) send(Symbol) send(Vector) send(Void)
setq(BitVector) setq(Boolean) setq(Brick) setq(Character)
setq(Date) setq(Dictionary) setq(Directory) setq(FltVector)
setq(IntVector) setq(Lambda) setq(List) setq(Matrix)
setq(NumVector) setq(Number) setq(ObjVector) setq(ObjectRepository)
setq(PcodeVector) setq(ShortVector) setq(String) setq(Structure)
setq(Symbol) setq(Vector) setq(Void) sizeof(BitVector)
sizeof(Boolean) sizeof(Brick) sizeof(ByteVector) sizeof(Character)
sizeof(Complex) sizeof(Date) sizeof(Dictionary) sizeof(Directory)
sizeof(FltVector) sizeof(Function) sizeof(IntVector) sizeof(List)
sizeof(Matrix) sizeof(NumMatrix) sizeof(NumVector) sizeof(Number)
sizeof(ObjVector) sizeof(ObjectRepository) sizeof(Pair) sizeof(PcodeVector)
sizeof(ShortVector) sizeof(String) sizeof(Structure) sizeof(Symbol)
sizeof(Vector) sizeof(Void) type(BitVector) type(Boolean)
type(Brick) type(ByteVector) type(Character) type(Complex)
type(Date) type(Dictionary) type(Directory) type(FltVector)
type(Function) type(IntVector) type(Lambda) type(Matrix)
type(NumMatrix) type(NumVector) type(Number) type(ObjVector)
type(ObjectRepository) type(Pair) type(PcodeVector) type(ShortVector)
type(String) type(Structure) type(Symbol) type(Vector)
type(Void) writeln(ByteVector) writeln(String) writeln(Text)

How do I contact the AIS team?

You can always talk with the AIS at aiserver.sourceforge.net.