Hot answers tagged

6

Untyped Lambda Calculus is untyped, because it doesn't concern itself with types. Untyped Lambda Calculus is not a practical programming language, but merely a foundation for a practical programming language. Scheme is typed, because in the real world we have to store and manipulate real data, rather than mathematical symbols. That Scheme is based on the ...


6

The advantage of hygienic macros is not one of language capability -- you can write macros that have good hygiene using gensym and careful quoting/unquoting at the right times. However, hygienic macros ensure your macros have good hygiene. In that respect, it's a bit like type-checking. There may also be tooling advantages to hygienic macros. Most ...


5

The main reason is, (f . l) can only work if l is an identifier (or some other atomic literal), and not if it's a more complicated expression. Consider a function for calculating the sum-of-squares: (define (sum-of-squares . nums) (apply + (map square nums))) Here, you cannot rewrite the (apply + (map square nums)) into (+ . (map square nums)), because ...


3

The simple answer is that Scheme is not untyped: as you noticed, Scheme programs can use values of several useful types. Still, people do mean something when they say Scheme is untyped, they mean something that is better expressed by saying that Scheme has a dynamic type system. Let me (eventually) explain. When people say "the untyped lambda calculus", ...


3

DrRacket maintains a list of keywords that it understands for auto-indentation, which you can find in the Preferences (under Editing->Indenting). If an identifier is listed as a keyword for indentation, then DrRacket will also highlight it differently if the chosen color scheme differentiates keywords from plain identifiers. Identifiers like + are not ...


2

Since you need constant size, and access elements by their indexes, I'd say go with 1-dimensional array of WIDTH*HEIGHT size. You can just translate indexes like matrix[x+y*WIDTH] or build a wrapper class to do it like matrix.get(x, y) - that way you don't have to track width, and you can add boundary checks. Access by index will have a constant time (O(1)) ...


Only top voted, non community-wiki answers of a minimum length are eligible