For Development HEAD DRAFTSearch (procedure/syntax/module):

Appendix A C to Scheme mapping

For the convenience of the programmers familiar to C, I composed a simple table of C operators and library functions with the corresponding Scheme functions.

+

R7RS arithmetic procedure +. See Arithmetics.

+=

Gauche inc! macro. See Assignments.

-

R7RS arithmetic procedure -. See Arithmetics.

-=

Gauche dec! macro. See Assignments.

->

Gauche slot-ref is something close to this. See Accessing instance.

* (binary)

R7RS arithmetic procedure *. See Arithmetics.

* (unary)

No equivalent procedure. Scheme doesn’t have explicit notation of pointers.

*=

No equivalent procedure.

/

In C, it has two different meanings depending on the types of operands. For real division, use /. For integer quotient, use quotient. See Arithmetics.

/=

No equivalent procedure.

& (binary)

Gauche logand. See scheme.bitwise - R7RS bitwise operations.

& (unary)

No equivalent procedure. Scheme doesn’t have explicit notation of pointers.

&&

R7RS syntax and. See Conditionals.

&=

No equivalent procedure.

|

Gauche logior. See scheme.bitwise - R7RS bitwise operations.

||

R7RS syntax or. See Conditionals.

|=

No equivalent procedure.

^

Gauche logxor. See scheme.bitwise - R7RS bitwise operations.

=

R7RS syntax set!. See Assignments.

==

R7RS equivalence procedure, eq?, eqv? and equal?. See Equality.

<
<=

R7RS arithmetic procedure < and <=. See Numerical comparison. Unlike C operator, Scheme version is transitive.

<<

Gauche ash. See scheme.bitwise - R7RS bitwise operations.

<<=

No equivalent procedure.

>
>=

R7RS arithmetic procedure > and >=. See Numerical comparison. Unlike C operator, Scheme version is transitive.

>>

Gauche ash. See scheme.bitwise - R7RS bitwise operations.

>>=

No equivalent procedure.

%

R7RS operator modulo and remainder. See Arithmetics.

%=

No equivalent procedure.

[]

R7RS vector-ref (see Vectors) is something close. Or you can use Gauche’s generic function ref (see gauche.sequence - Sequence framework) for arbitrary sequences.

.

Gauche slot-ref is something close to this. See Accessing instance.

~

Gauche lognot. See scheme.bitwise - R7RS bitwise operations.

~=

No equivalent procedure.

!

R7RS procedure not. See Booleans.

!=

No equivalent procedure.

abort

Gauche sys-abort. See Program termination.

abs

R7RS abs. See Arithmetics.

access

Gauche sys-access. See File stats.

acos

R7RS acos. See Arithmetics.

alarm

Gauche sys-alarm. See Miscellaneous system calls.

asctime

Gauche sys-asctime. See Time.

asin

R7RS asin. See Arithmetics.

assert

No equivalent function in Gauche.

atan
atan2

R7RS atan. See Arithmetics.

atexit

No equivalent function in Gauche, but the "after" thunk of active dynamic handlers are called when exit is called. See Program termination, and See Continuations.

atof
atoi
atol

You can use string->number. See Numerical conversions.

bsearch

You can use SRFI-133’s vector-binary-search. See scheme.vector - R7RS vectors.

calloc

Allocation is handled automatically in Scheme.

ceil

R7RS ceiling. See Arithmetics.

cfgetispeed
cfgetospeed
cfsetispeed
cfsetospeed

Gauche’s sys-cfgetispeed, sys-cfgetospeed, sys-cfsetispeed, sys-cfsetospeed. See gauche.termios - Terminal control.

chdir

Gauche’s sys-chdir. See Other file operations.

chmod

Gauche’s sys-chmod. See File stats.

chown

Gauche’s sys-chown. See File stats.

clearerr

Not supported yet.

clock

No equivalent function in Gauche. You can use sys-times to get information about CPU time.

close

You can’t directly close the file descriptor, but when you use close-input-port or close-output-port, underlying file is closed. Some port-related functions, such as call-with-output-file, automatically closes the file when operation is finished. The file is also closed when its governing port is garbage collected. See Common port operations.

closedir

No equivalent function in Gauche. You can use sys-readdir to read the directory entries at once. See Directories.

cos
cosh

cos and cosh. See Arithmetics.

creat

A file is implicitly created by default when you open it for writing. See File ports for more control over the creation of files.

ctermid

Gauche sys-ctermid. See System inquiry.

ctime

Gauche sys-ctime. See Time.

cuserid

No equivalent function. This is removed from the newer POSIX. You can use alternative functions, such as sys-getlogin or sys-getpwuid with sys-getuid.

difftime

Gauche sys-difftime. See Time.

div

You can use R7RS quotient and remainder. See Arithmetics.

dup
dup2

Not directly supported, but you can use port-fd-dup!.

execl
execle
execlp
execv
execve
execvp

Gauche sys-exec. See Process management. For higher level interface, gauche.process - High-level process interface.

exit
_exit

Use exit or sys-exit, depends on what you need. See Program termination.

exp

R7RS exp. See Arithmetics.

fabs

R7RS abs. See Arithmetics.

fclose

You can’t directly close the file stream, but when you use close-input-port or close-output-port, underlying file is closed. Some port-related functions, such as call-with-output-file, automatically closes the file when operation is finished. The file is also closed when its governing port is garbage collected.

fcntl

Implemented as sys-fcntl in gauche.fcntl module. See gauche.fcntl - Low-level file operations.

fdopen

Gauche’s open-input-fd-port or open-output-fd-port. See File ports.

feof

No equivalent operation, but you can check if an input port have reached to the end by peek-char or peek-byte. See Reading data.

ferror

Not supported yet.

fflush

Gauche’s flush. See Output.

fgetc

Use read-char or read-byte. See Input.

fgetpos

Use Gauche’s port-tell (see Common port operations)

fgets

Use read-line or read-string. See Input.

fileno

port-file-number. See Common port operations.

floor

R7RS floor. See Arithmetics.

fmod

Gauche’s fmod.

fopen

R7RS open-input-file or open-output-file corresponds to this operation. See File ports.

fork

Gauche’s sys-fork. See Process management.

forkpty

Use sys-forkpty. See gauche.termios - Terminal control.

fpathconf

Not supported.

fprintf

Not directly supported, but Gauche’s format provides similar functionality. See Output. SLIB has printf implementation.

fputc

Use write-char or write-byte. See Output.

fputs

Use display. See Output.

fread

Not directly supported. To read binary numbers, see binary.io - Binary I/O. If you want to read a chunk of bytes, you may be able to use read-uvector!. See Uvector block I/O.

free

You don’t need this in Scheme.

freopen

Not supported.

frexp

Gauche’s frexp

fscanf

Not supported. For general case, you have to write a parser. If you can keep the data in S-exp, you can use read. If the syntax is very simple, you may be able to utilize string-tokenize in srfi.14 (srfi.13 - String library), and/or regular expression stuff (Regular expressions).

fseek

Use Gauche’s port-seek (see Common port operations)

fsetpos

Use Gauche’s port-seek (see Common port operations)

fstat

Gauche’s sys-stat. See File stats.

ftell

Use Gauche’s port-tell (see Common port operations)

fwrite

Not directly supported. To write binary numbers, see binary.io - Binary I/O. If you want to write a chunk of bytes, you can simply use display or write-uvector (see Uvector block I/O).

getc
getchar

Use read-char or read-byte. See Input.

getcwd

Gauche’s sys-getcwd. See System inquiry.

getdomainname

Gauche’s sys-getdomainname. See System inquiry.

getegid

Gauche’s sys-getegid. See System inquiry.

getenv

Gauche’s sys-getenv. See Environment inquiry.

geteuid

Gauche’s sys-geteuid. See System inquiry.

gethostname

Gauche’s sys-gethostname. See System inquiry.

getgid

Gauche’s sys-getgid. See System inquiry.

getgrgid
getgrnam

Gauche’s sys-getgrgid and sys-getgrnam. See Unix groups and users.

getgroups

Gauche’s sys-getgroups. See System inquiry.

getlogin

Gauche’s sys-getlogin. See System inquiry.

getpgrp

Gauche’s sys-getpgrp. See System inquiry.

getpid
getppid

Gauche’s sys-getpid. See System inquiry.

getpwnam
getpwuid

Gauche’s sys-getpwnam and sys-getpwuid. See Unix groups and users.

gets

Use read-line or read-string. See Input.

gettimeofday

Gauche’s sys-gettimeofday. See Time.

getuid

Gauche’s sys-getuid. See System inquiry.

gmtime

Gauche’s sys-gmtime. See Time.

isalnum

Not directly supported, but you can use R7RS char-alphabetic? and char-numeric?. See Characters. You can also use character set. See Character Sets, also scheme.charset - R7RS character sets.

isalpha

R7RS char-alphabetic?. See Characters. See also Character Sets and scheme.charset - R7RS character sets.

isatty

Gauche’s sys-isatty. See Other file operations.

iscntrl

Not directly supported, but you can use (char-set-contains? char-set:iso-control c) with srfi.14. See scheme.charset - R7RS character sets.

isdigit

R7RS char-numeric?. See Characters. You can also use (char-set-contains? char-set:digit c) with srfi.14. See scheme.charset - R7RS character sets.

isgraph

Not directly supported, but you can use (char-set-contains? char-set:graphic c) with srfi.14. See scheme.charset - R7RS character sets.

islower

R7RS char-lower-case?. See Characters. You can also use (char-set-contains? char-set:lower-case c) with srfi.14. See scheme.charset - R7RS character sets.

isprint

Not directly supported, but you can use (char-set-contains? char-set:printing c) with srfi.14. See scheme.charset - R7RS character sets.

ispunct

Not directly supported, but you can use (char-set-contains? char-set:punctuation c) with srfi.14. See scheme.charset - R7RS character sets.

isspace

R7RS char-whitespace?. See Characters. You can also use (char-set-contains? char-set:whitespace c) with srfi.14. See scheme.charset - R7RS character sets.

isupper

R7RS char-upper-case?. See Characters. You can also use (char-set-contains? char-set:upper-case c) with srfi.14. See scheme.charset - R7RS character sets.

isxdigit

Not directly supported, but you can use (char-set-contains? char-set:hex-digit c) with srfi.14. See scheme.charset - R7RS character sets.

kill

Gauche’s sys-kill. See Signal.

labs

R7RS abs. See Arithmetics.

ldexp

Gauche’s ldexp.

ldiv

Use R7RS quotient and remainder. See Arithmetics.

link

Gauche’s sys-link. See Directory manipulation.

localeconv

Gauche’s sys-localeconv. See Locale.

localtime

Gauche’s sys-localtime. See Time.

log

R7RS log. See Arithmetics.

log10

Not directly supported. log10(z)(/ (log z) (log 10)).

longjmp

R7RS call/cc provides similar (superior) mechanism. See Continuations.

lseek

Use Gauche’s port-seek (see Common port operations)

malloc

Not necessary in Scheme.

mblen
mbstowcs
mbtowc

Gauche handles multibyte strings internally, so generally you don’t need to care about multibyte-ness of the string. string-length always returns a number of characters for a string in supported encoding. If you want to convert the character encoding, see gauche.charconv - Character Code Conversion.

memcmp
memcpy
memmove
memset

No equivalent functions.

mkdir

Gauche’s sys-mkdir. See Directory manipulation.

mkfifo

Gauche’s sys-mkfifo.

mkstemp

Gauche’s sys-mkstemp. See Directory manipulation. Use this instead of tmpnam.

mktime

Gauche’s sys-mktime. See Time.

modf

Gauche’s modf.

open

Not directly supported. R7RS open-input-file or open-output-file corresponds to this operation. See File ports.

opendir

Not directly supported. You can use sys-readdir to read the directory entries at once. See Directories.

openpty

Use sys-openpty. See gauche.termios - Terminal control.

pathconf

Not supported.

pause

Gauche’s sys-pause. See Miscellaneous system calls.

perror

No equivalent function in Gauche. System calls generally throws an error (<system-error>), including the description of the reason of failure.

pipe

Gauche’s sys-pipe. See Other file operations.

pow

R7RS expt. See Arithmetics.

printf

Not directly supported, but Gauche’s format provides similar functionality. See Output. SLIB has printf implementation.

putc
putchar

Use write-char or write-byte. See Output.

puts

Use display. See Output.

qsort

Gauche’s sort and sort! provides a convenient way to sort list of items. See Sorting and merging.

raise

No equivalent function in Gauche. Scheme function raise (SRFI-18) is to raise an exception. You can use (sys-kill (sys-getpid) SIG) to send a signal SIG to the current process.

rand

Not supported directly, but on most platforms a better RNG is available as sys-random. See Miscellaneous system calls.

read

Not supported directly, but you may be able to use read-uvector or read-uvector! (see Uvector block I/O).

readdir

Not supported directly. Gauche’s sys-readdir reads the directory at once. See Directories.

readlink

Gauche’s sys-readlink. See Directory manipulation. This function is available on systems that support symbolic links.

realloc

Not necessary in Scheme.

realpath

Gauche’s sys-normalize-pathname or sys-realpath. See Pathnames.

remove

Gauche’s sys-remove. See Directory manipulation.

rename

Gauche’s sys-rename. See Directory manipulation.

rewind

Not directly supported, but you can use port-seek instead. See Common port operations.

rewinddir

Not supported directly. You can use sys-readdir to read the directory entries at once. See Directories.

rmdir

Gauche’s sys-rmdir. See Directory manipulation.

scanf

Not supported. For general case, you have to write a parser. If you can keep the data in S-exp, you can use read. If the syntax is very simple, you may be able to utilize string-tokenize in srfi.14 (srfi.13 - String library), and/or regular expression stuff (Regular expressions).

select

Gauche’s sys-select. See I/O multiplexing.

setbuf

Not necessary.

setgid

Gauche’s sys-setgid.

setjmp

R7RS call/cc provides similar (superior) mechanism. See Continuations.

setlocale

Gauche’s sys-setlocale. See Locale.

setpgid

Gauche’s sys-setpgid. See System inquiry.

setsid

Gauche’s sys-setsid. See System inquiry.

setuid

Gauche’s sys-setuid. See System inquiry.

setvbuf

Not necessary.

sigaction

You can use set-signal-handler! to install signal handlers. See Handling signals.

sigaddset
sigdelset
sigemptyset
sigfillset

Gauche’s sys-sigset-add! and sys-sigset-delete!. See Signals and signal sets.

sigismember

Not supported yet.

siglongjmp

R7RS call/cc provides similar (superior) mechanism. See Continuations.

signal

You can use with-signal-handlers to install signal handlers. See Handling signals.

sigpending

Not supported yet.

sigprocmask

Signal mask is handled internally. See Handling signals.

sigsetjmp

R7RS call/cc provides similar (superior) mechanism. See Continuations.

sigsuspend

Gauche’s sys-sigsuspend. See Masking and waiting signals.

sigwait

Gauche’s sys-sigwait. See Masking and waiting signals.

sin
sinh

Use sin and sinh. See Arithmetics.

sleep

Gauche’s sys-sleep. See Miscellaneous system calls.

sprintf

Not directly supported, but Gauche’s format provides similar functionality. See Output. SLIB has printf implementation.

sqrt

R7RS sqrt. See Arithmetics.

srand

Not supported directly, but on most platforms a better RNG is available as sys-srandom (see Miscellaneous system calls). The math.mt-random module provides much superior RNG (see math.mt-random - Mersenne Twister Random number generator).

sscanf

Not supported. For general case, you have to write a parser. If you can keep the data in S-exp, you can use read. If the syntax is very simple, you may be able to utilize string-tokenize in srfi.14 (srfi.13 - String library), and/or regular expression stuff (Regular expressions).

stat

Gauche’s sys-stat. See File stats.

strcasecmp

R7RS string-ci=? and other comparison functions. See String comparison.

strcat

R7RS string-append. See String utilities.

strchr

SRFI-13 string-index. See String searching.

strcmp

R7RS string=? and other comparison functions. See String comparison.

strcoll

Not supported yet.

strcpy

R7RS string-copy. See String utilities.

strcspn

Not directly supported, but you can use SRFI-13 string-skip with a character set. See String searching.

strerror

Gauche’s sys-strerror. See System inquiry.

strftime

Gauche’s sys-strftime. See Time.

strlen

R7RS string-length. See String accessors & modifiers.

strncat

Not directly supported, but you can use string-append and substring.

strncasecmp

SRFI-13 string-compare-ci provides the most flexible (but a bit difficult to use) functionality. See String comparison. If what you want is just to check the fixed-length prefixes of two string matches, you can use SRFI-13 string-prefix-ci?.

strncmp

SRFI-13 string-compare provides the most flexible (but a bit difficult to use) functionality. See String comparison. If what you want is just to check the fixed-length prefixes of two string matches, you can use SRFI-13 string-prefix?. See String prefixes & suffixes.

strncpy

SRFI-13 substring. See String utilities.

strpbrk

Not directly supported, but you can use SRFI-13 string-skip with a character set. See String searching.

strrchr

SRFI-13 string-index-right. See String searching.

strspn

Not directly supported, but you can use SRFI-13 string-index with a character set. See String searching.

strstr

SRFI-13 string-contains. See String searching.

strtod

You can use R7RS string->number. See Numerical conversions.

strtok

SRFI-13 string-tokenize. See Other string operations.

strtol
strtoul

You can use R7RS string->number. See Numerical conversions.

strxfrm

Not supported yet.

symlink

Gauche’s sys-symlink. See Directory manipulation. This function is available on systems that support symbolic links.

sysconf

Not supported yet.

system

Gauche’s sys-system. See Process management. It is generally recommended to use the process library (gauche.process - High-level process interface).

tan
tanh

R7RS tan and Gauche tanh. See Arithmetics.

tcdrain
tcflow
tcflush
tcgetattr
tcgetpgrp
tcsendbreak
tcsetattr
tcsetpgrp

Corresponding functions are: sys-tcdrain, sys-tcflow, sys-tcflush, sys-tcgetattr, sys-tcgetpgrp, sys-tcsendbreak, sys-tcsetattr, sys-tcsetpgrp. See gauche.termios - Terminal control.

time

Gauche’s sys-time. See Time.

times

Gauche’s sys-times. See System inquiry.

tmpfile

Not exactly supported. See sys-mkstemp instead. See Directory manipulation.

tmpnam

Gauche’s sys-tmpnam. This function is provided since it is in POSIX, but its use is discouraged for the potential security risk. Use sys-mkstemp instead. See Directory manipulation.

tolower
toupper

R7RS char-upcase and char-downcase. See Characters.

ttyname

Gauche’s sys-ttyname. See Other file operations.

tzset

Not supported yet.

umask

Gauche’s sys-umask. See Directory manipulation.

uname

Gauche’s sys-uname. See System inquiry.

ungetc

Not directly supported. You can use peek-char to look one character ahead, instead of pushing back.

unlink

Gauche’s sys-unlink. See Directory manipulation.

utime

Gauche’s sys-utime. See File stats.

va_arg
va_end
va_start

Not necessary, for Scheme handles variable number of arguments naturally.

vfprintf
vprintf
vsprintf

Not directly supported, but Gauche’s format provides similar functionality. See Output. SLIB has printf implementation.

wait

Gauche’s sys-wait. See Process management.

waitpid

Gauche’s sys-waitpid. See Process management.

wcstombs
wctomb

Gauche handles multibyte strings internally, so generally you don’t need to care about multibyte-ness of the string. string-length always returns a number of characters for a string in supported encoding. If you want to convert the character encoding, see gauche.charconv - Character Code Conversion.

write

R7RS display (see Output). Or write-uvector (see Uvector block I/O).



For Development HEAD DRAFTSearch (procedure/syntax/module):
DRAFT