Documentation
¶
Overview ¶
Package values implements all Scheme runtime value types.
The package provides the complete R7RS value system:
Numeric Tower (R7RS 6.2.1) ¶
- Integer, BigInteger: exact integers (int64 and arbitrary precision)
- Rational: exact rationals via math/big.Rat
- Float, BigFloat: inexact reals (float64 and arbitrary precision)
- Complex, BigComplex: complex numbers
All numeric types implement the Number interface for uniform arithmetic.
Core Types ¶
- Boolean: #t and #f singletons (TrueValue, FalseValue)
- Character: Unicode rune wrapper
- String: interned strings (<=64 chars)
- Symbol: interned identifiers for eq? identity
- Pair: cons cells as [2]Value arrays
- Vector: growable value arrays
- ByteVector: byte arrays for binary data
- Hashtable: bucket-chaining hash maps with Hashable keys
I/O Ports (R7RS 6.13) ¶
Port types implement Port, InputPort, OutputPort, and related interfaces:
- CharacterInputPort, CharacterOutputPort: textual I/O
- BinaryInputPort, BinaryOutputPort: binary I/O
- StringInputPort, StringOutputPort: in-memory string ports
- ByteVectorInputPort, ByteVectorOutputPort: in-memory byte ports
Concurrency (SRFI-18+) ¶
- Thread, Mutex, ConditionVariable: SRFI-18 threading
- Channel, WaitGroup, RWMutex, Once: Go concurrency wrappers
- AtomicBox, AtomicInt64: atomic operations
Singletons ¶
Use Void for the absence of a value and EOFObject for end-of-file. EmptyList is the empty list sentinel.
Package values provides Scheme runtime value types.
Index ¶
- Constants
- Variables
- func DisplayValueToString(v Value) string
- func EqualTo(a, b Value) bool
- func ExactInteger(v Value) (int64, bool)
- func IsEmptyList(v Value) bool
- func IsList(v Value) bool
- func IsVoid(v Value) bool
- func ResetSymbolInterns()
- func SymbolInternCount() int
- func WriteSharedValueToString(v Value) string
- func WriteValueToString(v Value) string
- type AbandonedMutexException
- type ArrayList
- func (p *ArrayList) Append(vs Value) Value
- func (p *ArrayList) AppendList(o Value) *ArrayList
- func (p *ArrayList) AsList() Value
- func (p *ArrayList) AsVector() *Vector
- func (p *ArrayList) Car() Value
- func (p *ArrayList) Cdr() Value
- func (p *ArrayList) Copy() *ArrayList
- func (p *ArrayList) Datum() []Value
- func (p *ArrayList) EqualTo(o Value) bool
- func (p *ArrayList) ForEach(ctx context.Context, fn ForEachFunc) (Value, error)
- func (p *ArrayList) IsEmptyList() bool
- func (p *ArrayList) IsList() bool
- func (p *ArrayList) IsVoid() bool
- func (p *ArrayList) Length() int
- func (p *ArrayList) SchemeString() string
- type AtomicBox
- func (p *AtomicBox) CompareAndSwap(ol, nw Value) bool
- func (p *AtomicBox) EqualTo(v Value) bool
- func (p *AtomicBox) ID() uint64
- func (p *AtomicBox) IsVoid() bool
- func (p *AtomicBox) Load() Value
- func (p *AtomicBox) SchemeString() string
- func (p *AtomicBox) Store(v Value)
- func (p *AtomicBox) Swap(v Value) Value
- type AtomicInt64
- func (p *AtomicInt64) Add(delta int64) int64
- func (p *AtomicInt64) CompareAndSwap(ol, nw int64) bool
- func (p *AtomicInt64) EqualTo(v Value) bool
- func (p *AtomicInt64) ID() uint64
- func (p *AtomicInt64) IsVoid() bool
- func (p *AtomicInt64) Load() int64
- func (p *AtomicInt64) SchemeString() string
- func (p *AtomicInt64) Store(v int64)
- func (p *AtomicInt64) Swap(nw int64) int64
- type BigComplex
- func (p *BigComplex) Add(o Number) Number
- func (p *BigComplex) Compare(o Number) int
- func (p *BigComplex) Conjugate() *BigComplex
- func (p *BigComplex) Divide(o Number) Number
- func (p *BigComplex) EqualTo(o Value) bool
- func (p *BigComplex) Imag() Number
- func (p *BigComplex) ImagAsBigFloat() *BigFloat
- func (p *BigComplex) IsExact() bool
- func (p *BigComplex) IsReal() bool
- func (p *BigComplex) IsVoid() bool
- func (p *BigComplex) IsZero() bool
- func (p *BigComplex) LessThan(o Number) bool
- func (p *BigComplex) Magnitude() *BigFloat
- func (p *BigComplex) Multiply(o Number) Number
- func (p *BigComplex) Negate() Number
- func (p *BigComplex) Phase() *BigFloat
- func (p *BigComplex) Real() Number
- func (p *BigComplex) RealAsBigFloat() *BigFloat
- func (p *BigComplex) SchemeString() string
- func (p *BigComplex) Subtract(o Number) Number
- func (p *BigComplex) ToExact() Number
- func (p *BigComplex) ToInexact() Number
- type BigFloat
- func (p *BigFloat) Abs() *BigFloat
- func (p *BigFloat) Add(o Number) Number
- func (p *BigFloat) BigFloatValue() *big.Float
- func (p *BigFloat) Compare(o Number) int
- func (p *BigFloat) Divide(o Number) Number
- func (p *BigFloat) EqualTo(o Value) bool
- func (p *BigFloat) Float64() float64
- func (p *BigFloat) IsExact() bool
- func (p *BigFloat) IsNegative() bool
- func (p *BigFloat) IsPositive() bool
- func (p *BigFloat) IsVoid() bool
- func (p *BigFloat) IsZero() bool
- func (p *BigFloat) LessThan(o Number) bool
- func (p *BigFloat) Multiply(o Number) Number
- func (p *BigFloat) Negate() Number
- func (p *BigFloat) SchemeString() string
- func (p *BigFloat) Subtract(o Number) Number
- func (p *BigFloat) ToExact() Number
- func (p *BigFloat) ToInexact() Number
- type BigInteger
- func (p *BigInteger) Abs() *BigInteger
- func (p *BigInteger) Add(o Number) Number
- func (p *BigInteger) BigInt() *big.Int
- func (p *BigInteger) Compare(o Number) int
- func (p *BigInteger) Divide(o Number) Number
- func (p *BigInteger) EqualTo(o Value) bool
- func (p *BigInteger) HashCode() uint64
- func (p *BigInteger) Int64() int64
- func (p *BigInteger) IsExact() bool
- func (p *BigInteger) IsNegative() bool
- func (p *BigInteger) IsPositive() bool
- func (p *BigInteger) IsVoid() bool
- func (p *BigInteger) IsZero() bool
- func (p *BigInteger) LessThan(o Number) bool
- func (p *BigInteger) Multiply(o Number) Number
- func (p *BigInteger) Negate() Number
- func (p *BigInteger) SchemeString() string
- func (p *BigInteger) Subtract(o Number) Number
- func (p *BigInteger) ToExact() Number
- func (p *BigInteger) ToInexact() Number
- type BinaryInputPort
- func (p *BinaryInputPort) Close() error
- func (p *BinaryInputPort) Datum() io.Reader
- func (p *BinaryInputPort) EqualTo(v Value) bool
- func (p *BinaryInputPort) IsClosed() bool
- func (p *BinaryInputPort) IsVoid() bool
- func (p *BinaryInputPort) Read(bs []byte) (n int, err error)
- func (p *BinaryInputPort) ReadByte() (byte, error)
- func (p *BinaryInputPort) SchemeString() string
- func (p *BinaryInputPort) UnreadByte() error
- type BinaryOutputPort
- func (p *BinaryOutputPort) Close() error
- func (p *BinaryOutputPort) Datum() io.Writer
- func (p *BinaryOutputPort) EqualTo(v Value) bool
- func (p *BinaryOutputPort) Flush() error
- func (p *BinaryOutputPort) IsClosed() bool
- func (p *BinaryOutputPort) IsVoid() bool
- func (p *BinaryOutputPort) SchemeString() string
- func (p *BinaryOutputPort) Write(bs []byte) (int, error)
- func (p *BinaryOutputPort) WriteByte(b byte) error
- type BinaryReader
- type BinaryWriter
- type Boolean
- type Box
- type Byte
- type ByteVector
- func (p *ByteVector) AsBytes(is ...int) []byte
- func (p *ByteVector) AsList() Tuple
- func (p *ByteVector) Datum() []*Byte
- func (p *ByteVector) EqualTo(v Value) bool
- func (p *ByteVector) Get(i int) Value
- func (p *ByteVector) IsVoid() bool
- func (p *ByteVector) Length() int
- func (p *ByteVector) SchemeString() string
- func (p *ByteVector) Set(i int, value Value)
- type ByteVectorBufferdOutputPort
- func (p *ByteVectorBufferdOutputPort) Close() error
- func (p *ByteVectorBufferdOutputPort) Datum() *bytes.Buffer
- func (p *ByteVectorBufferdOutputPort) EqualTo(v Value) bool
- func (p *ByteVectorBufferdOutputPort) Flush() error
- func (p *ByteVectorBufferdOutputPort) IsClosed() bool
- func (p *ByteVectorBufferdOutputPort) IsVoid() bool
- func (p *ByteVectorBufferdOutputPort) ReadByteVector() (*ByteVector, error)
- func (p *ByteVectorBufferdOutputPort) SchemeString() string
- func (p *ByteVectorBufferdOutputPort) Write(bs []byte) (n int, err error)
- func (p *ByteVectorBufferdOutputPort) WriteByte(b byte) error
- type ByteVectorExtractor
- type ByteVectorInputOutputPort
- func (p *ByteVectorInputOutputPort) Close() error
- func (p *ByteVectorInputOutputPort) Datum() *bytes.Buffer
- func (p *ByteVectorInputOutputPort) EqualTo(v Value) bool
- func (p *ByteVectorInputOutputPort) Flush() error
- func (p *ByteVectorInputOutputPort) IsClosed() bool
- func (p *ByteVectorInputOutputPort) IsVoid() bool
- func (p *ByteVectorInputOutputPort) Read(bs []byte) (int, error)
- func (p *ByteVectorInputOutputPort) ReadByte() (byte, error)
- func (p *ByteVectorInputOutputPort) ReadByteVector() (*ByteVector, error)
- func (p *ByteVectorInputOutputPort) SchemeString() string
- func (p *ByteVectorInputOutputPort) UnreadByte() error
- func (p *ByteVectorInputOutputPort) Write(bs []byte) (n int, err error)
- func (p *ByteVectorInputOutputPort) WriteByte(b byte) error
- type ByteVectorInputPort
- func (p *ByteVectorInputPort) Close() error
- func (p *ByteVectorInputPort) Datum() *bufio.Reader
- func (p *ByteVectorInputPort) EqualTo(v Value) bool
- func (p *ByteVectorInputPort) IsClosed() bool
- func (p *ByteVectorInputPort) IsVoid() bool
- func (p *ByteVectorInputPort) Read(bs []byte) (int, error)
- func (p *ByteVectorInputPort) ReadByte() (byte, error)
- func (p *ByteVectorInputPort) SchemeString() string
- func (p *ByteVectorInputPort) UnreadByte() error
- type ByteVectorOutputPort
- func (p *ByteVectorOutputPort) Close() error
- func (p *ByteVectorOutputPort) Datum() *bufio.Writer
- func (p *ByteVectorOutputPort) EqualTo(v Value) bool
- func (p *ByteVectorOutputPort) Flush() error
- func (p *ByteVectorOutputPort) IsClosed() bool
- func (p *ByteVectorOutputPort) IsVoid() bool
- func (p *ByteVectorOutputPort) SchemeString() string
- func (p *ByteVectorOutputPort) Write(bs []byte) (n int, err error)
- func (p *ByteVectorOutputPort) WriteByte(b byte) error
- type Channel
- func (p *Channel) BufferSize() int
- func (p *Channel) Cap() int
- func (p *Channel) Chan() chan Value
- func (p *Channel) Close() error
- func (p *Channel) EqualTo(v Value) bool
- func (p *Channel) ID() uint64
- func (p *Channel) IsClosed() bool
- func (p *Channel) IsVoid() bool
- func (p *Channel) Len() int
- func (p *Channel) Receive() (Value, bool)
- func (p *Channel) SchemeString() string
- func (p *Channel) Send(v Value) error
- func (p *Channel) TryReceive() (Value, bool, bool)
- func (p *Channel) TrySend(v Value) (bool, error)
- type Character
- type CharacterInputPort
- func (p *CharacterInputPort) Close() error
- func (p *CharacterInputPort) Datum() io.RuneReader
- func (p *CharacterInputPort) EqualTo(v Value) bool
- func (p *CharacterInputPort) IsClosed() bool
- func (p *CharacterInputPort) IsVoid() bool
- func (p *CharacterInputPort) Read(bs []byte) (int, error)
- func (p *CharacterInputPort) ReadRune() (rune, int, error)
- func (p *CharacterInputPort) SchemeString() string
- func (p *CharacterInputPort) UnreadRune() error
- type CharacterOutputPort
- func (p *CharacterOutputPort) Close() error
- func (p *CharacterOutputPort) Datum() io.Writer
- func (p *CharacterOutputPort) EqualTo(v Value) bool
- func (p *CharacterOutputPort) Flush() error
- func (p *CharacterOutputPort) IsClosed() bool
- func (p *CharacterOutputPort) IsVoid() bool
- func (p *CharacterOutputPort) SchemeString() string
- func (p *CharacterOutputPort) Write(bs []byte) (int, error)
- func (p *CharacterOutputPort) WriteRune(rn rune) (int, error)
- func (p *CharacterOutputPort) WriteString(s string) (int, error)
- type Collection
- type Comparable
- type CompileTimeValue
- type Complex
- func (p *Complex) Add(o Number) Number
- func (p *Complex) Compare(o Number) int
- func (p *Complex) Datum() complex128
- func (p *Complex) Divide(o Number) Number
- func (p *Complex) EqualTo(v Value) bool
- func (p *Complex) Imag() float64
- func (p *Complex) IsExact() bool
- func (p *Complex) IsReal() bool
- func (p *Complex) IsVoid() bool
- func (p *Complex) IsZero() bool
- func (p *Complex) LessThan(o Number) bool
- func (p *Complex) Magnitude() float64
- func (p *Complex) Multiply(o Number) Number
- func (p *Complex) Negate() Number
- func (p *Complex) Phase() float64
- func (p *Complex) Real() float64
- func (p *Complex) SchemeString() string
- func (p *Complex) Subtract(o Number) Number
- type ConditionVariable
- func (p *ConditionVariable) Broadcast()
- func (p *ConditionVariable) EqualTo(v Value) bool
- func (p *ConditionVariable) ID() uint64
- func (p *ConditionVariable) IsVoid() bool
- func (p *ConditionVariable) Name() string
- func (p *ConditionVariable) SchemeString() string
- func (p *ConditionVariable) SetSpecific(v Value)
- func (p *ConditionVariable) Signal()
- func (p *ConditionVariable) Specific() Value
- func (p *ConditionVariable) Wait(_ *Mutex, timeout *time.Duration) bool
- func (p *ConditionVariable) WaiterCount() int
- type Exactness
- type Float
- func (p *Float) Abs() *Float
- func (p *Float) Add(o Number) Number
- func (p *Float) Compare(o Number) int
- func (p *Float) Datum() float64
- func (p *Float) Divide(o Number) Number
- func (p *Float) EqualTo(v Value) bool
- func (p *Float) HashCode() uint64
- func (p *Float) IsExact() bool
- func (p *Float) IsVoid() bool
- func (p *Float) IsZero() bool
- func (p *Float) LessThan(o Number) bool
- func (p *Float) Multiply(o Number) Number
- func (p *Float) Negate() Number
- func (p *Float) SchemeString() string
- func (p *Float) String() string
- func (p *Float) Subtract(o Number) Number
- type ForEachFunc
- type ForeignError
- type ForeignFileError
- type ForeignReadError
- type Hashable
- type Hashtable
- func (p *Hashtable) Clear()
- func (p *Hashtable) Copy() *Hashtable
- func (p *Hashtable) Delete(key Value) error
- func (p *Hashtable) EqualTo(o Value) bool
- func (p *Hashtable) Get(key Value) (Value, bool, error)
- func (p *Hashtable) HasKey(key Value) (bool, error)
- func (p *Hashtable) IsVoid() bool
- func (p *Hashtable) Keys() *Pair
- func (p *Hashtable) SchemeString() string
- func (p *Hashtable) Set(key Value, val Value) error
- func (p *Hashtable) Size() int
- func (p *Hashtable) Values() *Pair
- type Indexable
- type InputOutputPort
- type InputPort
- type Integer
- func (p *Integer) Abs() Number
- func (p *Integer) Add(o Number) Number
- func (p *Integer) Compare(o Number) int
- func (p *Integer) Datum() int64
- func (p *Integer) Divide(o Number) Number
- func (p *Integer) EqualTo(v Value) bool
- func (p *Integer) HashCode() uint64
- func (p *Integer) IsExact() bool
- func (p *Integer) IsVoid() bool
- func (p *Integer) IsZero() bool
- func (p *Integer) LessThan(o Number) bool
- func (p *Integer) Multiply(o Number) Number
- func (p *Integer) Negate() Number
- func (p *Integer) SchemeString() string
- func (p *Integer) Subtract(o Number) Number
- type JoinTimeoutException
- type KeyValue
- type Mutex
- func (p *Mutex) EqualTo(v Value) bool
- func (p *Mutex) ID() uint64
- func (p *Mutex) IsVoid() bool
- func (p *Mutex) Lock(timeout *time.Duration, owner *Thread) (bool, error)
- func (p *Mutex) MarkAbandoned()
- func (p *Mutex) Name() string
- func (p *Mutex) Owner() *Thread
- func (p *Mutex) SchemeString() string
- func (p *Mutex) SetSpecific(v Value)
- func (p *Mutex) Specific() Value
- func (p *Mutex) State() MutexState
- func (p *Mutex) StateValue() Value
- func (p *Mutex) Unlock(cv *ConditionVariable, timeout *time.Duration) bool
- type MutexState
- type NativeError
- func NewErrorObject(message string, irritants ...Value) *NativeError
- func NewErrorObjectWithCause(message string, cause error, irritants ...Value) *NativeError
- func NewErrorObjectWithCauseAndKind(message string, cause error, kind NativeErrorKind, irritants ...Value) *NativeError
- func NewFileError(message string, irritants ...Value) *NativeError
- func NewNativeError(msg string) *NativeError
- func NewReadError(message string, irritants ...Value) *NativeError
- func (p *NativeError) Datum() error
- func (p *NativeError) EqualTo(v Value) bool
- func (p *NativeError) Error() string
- func (p *NativeError) Irritants() Value
- func (p *NativeError) IsFileError() bool
- func (p *NativeError) IsReadError() bool
- func (p *NativeError) IsVoid() bool
- func (p *NativeError) Kind() NativeErrorKind
- func (p *NativeError) Message() *String
- func (p *NativeError) SchemeString() string
- func (p *NativeError) Unwrap() error
- type NativeErrorKind
- type Number
- type Once
- type OutputPort
- type Pair
- func (p *Pair) Append(vs Value) Value
- func (p *Pair) AsVector() *Vector
- func (p *Pair) Car() Value
- func (p *Pair) Cdr() Value
- func (p *Pair) Datum() [2]Value
- func (p *Pair) EqualTo(o Value) bool
- func (p *Pair) ForEach(ctx context.Context, fn ForEachFunc) (Value, error)
- func (p *Pair) IsEmptyList() bool
- func (p *Pair) IsList() bool
- func (p *Pair) IsVoid() bool
- func (p *Pair) Length() int
- func (p *Pair) SchemeString() string
- func (p *Pair) SetCar(v Value)
- func (p *Pair) SetCdr(v Value)
- func (p *Pair) String() string
- type Port
- type Promise
- type RWMutex
- func (p *RWMutex) EqualTo(v Value) bool
- func (p *RWMutex) ID() uint64
- func (p *RWMutex) IsVoid() bool
- func (p *RWMutex) Lock()
- func (p *RWMutex) Name() string
- func (p *RWMutex) RLock()
- func (p *RWMutex) RUnlock()
- func (p *RWMutex) SchemeString() string
- func (p *RWMutex) TryLock() bool
- func (p *RWMutex) TryRLock() bool
- func (p *RWMutex) Unlock()
- type Rational
- func (p *Rational) Add(o Number) Number
- func (p *Rational) Compare(o Number) int
- func (p *Rational) Denom() *big.Int
- func (p *Rational) DenomInt64() int64
- func (p *Rational) Divide(o Number) Number
- func (p *Rational) EqualTo(v Value) bool
- func (p *Rational) Float64() float64
- func (p *Rational) HashCode() uint64
- func (p *Rational) IsExact() bool
- func (p *Rational) IsInteger() bool
- func (p *Rational) IsVoid() bool
- func (p *Rational) IsZero() bool
- func (p *Rational) LessThan(o Number) bool
- func (p *Rational) Multiply(o Number) Number
- func (p *Rational) Negate() Number
- func (p *Rational) Num() *big.Int
- func (p *Rational) NumInt64() int64
- func (p *Rational) Rat() *big.Rat
- func (p *Rational) SchemeString() string
- func (p *Rational) Subtract(o Number) Number
- type Record
- func (p *Record) EqualTo(v Value) bool
- func (p *Record) Field(index int) Value
- func (p *Record) FieldByName(name *Symbol) Value
- func (p *Record) IsVoid() bool
- func (p *Record) RecordType() *RecordType
- func (p *Record) SchemeString() string
- func (p *Record) SetField(index int, value Value)
- func (p *Record) SetFieldByName(name *Symbol, value Value)
- type RecordType
- type SchemeWriter
- type SelectCase
- type Set
- type SourceLocation
- type StaticError
- type String
- func (p *String) Datum() string
- func (p *String) EqualTo(v Value) bool
- func (p *String) Fill(char rune, start, end int)
- func (p *String) HashCode() uint64
- func (p *String) IsVoid() bool
- func (p *String) Len() int
- func (p *String) Runes() []rune
- func (p *String) SchemeString() string
- func (p *String) SetChar(k int, char rune)
- func (p *String) SetValue(s string)
- func (p *String) String() string
- type StringInputPort
- func (p *StringInputPort) Close() error
- func (p *StringInputPort) Datum() *bytes.Buffer
- func (p *StringInputPort) EqualTo(v Value) bool
- func (p *StringInputPort) Flush() error
- func (p *StringInputPort) IsClosed() bool
- func (p *StringInputPort) IsVoid() bool
- func (p *StringInputPort) Read(bs []byte) (n int, err error)
- func (p *StringInputPort) ReadRune() (r rune, size int, err error)
- func (p *StringInputPort) SchemeString() string
- func (p *StringInputPort) String() string
- func (p *StringInputPort) UnreadRune() error
- type StringOutputPort
- func (p *StringOutputPort) Close() error
- func (p *StringOutputPort) Datum() *bytes.Buffer
- func (p *StringOutputPort) EqualTo(v Value) bool
- func (p *StringOutputPort) Flush() error
- func (p *StringOutputPort) IsClosed() bool
- func (p *StringOutputPort) IsVoid() bool
- func (p *StringOutputPort) SchemeString() string
- func (p *StringOutputPort) String() string
- func (p *StringOutputPort) Write(bs []byte) (n int, err error)
- func (p *StringOutputPort) WriteRune(rn rune) (int, error)
- func (p *StringOutputPort) WriteString(s string) (n int, err error)
- type Symbol
- type TerminatedThreadException
- type TextualReader
- type TextualWriter
- type Thread
- func (p *Thread) Done() <-chan struct{}
- func (p *Thread) EqualTo(v Value) bool
- func (p *Thread) ID() uint64
- func (p *Thread) IsVoid() bool
- func (p *Thread) Join(timeout *time.Duration) (Value, error)
- func (p *Thread) Name() string
- func (p *Thread) SchemeString() string
- func (p *Thread) SetSpecific(v Value)
- func (p *Thread) Sleep(d time.Duration)
- func (p *Thread) Specific() Value
- func (p *Thread) Start() error
- func (p *Thread) State() ThreadState
- func (p *Thread) StateSymbol() *Symbol
- func (p *Thread) Terminate()
- func (p *Thread) Yield()
- type ThreadState
- type Time
- func (p *Time) Add(d time.Duration) *Time
- func (p *Time) After(other *Time) bool
- func (p *Time) Before(other *Time) bool
- func (p *Time) DurationFromNow() time.Duration
- func (p *Time) EqualTo(v Value) bool
- func (p *Time) GoTime() time.Time
- func (p *Time) IsVoid() bool
- func (p *Time) SchemeString() string
- func (p *Time) Seconds() float64
- func (p *Time) Sub(other *Time) time.Duration
- type Tuple
- type UncaughtThreadException
- type Value
- type Vector
- type WaitGroup
- type Wrapped
- type WriteMode
Constants ¶
const ( PrefixCharacter = `#\` PrefixSyntax = `#'` PrefixDirective = `#!` PrefixBox = `#&` PrefixPrimitive = `#%` PrefixBlockComment = `#|` PrefixLineComment = `;` SpecialEOF = PrefixDirective + `eof` SpecialVoid = PrefixDirective + `void` )
Prefix constants for Scheme value representations.
const DefaultBigFloatPrecision = 256
DefaultBigFloatPrecision is the default precision for BigFloat values.
Variables ¶
var ( // FalseValue is the singleton false boolean. FalseValue = NewBoolean(false) // TrueValue is the singleton true boolean. TrueValue = NewBoolean(true) )
var ( ErrNotABoolean = NewStaticError("not a boolean") ErrNotAnInputPort = NewStaticError("not an input port") ErrNotAnOutputPort = NewStaticError("not an output port") ErrNotABox = NewStaticError("not a box") ErrNotAByte = NewStaticError("not a byte") ErrNotAByteInputPort = NewStaticError("not a byte input port") ErrNotAByteOutputPort = NewStaticError("not a byte output port") ErrNotAnEnvironmentFrame = NewStaticError("not an environment frame") ErrNotAClosureEnvironmentFrame = NewStaticError("not a closure environment frame") ErrNotAContinuation = NewStaticError("not a continuation") ErrNotAFunctionTemplate = NewStaticError("not a function template") ErrNotAModule = NewStaticError("not a module") ErrStopIteration = NewStaticError("stop iteration") ErrNotAPrimitive = NewStaticError("not a primitive") ErrNoSuchBinding = NewStaticError("no such binding") ErrNotAGlobalIndex = NewStaticError("not a global index") ErrNotANumber = NewStaticError("not a number") ErrCannotCompare = NewStaticError("cannot compare values") ErrNotAFixnum = NewStaticError("not a fixnum") ErrNotARational = NewStaticError("not a rational number") ErrNotAReal = NewStaticError("not a real number") ErrNotAComplex = NewStaticError("not a complex number") ErrNotAFloatingPoint = NewStaticError("not a floating-point number") ErrNotACexactInteger = NewStaticError("not a C-exact integer") ErrDivisionByZero = NewStaticError("division by zero") ErrNotAList = NewStaticError("not a list") ErrNotACloseParen = NewStaticError("not a close parenthesis") ErrWrongNumberOfArguments = NewStaticError("wrong number of arguments") ErrNotAMachineContinuation = NewStaticError("not a machine continuation") ErrNotAPair = NewStaticError("not a pair") ErrNotACons = NewStaticError("not a cons") ErrNotANativeTemplate = NewStaticError("not a native template") ErrNotACharacter = NewStaticError("not a character") ErrNotACharacterInputPort = NewStaticError("not a character input port") ErrNotACharacterOutputPort = NewStaticError("not a character output port") ErrStackUnderflow = NewStaticError("stack underflow") ErrNotASyntaxValue = NewStaticError("not a syntax value") ErrNotASyntaxPair = NewStaticError("not a syntax pair") ErrNotASyntaxSymbol = NewStaticError("not a syntax symbol") ErrNotASyntaxList = NewStaticError("not a syntax list") ErrNotASyntaxObject = NewStaticError("not a syntax object") ErrNotASymbol = NewStaticError("not a symbol") ErrInvalidSyntax = NewStaticError("invalid syntax") ErrInvalidArgument = NewStaticError("invalid argument") ErrDuplicateBinding = NewStaticError("duplicate binding") ErrNotAClosure = NewStaticError("not a closure") ErrUnknownCharacterMnemonic = NewStaticError("unknown character mnemonic") ErrNotAnInteger = NewStaticError("not an integer") ErrNotALocalEnvironmentFrame = NewStaticError("not a local environment frame") ErrNotAMachineTemplate = NewStaticError("not a machine template") ErrUnexpectedNil = NewStaticError("unexpected nil value") ErrUnexpectedTransformer = NewStaticError("unexpected transformer") ErrNotAString = NewStaticError("not a string") ErrNotAVector = NewStaticError("not a vector") ErrNotAByteVector = NewStaticError("not a bytevector") ErrNotAProcedure = NewStaticError("not a procedure") ErrNotAStringOutputPort = NewStaticError("not a string output port") ErrNotABytevectorOutputPort = NewStaticError("not a bytevector output port") ErrNotANativeError = NewStaticError("not an error object") ErrNotARecord = NewStaticError("not a record") ErrNotARecordType = NewStaticError("not a record type") // Threading errors ErrNotAThread = NewStaticError("not a thread") ErrNotAMutex = NewStaticError("not a mutex") ErrNotAConditionVariable = NewStaticError("not a condition variable") ErrNotATime = NewStaticError("not a time") ErrNotAChannel = NewStaticError("not a channel") ErrNotAWaitGroup = NewStaticError("not a wait-group") ErrNotARWMutex = NewStaticError("not a rw-mutex") ErrNotAOnce = NewStaticError("not a once") ErrNotAnAtomic = NewStaticError("not an atomic") ErrPortClosed = NewStaticError("port is closed") ErrNotAHashtable = NewStaticError("not a hashtable") )
Standard error values for type checking and runtime errors.
var ( // ErrJoinTimeout is returned when thread-join! times out ErrJoinTimeout = NewStaticError("thread-join!: timeout") // ErrThreadAlreadyStarted is returned when starting an already-started thread ErrThreadAlreadyStarted = NewStaticError("thread-start!: thread already started") // ErrCrossThreadContinuation is returned when invoking continuation from different thread ErrCrossThreadContinuation = NewStaticError("cannot invoke continuation from different thread") )
var ( // FIXME: consider using types for EmptyList and Void ArrayListEmptyList = NewArrayList(nil, nil) )
var ( // EmptyList is the singleton empty list (nil, nil). EmptyList = NewCons(nil, nil) )
var ( // ErrChannelClosed is returned when operating on a closed channel ErrChannelClosed = NewStaticError("channel is closed") )
var SchemeEquals qt.Checker = &schemeEqualsChecker{}
SchemeEquals is a quicktest checker for Scheme value equality.
Functions ¶
func DisplayValueToString ¶
DisplayValueToString writes a Scheme value to a string for display with cycle detection. Unlike WriteValueToString, strings are printed without quotes and characters without #\.
func EqualTo ¶
EqualTo compares two values for structural equality. Handles nil and void values specially: nil equals nil, void equals void. For compound types (Pair, Vector, ArrayList), uses optimistic bisimilarity with a visited set to terminate on circular structures per R7RS §6.1. This is the same technique used by Chez Scheme and Racket: when a (pointer-a, pointer-b) pair is re-encountered during recursion, return true.
func ExactInteger ¶
ExactInteger extracts an exact integer from a Scheme value. Returns the int64 value and true if the value is an exact integer that fits in int64. Returns 0 and false otherwise.
Accepts:
- *Integer: direct int64 value
- *BigInteger: if it fits in int64
- *Rational: if denominator is 1 and numerator fits in int64
R7RS defines exact integers to include rationals like 2/1 that are mathematically integers. Call sites should check for non-negativity if required (e.g., for indexes).
func IsEmptyList ¶
IsEmptyList returns true if the value is the empty list. Returns false for nil values. For Tuple types, delegates to their IsEmptyList method.
func IsList ¶
IsList returns true if the value is a proper list. A proper list is either EmptyList or a chain of pairs ending with EmptyList. Returns false for nil, improper lists (dotted pairs), and non-list values.
func IsVoid ¶
IsVoid returns true if the value represents the absence of a value. A value is void if it is nil or its IsVoid() method returns true. Note: typed nil pointers (e.g., var p *Pair = nil) are handled by the type's IsVoid() method, which checks for nil receiver.
func ResetSymbolInterns ¶
func ResetSymbolInterns()
ResetSymbolInterns clears the global symbol intern table. This is intended for testing purposes only to ensure test isolation. Do not use in production code.
func SymbolInternCount ¶
func SymbolInternCount() int
SymbolInternCount returns the number of interned symbols. This is intended for testing and debugging purposes.
func WriteSharedValueToString ¶
WriteSharedValueToString writes a Scheme value to a string with shared structure detection. Uses WriteModeWriteShared: datum labels for all multiply-referenced objects. R7RS §6.13.3: write-shared outputs datum labels for all shared structure.
func WriteValueToString ¶
WriteValueToString writes a Scheme value to a string with cycle detection. Uses WriteModeWrite: datum labels only for circular references. R7RS §6.13.3: write outputs datum labels only for objects that are part of a cycle.
Types ¶
type AbandonedMutexException ¶
type AbandonedMutexException struct {
Mutex Value // *Mutex, but avoid circular import
}
AbandonedMutexException is raised when a mutex owner terminates
func (*AbandonedMutexException) Error ¶
func (p *AbandonedMutexException) Error() string
type ArrayList ¶
type ArrayList []Value
ArrayList represents a mutable list backed by a slice.
func NewArrayList ¶
NewArrayList creates a new ArrayList from the given values.
func (*ArrayList) AppendList ¶
AppendList appends another list to this ArrayList.
func (*ArrayList) IsEmptyList ¶
IsEmptyList returns true if this ArrayList represents an empty list.
func (*ArrayList) SchemeString ¶
SchemeString returns the Scheme representation of this ArrayList.
type AtomicBox ¶
type AtomicBox struct {
// contains filtered or unexported fields
}
AtomicBox provides atomic operations on a Value This uses atomic.Value from the standard library
func NewAtomicBox ¶
NewAtomicBox creates a new AtomicBox with the given initial value
func (*AtomicBox) CompareAndSwap ¶
CompareAndSwap atomically compares and swaps if current equals old Returns true if the swap was performed
func (*AtomicBox) SchemeString ¶
SchemeString returns the Scheme representation of the atomic.
type AtomicInt64 ¶
type AtomicInt64 struct {
// contains filtered or unexported fields
}
AtomicInt64 provides atomic operations on int64 values This is more efficient than AtomicBox for integer operations
func NewAtomicInt64 ¶
func NewAtomicInt64(initial int64) *AtomicInt64
NewAtomicInt64 creates a new AtomicInt64 with the given initial value
func (*AtomicInt64) Add ¶
func (p *AtomicInt64) Add(delta int64) int64
Add atomically adds delta and returns the new value
func (*AtomicInt64) CompareAndSwap ¶
func (p *AtomicInt64) CompareAndSwap(ol, nw int64) bool
CompareAndSwap atomically compares and swaps Returns true if the swap was performed
func (*AtomicInt64) EqualTo ¶
func (p *AtomicInt64) EqualTo(v Value) bool
EqualTo returns true if the atomics are the same object.
func (*AtomicInt64) ID ¶
func (p *AtomicInt64) ID() uint64
ID returns the AtomicInt64's unique identifier
func (*AtomicInt64) IsVoid ¶
func (p *AtomicInt64) IsVoid() bool
IsVoid returns true if the atomic int64 is nil.
func (*AtomicInt64) Load ¶
func (p *AtomicInt64) Load() int64
Load atomically loads and returns the value
func (*AtomicInt64) SchemeString ¶
func (p *AtomicInt64) SchemeString() string
SchemeString returns the Scheme representation of the atomic int64.
func (*AtomicInt64) Swap ¶
func (p *AtomicInt64) Swap(nw int64) int64
Swap atomically stores new and returns the old value
type BigComplex ¶
type BigComplex struct {
// contains filtered or unexported fields
}
BigComplex represents an arbitrary-precision complex number. The real and imaginary parts can be *BigInteger, *Rational (exact), or *BigFloat (inexact).
R7RS §6.2.1: Complex numbers are part of the numeric tower hierarchy:
number ⊃ complex ⊃ real ⊃ rational ⊃ integer
R7RS §6.2.2: BigComplex is exact if both parts are BigInteger or Rational, inexact if either part is BigFloat. Operations follow exactness contagion rules.
func NewBigComplex ¶
func NewBigComplex(rel, iam Number) *BigComplex
NewBigComplex creates a new BigComplex from real and imaginary parts. Parts must be *BigInteger, *Rational, or *BigFloat. Other types will panic.
func NewBigComplexFromBigFloats ¶
func NewBigComplexFromBigFloats(rel, iam *BigFloat) *BigComplex
NewBigComplexFromBigFloats creates an inexact BigComplex from BigFloat parts.
func NewBigComplexFromBigIntegers ¶
func NewBigComplexFromBigIntegers(rel, iam *BigInteger) *BigComplex
NewBigComplexFromBigIntegers creates an exact BigComplex from BigInteger parts.
func (*BigComplex) Add ¶
func (p *BigComplex) Add(o Number) Number
Add returns the sum of this BigComplex and another number.
R7RS §6.2.6: The + procedure returns the sum of its arguments. R7RS §6.2.2 Exactness: exact + exact = exact, exact + inexact = inexact.
func (*BigComplex) Compare ¶
func (p *BigComplex) Compare(o Number) int
Compare compares this BigComplex with another number by real parts.
R7RS §6.2.6: Numeric comparisons use mathematical value. For complex numbers, we compare real parts only (matching Complex behavior).
func (*BigComplex) Conjugate ¶
func (p *BigComplex) Conjugate() *BigComplex
Conjugate returns the complex conjugate (a-bi for a+bi).
func (*BigComplex) Divide ¶
func (p *BigComplex) Divide(o Number) Number
Divide returns the quotient of this BigComplex and another number. Complex division: (a+bi)/(c+di) = ((ac+bd) + (bc-ad)i) / (c²+d²)
R7RS §6.2.6: The / procedure returns the quotient of its arguments. R7RS §6.2.2 Exactness: exact / exact = exact, exact / inexact = inexact.
func (*BigComplex) EqualTo ¶
func (p *BigComplex) EqualTo(o Value) bool
EqualTo returns true if both complex numbers have equal real and imaginary parts.
R7RS §6.2.6: The = procedure compares numerical values for equality.
func (*BigComplex) Imag ¶
func (p *BigComplex) Imag() Number
Imag returns the imaginary part of the complex number.
func (*BigComplex) ImagAsBigFloat ¶
func (p *BigComplex) ImagAsBigFloat() *BigFloat
ImagAsBigFloat returns the imaginary part converted to BigFloat for calculations.
func (*BigComplex) IsExact ¶
func (p *BigComplex) IsExact() bool
IsExact returns true if both parts are exact (BigInteger or Rational).
R7RS §6.2.2: A complex number is exact if both real and imaginary parts are exact.
func (*BigComplex) IsReal ¶
func (p *BigComplex) IsReal() bool
IsReal returns true if the imaginary part is zero.
func (*BigComplex) IsVoid ¶
func (p *BigComplex) IsVoid() bool
IsVoid returns true if this BigComplex is nil.
func (*BigComplex) IsZero ¶
func (p *BigComplex) IsZero() bool
IsZero returns true if both real and imaginary parts are zero.
func (*BigComplex) LessThan ¶
func (p *BigComplex) LessThan(o Number) bool
LessThan compares the real parts of complex numbers. Following R7RS, < is not mathematically defined for complex numbers, but we follow the existing Complex.LessThan pattern of comparing real parts.
func (*BigComplex) Magnitude ¶
func (p *BigComplex) Magnitude() *BigFloat
Magnitude returns the absolute value (modulus) of the complex number. |a+bi| = sqrt(a² + b²)
func (*BigComplex) Multiply ¶
func (p *BigComplex) Multiply(o Number) Number
Multiply returns the product of this BigComplex and another number. Complex multiplication: (a+bi)(c+di) = (ac-bd) + (ad+bc)i
R7RS §6.2.6: The * procedure returns the product of its arguments. R7RS §6.2.2 Exactness: exact * exact = exact, exact * inexact = inexact.
func (*BigComplex) Negate ¶
func (p *BigComplex) Negate() Number
Negate returns the negation of this BigComplex.
func (*BigComplex) Phase ¶
func (p *BigComplex) Phase() *BigFloat
Phase returns the phase (argument) of the complex number in radians. Uses atan2(imag, real).
func (*BigComplex) Real ¶
func (p *BigComplex) Real() Number
Real returns the real part of the complex number.
func (*BigComplex) RealAsBigFloat ¶
func (p *BigComplex) RealAsBigFloat() *BigFloat
RealAsBigFloat returns the real part converted to BigFloat for calculations.
func (*BigComplex) SchemeString ¶
func (p *BigComplex) SchemeString() string
SchemeString returns the Scheme representation of this BigComplex.
func (*BigComplex) Subtract ¶
func (p *BigComplex) Subtract(o Number) Number
Subtract returns the difference of this BigComplex and another number.
R7RS §6.2.6: The - procedure returns the difference of its arguments. R7RS §6.2.2 Exactness: exact - exact = exact, exact - inexact = inexact.
func (*BigComplex) ToExact ¶
func (p *BigComplex) ToExact() Number
ToExact converts this BigComplex to an exact representation.
R7RS §6.2.6: exact returns an exact representation of its argument. If already exact, returns itself. Otherwise converts BigFloat parts to BigInteger by truncating (may lose precision).
func (*BigComplex) ToInexact ¶
func (p *BigComplex) ToInexact() Number
ToInexact converts this BigComplex to an inexact representation.
R7RS §6.2.6: inexact returns an inexact representation of its argument. Converts BigInteger parts to BigFloat.
type BigFloat ¶
type BigFloat struct {
// contains filtered or unexported fields
}
BigFloat represents an arbitrary-precision floating-point number. Created with the #m prefix in Scheme (e.g., #m3.14159265358979323846).
func NewBigFloat ¶
NewBigFloat creates a new BigFloat from a big.Float.
func NewBigFloatFromFloat64 ¶
NewBigFloatFromFloat64 creates a new BigFloat from a float64.
func NewBigFloatFromString ¶
NewBigFloatFromString creates a new BigFloat from a string. Returns nil if the string is not a valid number.
func (*BigFloat) BigFloatValue ¶
BigFloatValue returns the underlying big.Float value.
func (*BigFloat) IsNegative ¶
IsNegative returns true if this BigFloat is negative.
func (*BigFloat) IsPositive ¶
IsPositive returns true if this BigFloat is positive.
func (*BigFloat) SchemeString ¶
SchemeString returns the Scheme representation of this BigFloat.
type BigInteger ¶
type BigInteger struct {
// contains filtered or unexported fields
}
BigInteger represents an arbitrary-precision integer. Created with the #z prefix in Scheme (e.g., #z12345678901234567890).
R7RS §6.2.1: Integers are exact numbers in the numeric tower hierarchy:
number ⊃ complex ⊃ real ⊃ rational ⊃ integer
R7RS §6.2.2: BigInteger is always exact. Operations on exact numbers produce exact results when mathematically well-defined.
R7RS §6.2.3: Implementations may support arbitrarily large exact integers. BigInteger provides this capability using Go's math/big.Int.
func NewBigInteger ¶
func NewBigInteger(v *big.Int) *BigInteger
NewBigInteger creates a new BigInteger from a big.Int.
func NewBigIntegerFromInt64 ¶
func NewBigIntegerFromInt64(v int64) *BigInteger
NewBigIntegerFromInt64 creates a new BigInteger from an int64.
func NewBigIntegerFromString ¶
func NewBigIntegerFromString(s string, base int) *BigInteger
NewBigIntegerFromString creates a new BigInteger from a string. Returns nil if the string is not a valid integer.
func (*BigInteger) Abs ¶
func (p *BigInteger) Abs() *BigInteger
Abs returns the absolute value of this BigInteger.
func (*BigInteger) Add ¶
func (p *BigInteger) Add(o Number) Number
Add returns the sum of this BigInteger and another number.
R7RS §6.2.6: The + procedure returns the sum of its arguments. R7RS §6.2.2 Exactness: exact + exact = exact (BigInteger), exact + inexact = inexact (Float/Complex).
func (*BigInteger) BigInt ¶
func (p *BigInteger) BigInt() *big.Int
BigInt returns the underlying big.Int value.
func (*BigInteger) Compare ¶
func (p *BigInteger) Compare(o Number) int
Compare compares this BigInteger with another number.
R7RS §6.2.6: Numeric comparisons use mathematical value regardless of exactness. Returns -1, 0, or 1 for less than, equal, or greater than.
func (*BigInteger) Divide ¶
func (p *BigInteger) Divide(o Number) Number
Divide returns the quotient of this BigInteger and another number.
R7RS §6.2.6: The / procedure returns the quotient of its arguments. For exact arguments, / may return a non-integer (Rational) when the mathematical result is not an integer. Returns BigInteger only when the division is exact (remainder is zero).
R7RS §6.2.2 Exactness: exact / exact = exact (BigInteger or Rational), exact / inexact = inexact (Float or Complex).
func (*BigInteger) EqualTo ¶
func (p *BigInteger) EqualTo(o Value) bool
EqualTo returns true if this BigInteger equals another value.
R7RS §6.2.6: The = procedure compares numerical values for equality. BigInteger also compares equal to Integer when values match.
func (*BigInteger) HashCode ¶
func (p *BigInteger) HashCode() uint64
HashCode returns a hash of the big integer value. Uses the canonical string representation.
func (*BigInteger) Int64 ¶
func (p *BigInteger) Int64() int64
Int64 returns the value as int64 (may overflow for large values).
func (*BigInteger) IsExact ¶
func (p *BigInteger) IsExact() bool
IsExact returns true as BigInteger is always exact.
R7RS §6.2.2: Integers (including BigInteger) are always exact.
func (*BigInteger) IsNegative ¶
func (p *BigInteger) IsNegative() bool
IsNegative returns true if this BigInteger is negative.
func (*BigInteger) IsPositive ¶
func (p *BigInteger) IsPositive() bool
IsPositive returns true if this BigInteger is positive.
func (*BigInteger) IsVoid ¶
func (p *BigInteger) IsVoid() bool
IsVoid returns true if this BigInteger is nil.
func (*BigInteger) IsZero ¶
func (p *BigInteger) IsZero() bool
IsZero returns true if this BigInteger is zero.
func (*BigInteger) LessThan ¶
func (p *BigInteger) LessThan(o Number) bool
LessThan returns true if this BigInteger is less than another number.
R7RS §6.2.6: The < procedure returns #t if its arguments are monotonically increasing. Comparison across numeric types uses mathematical value.
func (*BigInteger) Multiply ¶
func (p *BigInteger) Multiply(o Number) Number
Multiply returns the product of this BigInteger and another number.
R7RS §6.2.6: The * procedure returns the product of its arguments. R7RS §6.2.2 Exactness: exact * exact = exact, exact * inexact = inexact. Exception: Exact zero dominates—(* 0 x) may return exact 0 even when x is inexact. Zero is an exact value when the result is mathematically unambiguous. This implementation follows Chez Scheme's behavior.
func (*BigInteger) Negate ¶
func (p *BigInteger) Negate() Number
Negate returns the negation of this BigInteger.
func (*BigInteger) SchemeString ¶
func (p *BigInteger) SchemeString() string
SchemeString returns the Scheme representation of this BigInteger.
func (*BigInteger) Subtract ¶
func (p *BigInteger) Subtract(o Number) Number
Subtract returns the difference of this BigInteger and another number.
R7RS §6.2.6: The - procedure returns the difference of its arguments. R7RS §6.2.2 Exactness: exact - exact = exact, exact - inexact = inexact.
func (*BigInteger) ToExact ¶
func (p *BigInteger) ToExact() Number
ToExact returns this BigInteger as an exact number.
R7RS §6.2.6: exact returns an exact representation of its argument. Since BigInteger is already exact, it returns itself.
func (*BigInteger) ToInexact ¶
func (p *BigInteger) ToInexact() Number
ToInexact returns this BigInteger converted to an inexact float.
R7RS §6.2.6: inexact returns an inexact representation of its argument. Converts to Float (float64), which may lose precision for large values.
R7RS §6.2.3: The inexact representation may have limited precision, but the conversion should be as close as practical.
type BinaryInputPort ¶
type BinaryInputPort struct {
// contains filtered or unexported fields
}
BinaryInputPort represents a Scheme binary input port.
func NewBinaryInputPort ¶
func NewBinaryInputPort(rdr *bufio.Reader) *BinaryInputPort
NewBinaryInputPort creates a new binary input port wrapping the given rdr.
func NewBinaryInputPortFromReader ¶
func NewBinaryInputPortFromReader(reader io.Reader) *BinaryInputPort
NewBinaryInputPortFromReader creates a new input port reading from the given byte slice.
func (*BinaryInputPort) Close ¶
func (p *BinaryInputPort) Close() error
func (*BinaryInputPort) Datum ¶
func (p *BinaryInputPort) Datum() io.Reader
Datum returns the underlying io.Reader.
func (*BinaryInputPort) EqualTo ¶
func (p *BinaryInputPort) EqualTo(v Value) bool
EqualTo returns true if both ports wrap the same rdr.
func (*BinaryInputPort) IsClosed ¶
func (p *BinaryInputPort) IsClosed() bool
func (*BinaryInputPort) IsVoid ¶
func (p *BinaryInputPort) IsVoid() bool
IsVoid returns true if the port is nil.
func (*BinaryInputPort) ReadByte ¶
func (p *BinaryInputPort) ReadByte() (byte, error)
func (*BinaryInputPort) SchemeString ¶
func (p *BinaryInputPort) SchemeString() string
SchemeString returns the Scheme representation of the port.
func (*BinaryInputPort) UnreadByte ¶
func (p *BinaryInputPort) UnreadByte() error
type BinaryOutputPort ¶
type BinaryOutputPort struct {
// contains filtered or unexported fields
}
BinaryOutputPort represents a Scheme binary output port.
func NewBinaryOutputPort ¶
func NewBinaryOutputPort(wrt *bufio.Writer) *BinaryOutputPort
NewBinaryOutputPort creates a new binary output port wrapping the given buf.
func NewBinaryOutputPortFromWriter ¶
func NewBinaryOutputPortFromWriter(writer io.Writer) *BinaryOutputPort
NewBinaryOutputPortFromWriter creates a new input port reading from the given byte slice.
func (*BinaryOutputPort) Close ¶
func (p *BinaryOutputPort) Close() error
func (*BinaryOutputPort) Datum ¶
func (p *BinaryOutputPort) Datum() io.Writer
Datum returns the underlying io.Writer.
func (*BinaryOutputPort) EqualTo ¶
func (p *BinaryOutputPort) EqualTo(v Value) bool
EqualTo returns true if both ports wrap the same buf.
func (*BinaryOutputPort) Flush ¶
func (p *BinaryOutputPort) Flush() error
Flush flushes the port's buffer.
func (*BinaryOutputPort) IsClosed ¶
func (p *BinaryOutputPort) IsClosed() bool
func (*BinaryOutputPort) IsVoid ¶
func (p *BinaryOutputPort) IsVoid() bool
IsVoid returns true if the port is nil.
func (*BinaryOutputPort) SchemeString ¶
func (p *BinaryOutputPort) SchemeString() string
SchemeString returns the Scheme representation of the port.
func (*BinaryOutputPort) Write ¶
func (p *BinaryOutputPort) Write(bs []byte) (int, error)
Write writes bytes to the port.
func (*BinaryOutputPort) WriteByte ¶
func (p *BinaryOutputPort) WriteByte(b byte) error
WriteByte writes a single byte to the port.
type BinaryReader ¶
BinaryReader represents a binary input port capable of byte-level I/O.
R7RS §6.13.3: Binary input ports support read-u8, peek-u8, read-bytevector, etc.
type BinaryWriter ¶
type BinaryWriter interface {
OutputPort
WriteByte(byte) error
}
BinaryWriter represents a binary output port capable of byte-level I/O.
R7RS §6.13.3: Binary output ports support write-u8, write-bytevector, etc.
type Boolean ¶
type Boolean struct {
Value bool
}
Boolean represents a Scheme boolean value.
func (*Boolean) SchemeString ¶
SchemeString returns the Scheme representation of the boolean.
type Box ¶
type Box struct {
Value Value
}
Box represents a mutable Scheme box (container).
func (*Box) SchemeString ¶
SchemeString returns the Scheme representation of the box.
type Byte ¶
type Byte struct {
Value uint8
}
Byte represents a Scheme byte value (0-255).
func (*Byte) SchemeString ¶
SchemeString returns the Scheme representation of the byte.
type ByteVector ¶
type ByteVector []*Byte
ByteVector represents a Scheme bytevector.
func NewByteVector ¶
func NewByteVector(vs ...*Byte) *ByteVector
NewByteVector creates a new bytevector from integer values.
func NewByteVectorFromBytes ¶
func NewByteVectorFromBytes(vs ...byte) *ByteVector
func NewByteVectorFromIntegers ¶
func NewByteVectorFromIntegers(vs ...*Integer) *ByteVector
NewByteVectorFromIntegers creates a new bytevector from integer values.
func (*ByteVector) AsBytes ¶
func (p *ByteVector) AsBytes(is ...int) []byte
AsBytes converts the bytevector to a Go byte slice. The starti and endi parameters specify the range of bytes to include. If starti is negative, it is treated as 0. If endi is greater than the length of the bytevector or non-positive, it is treated as the length of the bytevector. If starti is greater than endi, it is treated as equal to endi.
func (*ByteVector) AsList ¶
func (p *ByteVector) AsList() Tuple
AsList converts the vector to a proper list (linked list of pairs). Returns void (nil Pair) if the vector is void. Returns EmptyList if the vector is empty. Otherwise returns a newly constructed list containing the vector's elements.
func (*ByteVector) Datum ¶
func (p *ByteVector) Datum() []*Byte
Datum returns the underlying byte slice.
func (*ByteVector) EqualTo ¶
func (p *ByteVector) EqualTo(v Value) bool
EqualTo returns true if the bytevectors have equal contents.
func (*ByteVector) Get ¶
func (p *ByteVector) Get(i int) Value
func (*ByteVector) IsVoid ¶
func (p *ByteVector) IsVoid() bool
IsVoid returns true if the bytevector is nil.
func (*ByteVector) Length ¶
func (p *ByteVector) Length() int
func (*ByteVector) SchemeString ¶
func (p *ByteVector) SchemeString() string
SchemeString returns the Scheme representation of the bytevector.
func (*ByteVector) Set ¶
func (p *ByteVector) Set(i int, value Value)
type ByteVectorBufferdOutputPort ¶
type ByteVectorBufferdOutputPort struct {
// contains filtered or unexported fields
}
ByteVectorBufferdOutputPort represents a Scheme output port writing to memory.
func NewByteVectorBufferdOutputPort ¶
func NewByteVectorBufferdOutputPort() *ByteVectorBufferdOutputPort
NewByteVectorBufferdOutputPort creates a new in-memory bytevector output port.
func NewByteVectorBufferdOutputPortFromBuffer ¶
func NewByteVectorBufferdOutputPortFromBuffer(buf *bytes.Buffer) *ByteVectorBufferdOutputPort
NewByteVectorBufferdOutputPortFromBuffer creates a new in-memory bytevector output port.
func (*ByteVectorBufferdOutputPort) Close ¶
func (p *ByteVectorBufferdOutputPort) Close() error
func (*ByteVectorBufferdOutputPort) Datum ¶
func (p *ByteVectorBufferdOutputPort) Datum() *bytes.Buffer
Datum returns the underlying bytes.Buffer.
func (*ByteVectorBufferdOutputPort) EqualTo ¶
func (p *ByteVectorBufferdOutputPort) EqualTo(v Value) bool
EqualTo returns true if both ports share the same buffer.
func (*ByteVectorBufferdOutputPort) Flush ¶
func (p *ByteVectorBufferdOutputPort) Flush() error
func (*ByteVectorBufferdOutputPort) IsClosed ¶
func (p *ByteVectorBufferdOutputPort) IsClosed() bool
func (*ByteVectorBufferdOutputPort) IsVoid ¶
func (p *ByteVectorBufferdOutputPort) IsVoid() bool
IsVoid returns true if this port is nil.
func (*ByteVectorBufferdOutputPort) ReadByteVector ¶
func (p *ByteVectorBufferdOutputPort) ReadByteVector() (*ByteVector, error)
func (*ByteVectorBufferdOutputPort) SchemeString ¶
func (p *ByteVectorBufferdOutputPort) SchemeString() string
SchemeString returns the Scheme representation of this port.
func (*ByteVectorBufferdOutputPort) Write ¶
func (p *ByteVectorBufferdOutputPort) Write(bs []byte) (n int, err error)
func (*ByteVectorBufferdOutputPort) WriteByte ¶
func (p *ByteVectorBufferdOutputPort) WriteByte(b byte) error
type ByteVectorExtractor ¶
type ByteVectorExtractor interface {
ReadByteVector() (*ByteVector, error)
}
ByteVectorExtractor represents a port that can extract its accumulated bytes.
type ByteVectorInputOutputPort ¶
type ByteVectorInputOutputPort struct {
// contains filtered or unexported fields
}
ByteVectorInputOutputPort represents a Scheme output port writing to memory.
func NewByteVectorInputOutputPort ¶
func NewByteVectorInputOutputPort() *ByteVectorInputOutputPort
NewByteVectorInputOutputPort creates a new in-memory bytevector output port.
func NewByteVectorInputOutputPortFromBuffer ¶
func NewByteVectorInputOutputPortFromBuffer(buf *bytes.Buffer) *ByteVectorInputOutputPort
NewByteVectorInputOutputPortFromBuffer creates a new in-memory bytevector output port.
func (*ByteVectorInputOutputPort) Close ¶
func (p *ByteVectorInputOutputPort) Close() error
func (*ByteVectorInputOutputPort) Datum ¶
func (p *ByteVectorInputOutputPort) Datum() *bytes.Buffer
Datum returns the underlying bytes.Buffer.
func (*ByteVectorInputOutputPort) EqualTo ¶
func (p *ByteVectorInputOutputPort) EqualTo(v Value) bool
EqualTo returns true if both ports share the same buffer.
func (*ByteVectorInputOutputPort) Flush ¶
func (p *ByteVectorInputOutputPort) Flush() error
func (*ByteVectorInputOutputPort) IsClosed ¶
func (p *ByteVectorInputOutputPort) IsClosed() bool
func (*ByteVectorInputOutputPort) IsVoid ¶
func (p *ByteVectorInputOutputPort) IsVoid() bool
IsVoid returns true if this port is nil.
func (*ByteVectorInputOutputPort) Read ¶
func (p *ByteVectorInputOutputPort) Read(bs []byte) (int, error)
func (*ByteVectorInputOutputPort) ReadByte ¶
func (p *ByteVectorInputOutputPort) ReadByte() (byte, error)
func (*ByteVectorInputOutputPort) ReadByteVector ¶
func (p *ByteVectorInputOutputPort) ReadByteVector() (*ByteVector, error)
func (*ByteVectorInputOutputPort) SchemeString ¶
func (p *ByteVectorInputOutputPort) SchemeString() string
SchemeString returns the Scheme representation of this port.
func (*ByteVectorInputOutputPort) UnreadByte ¶
func (p *ByteVectorInputOutputPort) UnreadByte() error
UnreadByte unreads the last byte read, allowing it to be read again.
func (*ByteVectorInputOutputPort) Write ¶
func (p *ByteVectorInputOutputPort) Write(bs []byte) (n int, err error)
func (*ByteVectorInputOutputPort) WriteByte ¶
func (p *ByteVectorInputOutputPort) WriteByte(b byte) error
type ByteVectorInputPort ¶
type ByteVectorInputPort struct {
// contains filtered or unexported fields
}
ByteVectorInputPort represents a Scheme input port reading from a byte slice.
func NewByteVectorInputPort ¶
func NewByteVectorInputPort(reader *bufio.Reader) *ByteVectorInputPort
NewByteVectorInputPort creates a new input port reading from the given byte slice.
func NewByteVectorInputPortFromReader ¶
func NewByteVectorInputPortFromReader(reader io.Reader) *ByteVectorInputPort
NewByteVectorInputPortFromReader creates a new input port reading from the given byte slice.
func (*ByteVectorInputPort) Close ¶
func (p *ByteVectorInputPort) Close() error
Close closes the port.
func (*ByteVectorInputPort) Datum ¶
func (p *ByteVectorInputPort) Datum() *bufio.Reader
Datum returns the underlying bytes.Reader.
func (*ByteVectorInputPort) EqualTo ¶
func (p *ByteVectorInputPort) EqualTo(v Value) bool
EqualTo returns true if both ports share the same rdr.
func (*ByteVectorInputPort) IsClosed ¶
func (p *ByteVectorInputPort) IsClosed() bool
func (*ByteVectorInputPort) IsVoid ¶
func (p *ByteVectorInputPort) IsVoid() bool
IsVoid returns true if this port is nil.
func (*ByteVectorInputPort) ReadByte ¶
func (p *ByteVectorInputPort) ReadByte() (byte, error)
ReadByte reads and returns the next byte from the port.
func (*ByteVectorInputPort) SchemeString ¶
func (p *ByteVectorInputPort) SchemeString() string
SchemeString returns the Scheme representation of this port.
func (*ByteVectorInputPort) UnreadByte ¶
func (p *ByteVectorInputPort) UnreadByte() error
UnreadByte unreads the last byte read, allowing it to be read again.
type ByteVectorOutputPort ¶
type ByteVectorOutputPort struct {
// contains filtered or unexported fields
}
ByteVectorOutputPort represents a Scheme output port writing to memory.
func NewByteVectorOutputPort ¶
func NewByteVectorOutputPort(wrt *bufio.Writer) *ByteVectorOutputPort
NewByteVectorOutputPort creates a new in-memory bytevector output port.
func NewByteVectorOutputPortFromWriter ¶
func NewByteVectorOutputPortFromWriter(wrt io.Writer) *ByteVectorOutputPort
NewByteVectorOutputPortFromWriter creates a new in-memory bytevector output port.
func (*ByteVectorOutputPort) Close ¶
func (p *ByteVectorOutputPort) Close() error
func (*ByteVectorOutputPort) Datum ¶
func (p *ByteVectorOutputPort) Datum() *bufio.Writer
Datum returns the underlying bytes.Buffer.
func (*ByteVectorOutputPort) EqualTo ¶
func (p *ByteVectorOutputPort) EqualTo(v Value) bool
EqualTo returns true if both ports share the same buffer.
func (*ByteVectorOutputPort) Flush ¶
func (p *ByteVectorOutputPort) Flush() error
func (*ByteVectorOutputPort) IsClosed ¶
func (p *ByteVectorOutputPort) IsClosed() bool
func (*ByteVectorOutputPort) IsVoid ¶
func (p *ByteVectorOutputPort) IsVoid() bool
IsVoid returns true if this port is nil.
func (*ByteVectorOutputPort) SchemeString ¶
func (p *ByteVectorOutputPort) SchemeString() string
SchemeString returns the Scheme representation of this port.
func (*ByteVectorOutputPort) Write ¶
func (p *ByteVectorOutputPort) Write(bs []byte) (n int, err error)
func (*ByteVectorOutputPort) WriteByte ¶
func (p *ByteVectorOutputPort) WriteByte(b byte) error
type Channel ¶
type Channel struct {
// contains filtered or unexported fields
}
Channel represents a Go channel exposed to Scheme
func NewChannel ¶
NewChannel creates a new channel with the given buffer size bufferSize of 0 creates an unbuffered channel
func (*Channel) BufferSize ¶
BufferSize returns the channel's buffer size
func (*Channel) Receive ¶
Receive receives a value from the channel (blocking) Returns the value and true, or nil and false if channel is closed
func (*Channel) SchemeString ¶
SchemeString returns the Scheme representation of this channel.
func (*Channel) TryReceive ¶
TryReceive attempts to receive a value without blocking Returns (value, true, true) if received Returns (nil, false, true) if would block Returns (nil, false, false) if channel is closed
type Character ¶
type Character struct {
Value rune
}
Character represents a Scheme character value.
func NewCharacter ¶
NewCharacter creates a new character from a rune.
func (*Character) SchemeString ¶
SchemeString returns the Scheme representation of the character.
type CharacterInputPort ¶
type CharacterInputPort struct {
// contains filtered or unexported fields
}
CharacterInputPort represents a Scheme textual input port.
func NewCharacterInputPort ¶
func NewCharacterInputPort(rdr *bufio.Reader) *CharacterInputPort
NewCharacterInputPort creates a new character input port from an io.RuneReader.
func NewCharacterInputPortFromReader ¶
func NewCharacterInputPortFromReader(rdr io.Reader) *CharacterInputPort
NewCharacterInputPortFromReader creates a new character input port from an io.Reader.
func (*CharacterInputPort) Close ¶
func (p *CharacterInputPort) Close() error
func (*CharacterInputPort) Datum ¶
func (p *CharacterInputPort) Datum() io.RuneReader
Datum returns the underlying io.RuneReader.
func (*CharacterInputPort) EqualTo ¶
func (p *CharacterInputPort) EqualTo(v Value) bool
EqualTo returns true if both ports wrap the same rdr.
func (*CharacterInputPort) IsClosed ¶
func (p *CharacterInputPort) IsClosed() bool
func (*CharacterInputPort) IsVoid ¶
func (p *CharacterInputPort) IsVoid() bool
IsVoid returns true if the port is nil.
func (*CharacterInputPort) SchemeString ¶
func (p *CharacterInputPort) SchemeString() string
SchemeString returns the Scheme representation of the port.
func (*CharacterInputPort) UnreadRune ¶
func (p *CharacterInputPort) UnreadRune() error
type CharacterOutputPort ¶
type CharacterOutputPort struct {
// contains filtered or unexported fields
}
CharacterOutputPort represents a Scheme textual output port.
func NewCharacterOutputPort ¶
func NewCharacterOutputPort(wrt *bufio.Writer) *CharacterOutputPort
NewCharacterOutputPort creates a new character input port from an io.Reader.
func NewCharacterOutputPortFromWriter ¶
func NewCharacterOutputPortFromWriter(wrt io.Writer) *CharacterOutputPort
NewCharacterOutputPortFromWriter creates a new character output port wrapping the given buf.
func (*CharacterOutputPort) Close ¶
func (p *CharacterOutputPort) Close() error
func (*CharacterOutputPort) Datum ¶
func (p *CharacterOutputPort) Datum() io.Writer
Datum returns the underlying data of the CharacterOutputPort as an io.Writer. there is no RunWriter interface in the standard library, so we just use io.Writer here.
func (*CharacterOutputPort) EqualTo ¶
func (p *CharacterOutputPort) EqualTo(v Value) bool
EqualTo returns true if both ports wrap the same buf.
func (*CharacterOutputPort) Flush ¶
func (p *CharacterOutputPort) Flush() error
func (*CharacterOutputPort) IsClosed ¶
func (p *CharacterOutputPort) IsClosed() bool
func (*CharacterOutputPort) IsVoid ¶
func (p *CharacterOutputPort) IsVoid() bool
IsVoid returns true if the port is nil.
func (*CharacterOutputPort) SchemeString ¶
func (p *CharacterOutputPort) SchemeString() string
SchemeString returns the Scheme representation of the port.
func (*CharacterOutputPort) WriteRune ¶
func (p *CharacterOutputPort) WriteRune(rn rune) (int, error)
WriteRune writes a single rune to the port's buf.
func (*CharacterOutputPort) WriteString ¶
func (p *CharacterOutputPort) WriteString(s string) (int, error)
type Collection ¶
Collection represents a container that can be converted to a list.
type Comparable ¶
Comparable represents a value that can be compared for ordering.
type CompileTimeValue ¶
type CompileTimeValue struct {
Value Value
}
CompileTimeValue wraps a value that is stored in the expand phase but accessible during macro expansion. This enables compile-time computation via define-for-syntax and begin-for-syntax.
func NewCompileTimeValue ¶
func NewCompileTimeValue(v Value) *CompileTimeValue
NewCompileTimeValue creates a new compile-time value.
func (*CompileTimeValue) EqualTo ¶
func (p *CompileTimeValue) EqualTo(v Value) bool
EqualTo returns true if the compile-time values are equal.
func (*CompileTimeValue) IsVoid ¶
func (p *CompileTimeValue) IsVoid() bool
IsVoid returns true if the compile-time value is nil.
func (*CompileTimeValue) SchemeString ¶
func (p *CompileTimeValue) SchemeString() string
SchemeString returns the Scheme representation of the compile-time value.
func (*CompileTimeValue) Unwrap ¶
func (p *CompileTimeValue) Unwrap() Value
type Complex ¶
type Complex struct {
Value complex128
}
Complex represents a Scheme complex number.
func NewComplex ¶
func NewComplex(v complex128) *Complex
NewComplex creates a new complex number from a complex128 value.
func NewComplexFromParts ¶
NewComplexFromParts creates a new complex number from real and imaginary parts.
func (*Complex) Compare ¶
Compare compares this complex number with another number by real parts.
R7RS §6.2.6: Complex comparison compares real parts only. Returns -1 if p < o, 0 if p == o, 1 if p > o.
func (*Complex) Datum ¶
func (p *Complex) Datum() complex128
Datum returns the underlying complex128 value.
func (*Complex) IsExact ¶
IsExact returns false since Complex is always inexact.
R7RS §6.2.2: Complex numbers with floating-point components are inexact.
func (*Complex) Negate ¶
Negate returns the negation of this complex number.
R7RS §6.2.6: The - procedure with one argument returns the additive inverse.
func (*Complex) SchemeString ¶
SchemeString returns the Scheme representation of this complex number. R7RS §6.2.6: Ensures decimal point for inexact values, lowercase inf/nan.
type ConditionVariable ¶
type ConditionVariable struct {
// contains filtered or unexported fields
}
ConditionVariable represents a Scheme condition variable (SRFI-18)
func NewConditionVariable ¶
func NewConditionVariable(name string) *ConditionVariable
NewConditionVariable creates a new condition variable
func (*ConditionVariable) Broadcast ¶
func (p *ConditionVariable) Broadcast()
Broadcast wakes all waiting threads
func (*ConditionVariable) EqualTo ¶
func (p *ConditionVariable) EqualTo(v Value) bool
EqualTo returns true if the condition variables are the same object.
func (*ConditionVariable) ID ¶
func (p *ConditionVariable) ID() uint64
ID returns the condition variable's unique identifier
func (*ConditionVariable) IsVoid ¶
func (p *ConditionVariable) IsVoid() bool
IsVoid returns true if the condition variable is nil.
func (*ConditionVariable) Name ¶
func (p *ConditionVariable) Name() string
Name returns the condition variable's name
func (*ConditionVariable) SchemeString ¶
func (p *ConditionVariable) SchemeString() string
SchemeString returns the Scheme representation of this condition variable.
func (*ConditionVariable) SetSpecific ¶
func (p *ConditionVariable) SetSpecific(v Value)
SetSpecific sets the condition variable's specific field
func (*ConditionVariable) Signal ¶
func (p *ConditionVariable) Signal()
Signal wakes one waiting thread
func (*ConditionVariable) Specific ¶
func (p *ConditionVariable) Specific() Value
Specific returns the condition variable's specific field
func (*ConditionVariable) Wait ¶
func (p *ConditionVariable) Wait(_ *Mutex, timeout *time.Duration) bool
Wait waits on the condition variable The mutex must be held when calling Wait Returns true if signaled, false if timeout
func (*ConditionVariable) WaiterCount ¶
func (p *ConditionVariable) WaiterCount() int
WaiterCount returns the number of threads waiting on this condition variable
type Exactness ¶
type Exactness int
Exactness represents whether a number is exact or inexact.
R7RS §6.2.2: Numbers are either exact or inexact. A number is exact if it was written as an exact constant or derived from exact numbers using only exact operations. Otherwise, it is inexact.
func ExactnessOf ¶
ExactnessOf returns the exactness of a number.
R7RS §6.2.2: - Integer, BigInteger, Rational are exact - Float, BigFloat, Complex are inexact - BigComplex depends on its components
func ResultExactness ¶
ResultExactness computes the exactness of a binary operation result.
R7RS §6.2.2: exact op exact = exact, otherwise inexact.
type Float ¶
type Float struct {
Value float64
}
Float represents a Scheme floating-point number.
func (*Float) Compare ¶
Compare compares this float with another number.
R7RS §6.2.6: Numeric comparisons use mathematical value regardless of exactness. Returns -1 if p < o, 0 if p == o, 1 if p > o.
func (*Float) HashCode ¶
HashCode returns a hash of the float value. Uses the IEEE 754 bit representation to ensure +0.0 and -0.0 hash differently (they are not EqualTo each other in Scheme).
func (*Float) IsExact ¶
IsExact returns false since Float is always inexact.
R7RS §6.2.2: Floating-point numbers are inexact.
func (*Float) Multiply ¶
Multiply returns the product of two numbers.
R7RS §6.2.6: The * procedure returns the product of its arguments. R7RS §6.2.2: Exact zero dominates—(* 0 x) may return exact 0 even when x is inexact. Zero is an exact value when the result is mathematically unambiguous. This implementation follows Chez Scheme's behavior.
func (*Float) Negate ¶
Negate returns the negation of this float.
R7RS §6.2.6: The - procedure with one argument returns the additive inverse.
func (*Float) SchemeString ¶
SchemeString returns the Scheme representation of the float.
R7RS §6.2.5: +inf.0, -inf.0, and +nan.0 are the written representations for positive infinity, negative infinity, and NaN. R7RS §7.1.1: Inexact real numbers must contain a decimal point to distinguish them from exact integers.
type ForEachFunc ¶
ForEachFunc is the type of function called for each element in the Pair list.
type ForeignError ¶
type ForeignError struct {
// contains filtered or unexported fields
}
ForeignError is an error that wraps an error from foreign code, such as C code.
func NewForeignError ¶
func NewForeignError(msg string) *ForeignError
NewForeignError creates a new foreign error with the given message.
func NewForeignErrorf ¶
func NewForeignErrorf(msg string, vs ...any) *ForeignError
NewForeignErrorf creates a new foreign error with a formatted message.
func WrapForeignErrorf ¶
func WrapForeignErrorf(err error, msg string, vs ...any) *ForeignError
WrapForeignErrorf wraps an existing error with a formatted message.
func (*ForeignError) Error ¶
func (p *ForeignError) Error() string
func (*ForeignError) Unwrap ¶
func (p *ForeignError) Unwrap() error
type ForeignFileError ¶
type ForeignFileError struct {
*ForeignError
Filename string // the file path that caused the error
Op string // the operation (e.g., "open-input-file", "delete-file")
}
ForeignFileError represents an error from a file system operation. R7RS §6.11: detected by file-error? predicate.
func WrapForeignFileError ¶
func WrapForeignFileError(err error, op string, filename string) *ForeignFileError
WrapForeignFileError wraps an OS error with file context.
func (*ForeignFileError) Unwrap ¶
func (p *ForeignFileError) Unwrap() error
type ForeignReadError ¶
type ForeignReadError struct {
*ForeignError
}
ForeignReadError represents an error from a read or parse operation. R7RS §6.11: detected by read-error? predicate.
func NewForeignReadErrorf ¶
func NewForeignReadErrorf(msg string, vs ...any) *ForeignReadError
NewForeignReadErrorf creates a new read error with a formatted message.
func WrapForeignReadErrorf ¶
func WrapForeignReadErrorf(err error, msg string, vs ...any) *ForeignReadError
WrapForeignReadErrorf wraps an error as a read error.
func (*ForeignReadError) Unwrap ¶
func (p *ForeignReadError) Unwrap() error
type Hashable ¶
Hashable represents a Value that can be used as a hashtable key. Types implementing Hashable must satisfy the contract: if a.EqualTo(b) then a.HashCode() == b.HashCode().
type Hashtable ¶
type Hashtable struct {
// contains filtered or unexported fields
}
Hashtable represents a Scheme hash table mapping hashable values to values.
Keys must implement the Hashable interface (Value + HashCode()). Uses bucket chaining with FNV-1a hashing for O(1) amortized operations and EqualTo() for key comparison within buckets.
func NewEmptyHashtable ¶
func NewEmptyHashtable() *Hashtable
NewEmptyHashtable creates a new empty hash table.
func (*Hashtable) Clear ¶
func (p *Hashtable) Clear()
Clear removes all entries from the hash table.
func (*Hashtable) Delete ¶
Delete removes the entry for key from the hash table. Returns ErrInvalidArgument if the key does not implement Hashable.
func (*Hashtable) EqualTo ¶
EqualTo returns true if both hash tables have equal contents. Uses structural equality (EqualTo) for both keys and values.
func (*Hashtable) Get ¶
Get retrieves the value associated with key. Returns the value and whether the key was found. Returns ErrInvalidArgument if the key does not implement Hashable.
func (*Hashtable) HasKey ¶
HasKey returns whether the key exists in the hash table. Returns ErrInvalidArgument if the key does not implement Hashable.
func (*Hashtable) SchemeString ¶
SchemeString returns the Scheme representation of this hash table.
func (*Hashtable) Set ¶
Set associates key with val in the hash table. Returns ErrInvalidArgument if the key does not implement Hashable.
type InputOutputPort ¶
type InputOutputPort interface {
InputPort
OutputPort
}
InputOutputPort represents a bidirectional Scheme port.
type Integer ¶
type Integer struct {
Value int64
}
Integer represents a Scheme integer value.
R7RS §6.2.1: Integers are exact numbers in the numeric tower hierarchy:
number ⊃ complex ⊃ real ⊃ rational ⊃ integer
R7RS §6.2.2: Integer is always exact. Operations on exact numbers produce exact results when mathematically well-defined.
func NewInteger ¶
NewInteger returns an Integer value. Small integers in the range -256 to 255 are cached and return the same pointer for the same value.
func (*Integer) Add ¶
Add returns the sum of this integer and another number.
R7RS §6.2.6: The + procedure returns the sum of its arguments. R7RS §6.2.2 Exactness: exact + exact = exact, exact + inexact = inexact. When adding Integer + BigInteger, result is BigInteger (exact). When adding Integer + Float/Complex, result is Float/Complex (inexact).
func (*Integer) Compare ¶
Compare compares this integer with another number.
R7RS §6.2.6: Numeric comparisons use mathematical value regardless of exactness. Returns -1 if p < o, 0 if p == o, 1 if p > o.
func (*Integer) Divide ¶
Divide returns the quotient of this integer and another number.
R7RS §6.2.6: The / procedure returns the quotient of its arguments. For exact arguments, / may return a non-integer (Rational) when the mathematical result is not an integer. Returns Integer only when the division is exact.
R7RS §6.2.2 Exactness: exact / exact = exact (Integer or Rational), exact / inexact = inexact (Float or Complex).
func (*Integer) EqualTo ¶
EqualTo returns true if both integers have the same value.
R7RS §6.2.6: The = procedure compares numerical values for equality. This implements structural equality for the Integer type specifically. Handles comparison with both Integer and BigInteger types.
func (*Integer) IsExact ¶
IsExact returns true since Integer is always exact.
R7RS §6.2.2: Integers are always exact numbers.
func (*Integer) LessThan ¶
LessThan returns true if this integer is less than another number.
R7RS §6.2.6: The < procedure returns #t if its arguments are monotonically increasing. Comparison across numeric types uses mathematical value.
func (*Integer) Multiply ¶
Multiply returns the product of this integer and another number.
R7RS §6.2.6: The * procedure returns the product of its arguments. R7RS §6.2.2 Exactness: exact * exact = exact, exact * inexact = inexact. Exception: Exact zero dominates—(* 0 x) may return exact 0 even when x is inexact. Zero is an exact value when the result is mathematically unambiguous. This implementation follows Chez Scheme's behavior.
func (*Integer) Negate ¶
Negate returns the negation of this integer.
R7RS §6.2.6: The - procedure with one argument returns the additive inverse.
func (*Integer) SchemeString ¶
SchemeString returns the Scheme representation of this integer.
type JoinTimeoutException ¶
type JoinTimeoutException struct{}
JoinTimeoutException is raised when thread-join! times out
func (*JoinTimeoutException) Error ¶
func (p *JoinTimeoutException) Error() string
type KeyValue ¶
KeyValue represents a key-value pair.
func NewKeyValue ¶
NewKeyValue creates a new key-value pair.
type Mutex ¶
type Mutex struct {
// contains filtered or unexported fields
}
Mutex represents a Scheme mutex (SRFI-18)
func (*Mutex) Lock ¶
Lock acquires the mutex with optional timeout and owner Returns true if acquired, false if timeout
func (*Mutex) MarkAbandoned ¶
func (p *Mutex) MarkAbandoned()
MarkAbandoned marks the mutex as abandoned (called when owner thread terminates)
func (*Mutex) SchemeString ¶
SchemeString returns the Scheme representation of the mutex.
func (*Mutex) SetSpecific ¶
SetSpecific sets the mutex's specific field
func (*Mutex) State ¶
func (p *Mutex) State() MutexState
State returns the current state of the mutex
func (*Mutex) StateValue ¶
StateValue returns the state as a Scheme value Returns: 'not-owned, 'abandoned, or the owner thread
type MutexState ¶
type MutexState int
MutexState represents the state of a mutex
const ( MutexUnlocked MutexState = iota // Not locked MutexLockedOwned // Locked with owner MutexLockedNotOwned // Locked without owner MutexAbandoned // Owner terminated while holding lock )
MutexState constants.
func (MutexState) String ¶
func (p MutexState) String() string
type NativeError ¶
type NativeError struct {
// contains filtered or unexported fields
}
NativeError represents an R7RS error object created by (error ...). It contains a message string and a list of irritant objects that provide additional context about the error. It can also wrap a Go error.
func NewErrorObject ¶
func NewErrorObject(message string, irritants ...Value) *NativeError
NewErrorObject creates a new error object with the given message and irritants.
func NewErrorObjectWithCause ¶
func NewErrorObjectWithCause(message string, cause error, irritants ...Value) *NativeError
NewErrorObjectWithCause creates a new error object that wraps a Go error. This preserves the original error for debugging while providing R7RS-compliant exception handling. The wrapped error can be retrieved with Datum() or Unwrap().
func NewErrorObjectWithCauseAndKind ¶
func NewErrorObjectWithCauseAndKind(message string, cause error, kind NativeErrorKind, irritants ...Value) *NativeError
NewErrorObjectWithCauseAndKind creates a new error object that wraps a Go error with a specific kind. R7RS §6.11: The kind determines which error predicate (file-error?, read-error?) matches.
func NewFileError ¶
func NewFileError(message string, irritants ...Value) *NativeError
NewFileError creates a new file error object with the given message and irritants. R7RS §6.11: file-error? predicate checks for errors during file operations.
func NewNativeError ¶
func NewNativeError(msg string) *NativeError
NewNativeError creates a new native error with the given message.
func NewReadError ¶
func NewReadError(message string, irritants ...Value) *NativeError
NewReadError creates a new read error object with the given message and irritants. R7RS §6.11: read-error? predicate checks for errors during reading.
func (*NativeError) Datum ¶
func (p *NativeError) Datum() error
Datum returns the underlying Go error, if any.
func (*NativeError) EqualTo ¶
func (p *NativeError) EqualTo(v Value) bool
EqualTo returns true if this error object is equal to the given value.
func (*NativeError) Error ¶
func (p *NativeError) Error() string
Error implements the error interface.
func (*NativeError) Irritants ¶
func (p *NativeError) Irritants() Value
Irritants returns the list of irritant objects.
func (*NativeError) IsFileError ¶
func (p *NativeError) IsFileError() bool
IsFileError returns true if this is a file error.
func (*NativeError) IsReadError ¶
func (p *NativeError) IsReadError() bool
IsReadError returns true if this is a read error.
func (*NativeError) IsVoid ¶
func (p *NativeError) IsVoid() bool
IsVoid returns true if this error object is nil.
func (*NativeError) Kind ¶
func (p *NativeError) Kind() NativeErrorKind
Kind returns the error kind for R7RS error predicates.
func (*NativeError) Message ¶
func (p *NativeError) Message() *String
Message returns the error message string.
func (*NativeError) SchemeString ¶
func (p *NativeError) SchemeString() string
SchemeString returns the Scheme string representation of this error object.
func (*NativeError) Unwrap ¶
func (p *NativeError) Unwrap() error
Unwrap returns the underlying Go error for errors.Unwrap compatibility.
type NativeErrorKind ¶
type NativeErrorKind int
NativeErrorKind represents the type of an error object for R7RS error predicates.
const ( // NativeErrorKindGeneric is a generic error (default). NativeErrorKindGeneric NativeErrorKind = iota // NativeErrorKindRead is a read error (from reading data). NativeErrorKindRead // NativeErrorKindFile is a file error (from file operations). NativeErrorKindFile )
type Number ¶
type Number interface {
Value
Add(Number) Number
Subtract(Number) Number
Multiply(Number) Number
Divide(Number) Number
Negate() Number
IsZero() bool
IsExact() bool
LessThan(Number) bool
Compare(Number) int
}
Number represents a numeric value in the Scheme numeric tower.
R7RS §6.2.1: Numbers form a tower: number ⊃ complex ⊃ real ⊃ rational ⊃ integer. All numeric types implement this interface for uniform arithmetic operations.
Error signaling ¶
Arithmetic methods signal errors by panicking with a static sentinel error (e.g., ErrDivisionByZero, ErrNotANumber). This follows the same convention used by Go's math/big package, where (*big.Int).Div, (*big.Int).QuoRem, and (*big.Float).Quo all panic on division by zero, and mirrors Go's own runtime behavior for built-in integer division.
The panic convention is a deliberate design choice: arithmetic methods return Number (not (Number, error)), keeping the interface algebraic and composable. Callers that need error values should recover panics at their boundary. The VM does this in OperationForeignFunctionCall.Apply, which recovers panics and converts them to Scheme exceptions catchable by guard and with-exception-handler.
func Simplify ¶
Simplify attempts to reduce a number to a simpler type without losing information.
Simplification rules: - BigComplex with zero imaginary → real part - Complex with zero imaginary → Float → possibly Integer - BigFloat that is an integer → BigInteger → possibly Integer - Float that is an integer → Integer - Rational that is an integer → BigInteger → possibly Integer - BigInteger that fits int64 → Integer
type Once ¶
type Once struct {
// contains filtered or unexported fields
}
Once wraps sync.Once for Scheme
func (*Once) Do ¶
Do calls the function only once Returns true if this call executed the function, false if it was already called
func (*Once) SchemeString ¶
SchemeString returns the Scheme representation of the once.
type OutputPort ¶
OutputPort represents a Scheme output port.
type Pair ¶
type Pair [2]Value
Pair represents a Scheme cons cell.
func List ¶
List constructs a proper list from the given values. Returns EmptyList if no arguments are provided. The resulting list has the values in the same order as the arguments.
func VectorToList ¶
VectorToList converts a Vector to a proper list preserving element order. Iterates backward through the vector, prepending each element to build the list. Returns EmptyList for nil or void vectors.
func (*Pair) Append ¶
Append appends the given Value vs to the end of the list represented by the Pair. It panics if the Pair does not represent a proper list.
func (*Pair) AsVector ¶
AsVector converts the Pair representing a proper list into a Vector. It panics if the Pair does not represent a proper list.
func (*Pair) ForEach ¶
ForEach iterates over each element in the list represented by the Pair. The provided function fn is called for each element with the index i, a boolean hasNext indicating if there are more elements, and the value v. If fn returns an error, the iteration stops and the error is returned. If the list ends with a non-empty cdr, that cdr is returned as the second return value.
func (*Pair) IsEmptyList ¶
IsEmptyList checks if the Pair represents an empty list.
func (*Pair) IsList ¶
IsList checks if the Pair represents a proper list. Uses Floyd's cycle detection (tortoise-and-hare) to handle circular lists. Returns false for circular lists per R7RS §6.4.
func (*Pair) Length ¶
Len returns the length of the list represented by the Pair. It panics if the Pair does not represent a proper list.
func (*Pair) SchemeString ¶
SchemeString returns the Scheme representation of the Pair.
type Port ¶
Port represents a Scheme I/O port.
R7RS §6.13: All port types support close and open-state queries.
type Promise ¶
type Promise struct {
// Thunk is the procedure to evaluate (nil if already forced)
Thunk Value
// Result is the cached result (valid only if Forced is true)
Result Value
// Forced indicates whether the promise has been evaluated
Forced bool
}
Promise represents a delayed computation (R7RS lazy evaluation). A promise contains either an unevaluated thunk or a cached result.
R7RS §4.2.5: The first time a promise is forced, its body is evaluated and the result is memoized; on subsequent forces, the memoized result is returned.
func NewForcedPromise ¶
NewForcedPromise creates an already-forced promise with the given value. This is used by make-promise when given a non-promise value.
func NewPromise ¶
NewPromise creates a new unforced promise with the given thunk. The thunk should be a procedure that takes no arguments.
func (*Promise) SchemeString ¶
SchemeString returns the Scheme representation of the promise.
type RWMutex ¶
type RWMutex struct {
// contains filtered or unexported fields
}
RWMutex wraps sync.RWMutex for Scheme
func (*RWMutex) SchemeString ¶
SchemeString returns the Scheme representation of the RWMutex.
type Rational ¶
type Rational struct {
// contains filtered or unexported fields
}
Rational represents a Scheme rational number (exact fraction).
func NewRational ¶
NewRational creates a new Rational from numerator and denominator. The fraction is automatically normalized (reduced to lowest terms).
func NewRationalFromBigInt ¶
NewRationalFromBigInt creates a new Rational from big.Int numerator and denominator.
func NewRationalFromRat ¶
NewRationalFromRat creates a Rational from an existing big.Rat.
func (*Rational) Compare ¶
Compare compares this rational with another number.
R7RS §6.2.6: Numeric comparisons use mathematical value regardless of exactness. Returns -1 if p < o, 0 if p == o, 1 if p > o.
func (*Rational) DenomInt64 ¶
DenomInt64 returns the denominator as int64 (may overflow for large values).
func (*Rational) HashCode ¶
HashCode returns a hash of the rational value. Uses the canonical string representation of the reduced fraction.
func (*Rational) IsExact ¶
IsExact returns true since Rational is always exact.
R7RS §6.2.2: Rationals are always exact numbers.
func (*Rational) IsInteger ¶
IsInteger returns true if the rational represents an integer (denominator is 1).
func (*Rational) Negate ¶
Negate returns the negation of this rational.
R7RS §6.2.6: The - procedure with one argument returns the additive inverse.
func (*Rational) NumInt64 ¶
NumInt64 returns the numerator as int64 (may overflow for large values).
func (*Rational) SchemeString ¶
SchemeString returns the Scheme representation of the rational.
type Record ¶
type Record struct {
// contains filtered or unexported fields
}
Record represents a record instance as defined by R7RS define-record-type. Each record has a type descriptor and a slice of field values.
func NewRecord ¶
func NewRecord(rt *RecordType, fields []Value) *Record
NewRecord creates a new Record with the given type and field values. The fields slice should have the same length as the record type's field count.
func (*Record) EqualTo ¶
EqualTo implements structural equality for records. Two records are equal if they have the same type and all fields are equal.
func (*Record) FieldByName ¶
FieldByName returns the value of the field with the given name. Returns nil if the field is not found.
func (*Record) RecordType ¶
func (p *Record) RecordType() *RecordType
RecordType returns the record's type descriptor.
func (*Record) SchemeString ¶
SchemeString returns the Scheme external representation of the record.
func (*Record) SetFieldByName ¶
SetFieldByName sets the value of the field with the given name. Does nothing if the field is not found.
type RecordType ¶
type RecordType struct {
// contains filtered or unexported fields
}
RecordType represents a record type descriptor as defined by R7RS define-record-type. It holds the type name and the ordered list of field names.
func NewRecordType ¶
func NewRecordType(name *Symbol, fieldNames []*Symbol) *RecordType
NewRecordType creates a new RecordType with the given name and field names.
func (*RecordType) EqualTo ¶
func (p *RecordType) EqualTo(v Value) bool
EqualTo implements identity-based equality for record types. Two record types are equal only if they are the same object.
func (*RecordType) FieldCount ¶
func (p *RecordType) FieldCount() int
FieldCount returns the number of fields in this record type.
func (*RecordType) FieldIndex ¶
func (p *RecordType) FieldIndex(name *Symbol) int
FieldIndex returns the index of the field with the given name, or -1 if not found.
func (*RecordType) FieldNames ¶
func (p *RecordType) FieldNames() []*Symbol
FieldNames returns the ordered list of field name symbols.
func (*RecordType) IsVoid ¶
func (p *RecordType) IsVoid() bool
IsVoid returns true if the record type is nil.
func (*RecordType) Name ¶
func (p *RecordType) Name() *Symbol
Name returns the record type's name symbol.
func (*RecordType) SchemeString ¶
func (p *RecordType) SchemeString() string
SchemeString returns the Scheme external representation of the record type.
type SchemeWriter ¶
type SchemeWriter struct {
// contains filtered or unexported fields
}
SchemeWriter provides cycle-aware writing of Scheme values. It detects shared and circular structures and outputs them using datum labels (#n= for definitions and #n# for references) per R7RS §2.4.
func NewSchemeWriter ¶
func NewSchemeWriter() *SchemeWriter
NewSchemeWriter creates a new SchemeWriter for cycle-aware output. Default mode is WriteModeWrite (labels only circular references).
func (*SchemeWriter) WriteString ¶
func (p *SchemeWriter) WriteString(v Value) string
WriteString writes a Scheme value to a string with cycle detection. Circular and shared structures are represented using datum labels.
type SelectCase ¶
type SelectCase struct {
Channel *Channel
Value Value // for send operations
IsSend bool
IsDefault bool
}
SelectCase represents a case in a channel select operation
type SourceLocation ¶
SourceLocation represents a position in source code.
type StaticError ¶
type StaticError struct {
// contains filtered or unexported fields
}
StaticError represents a compile-time or static error.
func NewStaticError ¶
func NewStaticError(msg string) *StaticError
NewStaticError creates a new static error with the given message.
func (*StaticError) Error ¶
func (p *StaticError) Error() string
type String ¶
type String struct {
Value string
}
String represents a Scheme string value.
func InternString ¶
InternString returns an interned String for the given value. Multiple calls with the same string value return the same pointer.
func NewMutableString ¶
NewMutableString returns a newly allocated String that is not interned. Use this for strings that may be mutated (e.g., via string-set! or string-fill!). R7RS §6.7: Procedures like string-copy return mutable strings.
func NewString ¶
NewString returns a String value. Short strings (up to 64 characters) are automatically interned and return the same pointer for the same value.
func (*String) Fill ¶
Fill fills the string (or a portion of it) with the given character. R7RS §6.7: (string-fill! string fill [start [end]])
func (*String) SchemeString ¶
SchemeString returns the Scheme representation of the string.
func (*String) SetChar ¶
SetChar sets the character at index k to the given rune. This modifies the string in place. R7RS §6.7: (string-set! string k char)
type StringInputPort ¶
type StringInputPort struct {
// contains filtered or unexported fields
}
StringInputPort represents a Scheme string output port backed by a buffer.
func NewStringInputPort ¶
func NewStringInputPort() *StringInputPort
NewStringInputPort creates a new string output port.
func NewStringInputPortWithBuffer ¶
func NewStringInputPortWithBuffer(buffer *bytes.Buffer) *StringInputPort
NewStringInputPortWithBuffer creates a new string output port.
func (*StringInputPort) Close ¶
func (p *StringInputPort) Close() error
func (*StringInputPort) Datum ¶
func (p *StringInputPort) Datum() *bytes.Buffer
Datum returns the underlying buffer.
func (*StringInputPort) EqualTo ¶
func (p *StringInputPort) EqualTo(v Value) bool
EqualTo returns true if both ports use the same buffer.
func (*StringInputPort) Flush ¶
func (p *StringInputPort) Flush() error
func (*StringInputPort) IsClosed ¶
func (p *StringInputPort) IsClosed() bool
func (*StringInputPort) IsVoid ¶
func (p *StringInputPort) IsVoid() bool
IsVoid returns true if the port is nil.
func (*StringInputPort) Read ¶
func (p *StringInputPort) Read(bs []byte) (n int, err error)
Read reads data from the port into bs.
func (*StringInputPort) ReadRune ¶
func (p *StringInputPort) ReadRune() (r rune, size int, err error)
ReadRune reads a rune from the port.
func (*StringInputPort) SchemeString ¶
func (p *StringInputPort) SchemeString() string
SchemeString returns the Scheme representation of the port.
func (*StringInputPort) String ¶
func (p *StringInputPort) String() string
func (*StringInputPort) UnreadRune ¶
func (p *StringInputPort) UnreadRune() error
UnreadRune unreads the last rune read from the port.
type StringOutputPort ¶
type StringOutputPort struct {
// contains filtered or unexported fields
}
StringOutputPort represents a Scheme string output port backed by a buffer.
func NewStringOutputPort ¶
func NewStringOutputPort() *StringOutputPort
NewStringOutputPort creates a new string output port.
func NewStringOutputPortWithBuffer ¶
func NewStringOutputPortWithBuffer(buffer *bytes.Buffer) *StringOutputPort
NewStringOutputPortWithBuffer creates a new string output port.
func (*StringOutputPort) Close ¶
func (p *StringOutputPort) Close() error
Close closes the StringOutputPort.
func (*StringOutputPort) Datum ¶
func (p *StringOutputPort) Datum() *bytes.Buffer
Datum returns the underlying buffer.
func (*StringOutputPort) EqualTo ¶
func (p *StringOutputPort) EqualTo(v Value) bool
EqualTo returns true if both ports use the same buffer.
func (*StringOutputPort) Flush ¶
func (p *StringOutputPort) Flush() error
Flush is a no-op for StringOutputPort.
func (*StringOutputPort) IsClosed ¶
func (p *StringOutputPort) IsClosed() bool
func (*StringOutputPort) IsVoid ¶
func (p *StringOutputPort) IsVoid() bool
IsVoid returns true if the port is nil.
func (*StringOutputPort) SchemeString ¶
func (p *StringOutputPort) SchemeString() string
SchemeString returns the Scheme representation of the port.
func (*StringOutputPort) String ¶
func (p *StringOutputPort) String() string
func (*StringOutputPort) Write ¶
func (p *StringOutputPort) Write(bs []byte) (n int, err error)
Write writes data to the port.
func (*StringOutputPort) WriteRune ¶
func (p *StringOutputPort) WriteRune(rn rune) (int, error)
WriteRune writes a single rune to the port's buffer.
func (*StringOutputPort) WriteString ¶
func (p *StringOutputPort) WriteString(s string) (n int, err error)
WriteString writes a string to the port.
type Symbol ¶
type Symbol struct {
Key string
}
Symbol represents a Scheme symbol.
func InternSymbol
deprecated
InternSymbol returns the canonical interned version of the given symbol. If a symbol with the same name has been interned before, that pointer is returned. Otherwise, the symbol is added to the global intern table and returned. This ensures symbol identity (eq?) works correctly per R7RS §6.5.
Deprecated: Use TopLevelEnvironment.InternSymbol() for per-instance symbol interning. This global function is kept for backward compatibility with legacy environments. New code should use TopLevelEnvironment to enable multiple isolated Wile VMs.
This function is thread-safe.
func InternSymbolByName
deprecated
func NewTemporaryVariableName ¶
func NewTemporaryVariableName() *Symbol
NewTemporaryVariableName generates a unique symbol for use as a temporary variable. The symbol name has the format "__T_<base32-encoded-random-bytes>". Uses 128 bits of randomness to ensure uniqueness. Panics if random number generation fails.
func (*Symbol) SchemeString ¶
SchemeString returns the R7RS external representation of the symbol.
R7RS §7.1.1: Identifiers that can be represented without bars are written bare. Otherwise, they are enclosed in vertical bars with only \ and | characters escaped.
type TerminatedThreadException ¶
type TerminatedThreadException struct {
Thread *Thread
}
TerminatedThreadException is raised when joining a terminated thread
func (*TerminatedThreadException) Error ¶
func (p *TerminatedThreadException) Error() string
type TextualReader ¶
TextualReader represents a textual input port capable of rune-level I/O.
R7RS §6.13.2: Textual input ports support read-char, peek-char, read-line, etc.
type TextualWriter ¶
type TextualWriter interface {
OutputPort
WriteRune(rune) (int, error)
}
TextualWriter represents a textual output port capable of rune-level I/O.
R7RS §6.13.3: Textual output ports support write-char, write-string, etc.
type Thread ¶
type Thread struct {
// RunFunc is set by the machine package to actually run the thread
// This avoids circular dependency between values and machine
RunFunc func(ctx context.Context, thunk Value) (Value, error)
// contains filtered or unexported fields
}
Thread represents a Scheme thread (SRFI-18)
func (*Thread) Done ¶
func (p *Thread) Done() <-chan struct{}
Done returns a channel that's closed when the thread terminates
func (*Thread) Join ¶
Join waits for the thread to terminate with optional timeout Returns the thread's result or an error
func (*Thread) SchemeString ¶
SchemeString returns the Scheme representation of this thread.
func (*Thread) SetSpecific ¶
SetSpecific sets the thread's specific field
func (*Thread) State ¶
func (p *Thread) State() ThreadState
State returns the current state of the thread
func (*Thread) StateSymbol ¶
StateSymbol returns the state as a Scheme symbol
type ThreadState ¶
type ThreadState int
ThreadState represents the state of a thread
const ( ThreadNew ThreadState = iota // Created but not started ThreadRunnable // Running or ready to run ThreadBlocked // Waiting for mutex/cv/sleep ThreadTerminated // Finished execution )
ThreadState constants.
func (ThreadState) String ¶
func (p ThreadState) String() string
type Time ¶
type Time struct {
// contains filtered or unexported fields
}
Time represents a point in time (SRFI-18)
func NewTimeFromSeconds ¶
NewTimeFromSeconds creates a Time from seconds since epoch
func (*Time) DurationFromNow ¶
DurationFromNow returns the duration from now until this time.
func (*Time) SchemeString ¶
SchemeString returns the Scheme representation of the time.
type Tuple ¶
type Tuple interface {
Value
Length() int
Append(value Value) Value
ForEach(ctx context.Context, fn ForEachFunc) (Value, error)
IsEmptyList() bool
IsList() bool
IsVoid() bool
AsVector() *Vector
Car() Value
Cdr() Value
}
Tuple represents a list-like sequence of values.
type UncaughtThreadException ¶
type UncaughtThreadException struct {
Reason error
}
UncaughtThreadException wraps an exception that wasn't caught in a thread
func (*UncaughtThreadException) Error ¶
func (p *UncaughtThreadException) Error() string
func (*UncaughtThreadException) Unwrap ¶
func (p *UncaughtThreadException) Unwrap() error
type Value ¶
Value is the base interface for all Scheme values.
var EOFObject Value = eofType{}
EOFObject is the singleton EOF value.
var Void Value = voidType{}
Void is the singleton void value.
func ChannelSelect ¶
func ChannelSelect(cases []SelectCase) (int, Value, bool)
ChannelSelect performs a select operation on multiple channels Returns the index of the selected case and the received value (for receive cases)
func ForEach ¶
ForEach iterates over a Tuple value, calling fn for each element. If the value is not a Tuple, returns the value unchanged with no error. The callback receives the element index, whether more elements follow, and the element value. Returns the tail of the tuple (EmptyList for proper lists) and any error from the callback.
type Vector ¶
type Vector []Value
Vector represents an R7RS vector, a fixed-size mutable array of values. Vectors are written as #(element ...) in Scheme syntax. Unlike lists, vectors provide O(1) access to elements by index.
func NewVector ¶
NewVector creates a new Vector from the given values. Returns an empty vector if no arguments are provided.
func NewVectorWithLength ¶
NewVectorWithLength creates a new Vector of the given length, with all elements initialized to the specified fill value.
func (*Vector) AsList ¶
AsList converts the vector to a proper list (linked list of pairs). Returns void (nil Pair) if the vector is void. Returns EmptyList if the vector is empty. Otherwise returns a newly constructed list containing the vector's elements.
func (*Vector) Datum ¶
Datum returns the underlying slice of values. Returns nil if the vector is void (nil pointer).
func (*Vector) EqualTo ¶
EqualTo implements structural equality for vectors. Two vectors are equal if they have the same length and all corresponding elements are equal (using recursive EqualTo comparison). Returns false if the other value is not a Vector.
func (*Vector) IsVoid ¶
IsVoid returns true if the vector is a nil pointer. A nil vector represents the absence of a value, distinct from an empty vector.
func (*Vector) Length ¶
Length returns the number of elements in the vector. Returns 0 if the vector is void (nil pointer).
func (*Vector) SchemeString ¶
SchemeString returns the Scheme external representation of the vector. Format: #( element1 element2 ... ) with elements separated by spaces. Empty vectors are represented as #().
type WaitGroup ¶
type WaitGroup struct {
// contains filtered or unexported fields
}
WaitGroup wraps sync.WaitGroup for Scheme
func (*WaitGroup) SchemeString ¶
SchemeString returns the Scheme representation of the wait group.
type WriteMode ¶
type WriteMode int
WriteMode controls how the SchemeWriter handles shared structure.
R7RS §6.13.3 specifies three output procedures with different sharing semantics:
- write: datum labels only for circular references (WriteModeWrite)
- write-shared: datum labels for all shared references (WriteModeWriteShared)
- write-simple: no datum labels at all (handled separately via SchemeString)
Source Files
¶
- array_list.go
- atomic.go
- big_complex.go
- big_float.go
- big_integer.go
- binary_input_port.go
- binary_output_port.go
- boolean.go
- box.go
- byte.go
- byte_vector.go
- byte_vector_buffered_output_port.go
- byte_vector_input_output_port.go
- byte_vector_input_port.go
- byte_vector_output_port.go
- channel.go
- character.go
- character_input_port.go
- character_output_port.go
- compile_time_value.go
- complex.go
- condition_variable.go
- doc.go
- float.go
- foreign_error.go
- hash.go
- hashtable.go
- integer.go
- key_value.go
- mutex.go
- native_error.go
- numeric_tower.go
- once.go
- pair.go
- promise.go
- rational.go
- record.go
- record_type.go
- rw_mutex.go
- scheme_equals.go
- scheme_writer.go
- string.go
- string_input_port.go
- string_output_port.go
- symbol.go
- symbol_intern.go
- thread.go
- time.go
- utils.go
- values.go
- vector.go
- wait_group.go