This is guile.info, produced by makeinfo version 4.13 from guile.texi. This reference manual documents Guile, GNU's Ubiquitous Intelligent Language for Extensions. This is edition 1.1 corresponding to Guile 1.8.8. Copyright (C) 1996, 1997, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the no Invariant Sections, with the Front-Cover Texts being "A GNU Manual," and with the Back-Cover Text "You are free to copy and modify this GNU Manual.". A copy of the license is included in the section entitled "GNU Free Documentation License". INFO-DIR-SECTION The Algorithmic Language Scheme START-INFO-DIR-ENTRY * Guile Reference: (guile). The Guile reference manual. END-INFO-DIR-ENTRY  Indirect: guile.info-1: 948 guile.info-2: 300902 guile.info-3: 599105 guile.info-4: 899008 guile.info-5: 1191739 guile.info-6: 1445131 guile.info-7: 1758034  Tag Table: (Indirect) Node: Top948 Node: Preface2188 Node: Manual Layout2634 Node: Manual Conventions4512 Node: Contributors5780 Node: Guile License7498 Node: Introduction to Guile8967 Node: What is Guile?9255 Node: Obtaining and Installing Guile11718 Node: Whirlwind Tour13027 Node: Running Guile Interactively13630 Node: Running Guile Scripts14527 Node: Linking Guile into Programs15155 Node: Writing Guile Extensions16667 Node: Using the Guile Module System18113 Node: Using Modules18823 Node: Writing new Modules19721 Node: Putting Extensions into Modules20478 Node: Discouraged and Deprecated21412 Node: Reporting Bugs22983 Node: Programming in Scheme29748 Node: Basic Ideas30983 Node: About Data32042 Node: Latent Typing32718 Node: Values and Variables34670 Node: Definition36633 Node: About Procedures39219 Node: Procedures as Values40154 Node: Simple Invocation42827 Node: Creating a Procedure44613 Node: Lambda Alternatives47202 Node: About Expressions49066 Node: Evaluating50462 Ref: Evaluating-Footnote-158966 Node: Tail Calls59102 Node: The REPL61835 Node: Syntax Summary62876 Node: About Closure64765 Node: About Environments65949 Node: Local Variables67770 Node: Chaining69284 Node: Lexical Scope71620 Node: Closure76823 Node: Serial Number79088 Node: Shared Variable80638 Node: Callback Closure82196 Node: OO Closure84463 Node: Guile Scheme86709 Node: Guile Scripting87690 Node: The Top of a Script File88488 Node: Invoking Guile90257 Node: The Meta Switch95266 Node: Command Line Handling99237 Node: Scripting Examples102119 Node: Using Guile Interactively105841 Node: Readline106773 Node: Value Historyx107523 Node: Error Handling108636 Node: Interactive Debugger110948 Node: Display Backtrace112261 Node: Frame Selection113201 Node: Frame Information115099 Node: Frame Evaluation116192 Node: Stepping and Continuing116823 Node: Using Guile in Emacs118440 Node: GDS Introduction123222 Node: GDS Architecture125532 Node: GDS Getting Started128211 Node: Working with GDS in Scheme Buffers135122 Node: Access to Guile Help and Completion135569 Node: Evaluating Scheme Code137208 Node: Displaying the Scheme Stack138795 Node: Continuing Execution141543 Node: Associating Buffers with Clients143348 Node: An Example GDS Session145529 Node: Further Reading148515 Node: Programming in C149403 Node: Linking Programs With Guile151191 Node: Guile Initialization Functions152478 Node: A Sample Guile Main Program154085 Node: Linking Guile with Libraries158003 Node: A Sample Guile Extension160030 Node: General Libguile Concepts162217 Node: Dynamic Types163875 Node: Garbage Collection169304 Node: Control Flow173811 Node: Asynchronous Signals179666 Node: Multi-Threading181557 Node: Defining New Types (Smobs)190045 Node: Describing a New Type191411 Node: Creating Instances195048 Node: Type checking200450 Node: Garbage Collecting Smobs201546 Node: Garbage Collecting Simple Smobs206066 Node: Remembering During Operations207138 Node: Double Smobs209486 Node: The Complete Example210826 Node: Function Snarfing215429 Node: Programming Overview219792 Node: Extending Dia221251 Node: Dia Objective222247 Node: Dia Steps224296 Node: Dia Smobs225593 Node: Dia Primitives230828 Node: Dia Hook233258 Node: Dia Structure234305 Node: Dia Advanced235821 Node: Scheme vs C240488 Node: Testbed Example242523 Ref: Testbed Example-Footnote-1244147 Node: Programming Options244268 Node: Available Functionality246803 Node: Basic Constraints249450 Node: Style Choices249671 Node: Program Control249872 Node: User Programming250047 Ref: User Programming-Footnote-1253168 Node: API Reference253448 Node: API Overview255320 Node: The SCM Type257717 Node: Initialization259291 Node: Snarfing Macros264320 Node: Simple Data Types267780 Node: Booleans268833 Node: Numbers271581 Node: Numerical Tower273047 Node: Integers275351 Node: Reals and Rationals284030 Node: Complex Numbers289239 Node: Exactness290796 Node: Number Syntax292698 Node: Integer Operations294517 Node: Comparison296393 Node: Conversion298025 Node: Complex299354 Node: Arithmetic300902 Node: Scientific303475 Node: Primitive Numerics305337 Node: Bitwise Operations308593 Node: Random313470 Node: Characters317519 Node: Character Sets321823 Node: Character Set Predicates/Comparison323051 Node: Iterating Over Character Sets324212 Node: Creating Character Sets327552 Node: Querying Character Sets331184 Node: Character-Set Algebra332754 Node: Standard Character Sets335925 Node: Strings338746 Node: String Syntax341860 Node: String Predicates342916 Node: String Constructors345283 Node: List/String Conversion347760 Node: String Selection348987 Node: String Modification354294 Node: String Comparison356317 Node: String Searching363422 Node: Alphabetic Case Mapping368839 Node: Reversing and Appending Strings371079 Node: Mapping Folding and Unfolding373583 Node: Miscellaneous String Operations377716 Node: Conversion to/from C380542 Node: Regular Expressions384387 Node: Regexp Functions385684 Node: Match Structures396168 Node: Backslash Escapes399323 Node: Symbols403424 Node: Symbol Data406346 Node: Symbol Keys408607 Node: Symbol Variables411052 Node: Symbol Primitives412087 Node: Symbol Props418261 Node: Symbol Read Syntax421110 Node: Symbol Uninterned422753 Node: Keywords426250 Node: Why Use Keywords?426895 Node: Coding With Keywords428794 Node: Keyword Read Syntax430775 Node: Keyword Procedures432389 Node: Other Types433378 Node: Compound Data Types434020 Node: Pairs435352 Node: Lists441104 Ref: Lists-Footnote-1441975 Node: List Syntax442167 Ref: List Syntax-Footnote-1443169 Node: List Predicates443276 Node: List Constructors444249 Node: List Selection446448 Node: Append/Reverse447686 Node: List Modification449779 Node: List Searching453049 Node: List Mapping454634 Node: Vectors456040 Node: Vector Syntax457213 Node: Vector Creation457990 Node: Vector Accessors460045 Node: Vector Accessing from C463443 Node: Uniform Numeric Vectors467079 Node: Bit Vectors489523 Node: Generalized Vectors495222 Node: Arrays497758 Node: Array Syntax499823 Node: Array Procedures502379 Node: Shared Arrays512979 Node: Accessing Arrays from C519058 Node: Records532028 Node: Structures536535 Node: Vtables537308 Node: Structure Basics540520 Node: Vtable Contents543400 Node: Vtable Vtables546042 Node: Dictionary Types550803 Node: Association Lists552659 Node: Alist Key Equality553966 Node: Adding or Setting Alist Entries554816 Node: Retrieving Alist Entries559414 Node: Removing Alist Entries561215 Node: Sloppy Alist Functions563979 Node: Alist Example566179 Node: Hash Tables567442 Node: Hash Table Examples568518 Node: Hash Table Reference570745 Node: Smobs580047 Node: Procedures and Macros588092 Node: Lambda588866 Node: Primitive Procedures591913 Node: Optional Arguments593727 Node: let-optional Reference595096 Node: let-keywords Reference596448 Node: lambda* Reference599105 Node: define* Reference602439 Node: Procedure Properties604475 Node: Procedures with Setters607433 Ref: Procedures with Setters-Footnote-1609811 Node: Macros609952 Node: Syntax Rules611971 Node: Pattern Language613945 Node: Define-Syntax614120 Node: Let-Syntax614581 Node: Syntax Case614728 Node: Internal Macros614928 Node: Utility Functions619545 Node: Equality620309 Node: Object Properties625088 Node: Property Primitives627181 Node: Old-fashioned Properties628424 Node: Sorting629696 Node: Copying634089 Node: General Conversion634951 Node: Hooks636026 Node: Hook Example637547 Node: Hook Reference639408 Node: C Hooks643273 Node: GC Hooks647462 Node: REPL Hooks649705 Node: Binding Constructs649842 Node: Top Level650569 Node: Local Bindings653277 Node: Internal Definitions656424 Node: Binding Reflection658046 Node: Control Mechanisms658568 Node: begin659540 Node: if cond case660775 Node: and or664133 Node: while do665324 Node: Continuations669992 Node: Multiple Values675495 Node: Exceptions678568 Node: Exception Terminology680262 Node: Catch681294 Node: Throw Handlers687945 Node: Lazy Catch690201 Node: Throw696097 Node: Exception Implementation698599 Node: Error Reporting700177 Node: Dynamic Wind702048 Node: Handling Errors709695 Node: Input and Output713888 Node: Ports714729 Node: Reading717679 Node: Writing722520 Node: Closing725965 Node: Random Access727128 Node: Line/Delimited728846 Node: Block Reading and Writing733343 Node: Default Ports737004 Node: Port Types740043 Node: File Ports740425 Node: String Ports746668 Node: Soft Ports749293 Node: Void Ports751146 Node: I/O Extensions751697 Node: C Port Interface751975 Node: Port Implementation755503 Node: Read/Load/Eval760638 Node: Scheme Syntax761421 Node: Expression Syntax761735 Node: Comments765430 Node: Block Comments766356 Node: Case Sensitivity767282 Node: Keyword Syntax768027 Node: Reader Extensions768190 Node: Scheme Read768709 Node: Fly Evaluation770369 Node: Loading773818 Node: Delayed Evaluation777948 Node: Local Evaluation779115 Node: Evaluator Behaviour779600 Node: Memory Management782071 Node: Garbage Collection Functions782662 Node: Memory Blocks785434 Node: Weak References793807 Node: Weak hash tables795712 Node: Weak vectors796889 Node: Guardians797909 Node: Objects800705 Node: Modules801673 Node: provide and require803481 Node: Environments804301 Node: The Guile module system806335 Node: General Information about Modules807829 Node: Using Guile Modules810480 Node: Creating Guile Modules815603 Node: Module System Reflection824212 Node: Module System Quirks826468 Node: Included Guile Modules827802 Node: Accessing Modules from C831125 Node: Dynamic Libraries834912 Ref: Dynamic Libraries-Footnote-1837016 Node: Low level dynamic linking837292 Node: Compiled Code Modules842957 Node: Dynamic Linking and Compiled Code Modules844293 Node: Compiled Code Installation849864 Node: Variables853419 Node: Scheduling856277 Node: Arbiters857244 Node: Asyncs858589 Node: System asyncs859641 Node: User asyncs862777 Node: Continuation Barriers863642 Node: Threads864815 Node: Mutexes and Condition Variables867604 Node: Blocking873197 Node: Critical Sections875569 Node: Fluids and Dynamic States877696 Node: Parallel Forms883497 Node: Options and Config887088 Node: Build Config888346 Node: Feature Tracking893063 Node: Feature Manipulation893899 Node: Common Feature Symbols894772 Node: Runtime Options899008 Node: Low level options interfaces899863 Node: User level options interfaces901567 Node: Reader options903768 Node: Printing options904611 Node: Evaluator options905629 Node: Evaluator trap options906003 Node: Debugger options908449 Node: Examples of option use910445 Node: Translation912943 Node: Emacs Lisp Support913261 Node: Internationalization914162 Node: Debugging919931 Node: Evaluation Model920594 Node: Capturing the Stack or Innermost Stack Frame923195 Node: Examining the Stack925194 Node: Examining Stack Frames926576 Node: Source Properties928597 Node: Decoding Memoized Source Expressions932658 Node: Starting a New Stack933265 Node: Debug on Error933795 Ref: Debug on Error-Footnote-1943188 Node: Traps943319 Node: How to Set a Trap946386 Node: Specifying Trap Behaviour948618 Node: Trap Context951075 Ref: Trap Context-Footnote-1952711 Node: Tracing Examples952876 Node: Tracing Configuration955832 Node: Tracing and (ice-9 debug)960921 Node: Traps Installing More Traps962999 Node: Common Trap Options964514 Node: Procedure Traps966581 Node: Exit Traps967329 Node: Entry Traps968107 Node: Apply Traps968794 Node: Step Traps969524 Node: Source Traps973383 Node: Location Traps976193 Node: Trap Shorthands977768 Node: Trap Utilities979091 Node: Debugging Examples980743 Node: Single Stepping through a Procedure's Code981070 Node: Profiling or Tracing a Procedure's Code983322 Node: GH989029 Node: GH deprecation990123 Node: Transitioning away from GH992581 Node: GH preliminaries1001275 Node: Data types and constants defined by GH1001760 Node: Starting and controlling the interpreter1003437 Node: Error messages1006820 Node: Executing Scheme code1007053 Node: Defining new Scheme procedures in C1008260 Node: Converting data between C and Scheme1010575 Node: C to Scheme1011038 Node: Scheme to C1012879 Node: Type predicates1015665 Node: Equality predicates1017047 Node: Memory allocation and garbage collection1018270 Node: Calling Scheme procedures from C1018516 Node: Guile Modules1025327 Node: SLIB1026411 Node: SLIB installation1027170 Node: JACAL1028464 Node: POSIX1029044 Node: Conventions1030195 Node: Ports and File Descriptors1033503 Node: File System1051240 Node: User Information1064150 Node: Time1068456 Node: Runtime Environment1076295 Node: Processes1080702 Node: Signals1093568 Node: Terminals and Ptys1101477 Node: Pipes1103038 Node: Networking1106575 Node: Network Address Conversion1106864 Node: Network Databases1109967 Node: Network Socket Address1119502 Node: Network Sockets and Communication1123864 Node: Internet Socket Examples1138485 Node: System Identification1140369 Node: Locales1141809 Node: Encryption1142837 Node: getopt-long1144084 Node: getopt-long Example1145314 Node: Option Specification1147845 Node: Command Line Format1151034 Node: getopt-long Reference1153834 Node: option-ref Reference1156438 Node: SRFI Support1157152 Node: About SRFI Usage1159182 Node: SRFI-01160878 Node: SRFI-11163307 Node: SRFI-1 Constructors1164627 Node: SRFI-1 Predicates1166117 Node: SRFI-1 Selectors1168774 Node: SRFI-1 Length Append etc1170619 Node: SRFI-1 Fold and Map1173134 Node: SRFI-1 Filtering and Partitioning1181362 Node: SRFI-1 Searching1183016 Node: SRFI-1 Deleting1187197 Node: SRFI-1 Association Lists1189492 Node: SRFI-1 Set Operations1191739 Node: SRFI-21199925 Node: SRFI-41202250 Node: SRFI-61202532 Node: SRFI-81203044 Node: SRFI-91203305 Node: SRFI-101206101 Node: SRFI-111210159 Node: SRFI-131211025 Node: SRFI-141211240 Node: SRFI-161211490 Node: SRFI-171213318 Node: SRFI-191214993 Node: SRFI-19 Introduction1215971 Node: SRFI-19 Time1217626 Node: SRFI-19 Date1221290 Node: SRFI-19 Time/Date conversions1223469 Node: SRFI-19 Date to string1226244 Node: SRFI-19 String to date1229163 Node: SRFI-261231682 Node: SRFI-311234881 Node: SRFI-341235786 Node: SRFI-351236241 Node: SRFI-371241789 Node: SRFI-391245460 Node: SRFI-551251247 Node: SRFI-601252228 Node: SRFI-611256029 Node: SRFI-691256522 Node: SRFI-69 Creating hash tables1257318 Node: SRFI-69 Accessing table items1259967 Node: SRFI-69 Table properties1261674 Node: SRFI-69 Hash table algorithms1262789 Node: SRFI-881263870 Node: Readline Support1265257 Node: Loading Readline Support1266011 Node: Readline Options1268116 Node: Readline Functions1269269 Node: Value History1274362 Node: Pretty Printing1275336 Node: Formatted Output1276866 Node: File Tree Walk1304807 Node: Queues1311081 Node: Streams1313883 Node: Buffered Input1318705 Node: Expect1320924 Node: The Scheme shell (scsh)1326935 Node: Tracing1327491 Node: Autoconf Support1330467 Node: Autoconf Background1331182 Node: Autoconf Macros1332181 Node: Using Autoconf Macros1333367 Node: Autofrisk1335915 Node: Using Autofrisk1338634 Node: Data Representation1340046 Node: Data Representation in Scheme1341489 Node: A Simple Representation1343193 Node: Faster Integers1344550 Node: Cheaper Pairs1348006 Node: Guile Is Hairier1351280 Node: How Guile does it1352062 Node: General Rules1353075 Node: Conservative GC1354247 Node: Immediates vs Non-immediates1358379 Node: Immediate Datatypes1359605 Node: Integer Data1360309 Node: Character Data1361413 Node: Boolean Data1361973 Node: Unique Values1362256 Node: Non-immediate Datatypes1363817 Node: Pair Data1365414 Node: Vector Data1367511 Node: Procedures1369486 Node: Closures1370143 Node: Subrs1371836 Node: Port Data1374432 Node: Signalling Type Errors1374605 Node: Unpacking the SCM type1376128 Node: Relationship between SCM and scm_t_bits1377061 Node: Immediate objects1378269 Node: Non-immediate objects1379479 Node: Allocating Cells1380857 Node: Heap Cell Type Information1382122 Node: Accessing Cell Entries1383082 Node: Basic Rules for Accessing Cell Entries1386634 Node: GNU Free Documentation License1387946 Node: Concept Index1410413 Node: Procedure Index1445131 Node: Variable Index1758034 Node: Type Index1778234 Node: R5RS Index1781866  End Tag Table