Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Andrew Plotkin's Freefall in I7...

21 views
Skip to first unread message

B

unread,
May 22, 2006, 10:07:04 PM5/22/06
to
Okay, is this even possible...

A while back I'd written about calling Freefall in an IF work...

http://groups.google.com/group/rec.arts.int-fiction/browse_frm/thread/50a7a02b05e1591e/4bb4cd8c619298b6?q=biagio&rnum=13#4bb4cd8c619298b6


well, now that I7 is here, I'm finally working on this game again.
What I would like to do is have a player pick up a handheld game of
Tetris, and play the actual abuse-of-the-z-machine game, and when a
certain score hits, have a secret code revealed. I don't know if this
would even be possible or plausible in an I7 game. Any thoughts?
Could you imbed this much I6 code in an I7 game?

Thanks,
Biagio

B

unread,
May 24, 2006, 11:23:02 AM5/24/06
to
Also, are these "abuses of the Z machine" just impossible in a pure I7
game? Are those an I6 only thing?

Andrew Plotkin

unread,
May 24, 2006, 11:40:46 AM5/24/06
to
Here, B <biag...@gmail.com> wrote:
> Also, are these "abuses of the Z machine" just impossible in a pure I7
> game? Are those an I6 only thing?

There are no I7 constructs for manipulating the status line
character-by-character.

However, it is easy to imagine an I7 extension that provides this
capability -- the I6 code would be encapulated inside the extension.
Whether you count this as "pure I7" is a quibble; existing extensions
like Basic Screen Effects already do it.

--Z

--
"And Aholibamah bare Jeush, and Jaalam, and Korah: these were the borogoves..."
*
9/11 did change everything. Since 9/12, the biggest threat to American
society has been the American president. I'd call that a change.

Kevin Forchione

unread,
May 24, 2006, 12:22:16 PM5/24/06
to
"Andrew Plotkin" <erky...@eblong.com> wrote in message
news:e51upt$kr1$3...@reader1.panix.com...

> Here, B <biag...@gmail.com> wrote:
>> Also, are these "abuses of the Z machine" just impossible in a pure I7
>> game? Are those an I6 only thing?
>
> There are no I7 constructs for manipulating the status line
> character-by-character.
>
> However, it is easy to imagine an I7 extension that provides this
> capability -- the I6 code would be encapulated inside the extension.
> Whether you count this as "pure I7" is a quibble; existing extensions
> like Basic Screen Effects already do it.

LOL! Such a quibble. It is as though people are asking each other, "which
holder are you smoking your cigarette through?" Surely the important issue
is whether the extension integrates well with the I7/I6 infrastructure, and
not whether it has a drop of I6 blood in its veins...

--Kevin


B

unread,
May 24, 2006, 5:30:34 PM5/24/06
to
I hope I didn't accidentally confuse people...I guess my only real
question is can I somehow just drop the freefall code as-is into an I7
project. I just want to make it work as painlessly as possible...not
really trying to quibble, honest : )

B

ems...@mindspring.com

unread,
May 24, 2006, 5:36:11 PM5/24/06
to

This is most likely to be a problem if

-- the I6 code requires inclusions at specific, unusual places in the
code (e.g., a bit that is supposed to go after Grammar, or whatever);
-- the code overrides an entry point that is already being used for
something else.

Otherwise, I suspect you could include this material; try it and see
how it goes. I7 doesn't do much of anything to the way pauses and
timing are handled, for instance, so I imagine the I6 inclusion for
that kind of material should work just fine.

B

unread,
May 24, 2006, 6:01:57 PM5/24/06
to
Verbatim Inform 6 extract too long:

is the message I get, followed by the text of the file itself. Does
that mean there is some way I'd need to break this down in "chunks",
and is there any special way to decide where to make those chunks? As
this is a giant routine, I imagine it could be hard to break it into
pieces?

Thanks!
Biagio

John W. Kennedy

unread,
May 24, 2006, 9:49:13 PM5/24/06
to

Have you tried using I6 Include?

--
John W. Kennedy
"The blind rulers of Logres
Nourished the land on a fallacy of rational virtue."
-- Charles Williams. "Taliessin through Logres: Prelude"

B

unread,
May 26, 2006, 12:54:58 PM5/26/06
to
I haven't...forgive my ignorance, is that different that typing

(- inform 6 code -)

That's how I've been trying to include it.

Thanks.
B

steve....@gmail.com

unread,
May 26, 2006, 1:25:25 PM5/26/06
to
Kevin Forchione wrote:
> Andrew Plotkin wrote:
> > [...]I6 code would be encapulated inside the extension.

> > Whether you count this as "pure I7" is a quibble; existing extensions
> > like Basic Screen Effects already do it.
>
> LOL! Such a quibble. It is as though people are asking each other, "which
> holder are you smoking your cigarette through?" Surely the important issue
> is whether the extension integrates well with the I7/I6 infrastructure, and
> not whether it has a drop of I6 blood in its veins...

It sounds really silly to me also, but in the manual, Graham urges
people (particularly extension writers) not to use I6 code. It's not
something he can directly control, so he puts it as a semi-polite
request. -- My question is, "why?" -- and the answer is, I6 code is a
chink in the NL pretense that Graham has cultivated.

It's one thing to write fake-NL versions of function calls if you're
the one writing the parser, but another thing to produce and promote
this concept of "pure I7" and tell people who don't have access to the
parser to respect and maintain it. Both are misguided, but the latter
is plumb dumb.

Andrew Plotkin

unread,
May 26, 2006, 2:18:21 PM5/26/06
to
Here, steve....@gmail.com wrote:
> Kevin Forchione wrote:
> > Andrew Plotkin wrote:
> > > [...]I6 code would be encapulated inside the extension.
> > > Whether you count this as "pure I7" is a quibble; existing extensions
> > > like Basic Screen Effects already do it.
> >
> > LOL! Such a quibble. It is as though people are asking each other, "which
> > holder are you smoking your cigarette through?" Surely the important issue
> > is whether the extension integrates well with the I7/I6 infrastructure, and
> > not whether it has a drop of I6 blood in its veins...
>
> It sounds really silly to me also, but in the manual, Graham urges
> people (particularly extension writers) not to use I6 code.

No he doesn't.

--Z

--
"And Aholibamah bare Jeush, and Jaalam, and Korah: these were the borogoves..."
*

If the Bush administration hasn't subjected you to searches without a
warrant, it's for one reason: they don't feel like it. Not because of
the Fourth Amendment.

Rioshin an'Harthen

unread,
May 26, 2006, 2:53:40 PM5/26/06
to
<steve....@gmail.com> wrote:
> It sounds really silly to me also, but in the manual, Graham urges
> people (particularly extension writers) not to use I6 code. It's not
> something he can directly control, so he puts it as a semi-polite
> request. -- My question is, "why?" -- and the answer is, I6 code is a
> chink in the NL pretense that Graham has cultivated.

Hmm... I can't see how you read that into the words written into the I7
manual. It says:

"Ideally, all I6 content would be confined to extensions (and this may be
mandated in future releases of Inform), and even writers of extensions are
asked to pare down their usage of I6 to the minimum necessary."

This does not say "do not use I6 code". There is a real difference between
what you *claim* it says, and what it really does: "please keep the I6 code
to a minimum".

What do you have against Graham and Inform 7, Steve? Day by day, you're
sounding more like a jerk, intentionally misreading everything to suit your
own particular taste.


steve....@gmail.com

unread,
May 26, 2006, 3:24:58 PM5/26/06
to
Rioshin an'Harthen wrote:
> <steve....@gmail.com> wrote:
> > It sounds really silly to me also, but in the manual, Graham urges
> > people (particularly extension writers) not to use I6 code. It's not
> > something he can directly control, so he puts it as a semi-polite
> > request. -- My question is, "why?" -- and the answer is, I6 code is a
> > chink in the NL pretense that Graham has cultivated.
>
> Hmm... I can't see how you read that into the words written into the I7
> manual. It says:
>
> "Ideally, all I6 content would be confined to extensions (and this may be
> mandated in future releases of Inform), and even writers of extensions are
> asked to pare down their usage of I6 to the minimum necessary."
>
> This does not say "do not use I6 code".

I didn't say it did.

> There is a real difference between
> what you *claim* it says, and what it really does: "please keep the I6 code
> to a minimum".

There is no difference. He is (semi-politely) urging people not to use
I6 code. You misread my post.

> What do you have against Graham and Inform 7, Steve?

I have already elaborated this in sufficient detail, and I'm not going
to recap the whole argument. I have provided solid analysis of the I7
design, goal, and underlying philosophy. (To which Graham has the
audacity to respond, "what are you arguing?")

> Day by day, you're
> sounding more like a jerk, intentionally misreading everything to suit your
> own particular taste.

I am being misread, intentionally and maliciously, foremost by Graham
himself, whose ego knows no bounds, and whose rhetorical hijinx knows
no limits when that ego is threatened. Other posters like you are happy
to join in on the (seemingly) dominant side of the argument, without
having anything of substance to say, just a bunch of angry "you're a
jerk" garbage. I would say the same thing back to you, but I think in
your case it's more incompetence than malice.

In either case, I am not the one doing the misreading; it's quite the
other way round.

steve....@gmail.com

unread,
May 26, 2006, 3:29:12 PM5/26/06
to
Andrew Plotkin wrote:
> > It sounds really silly to me also, but in the manual, Graham urges
> > people (particularly extension writers) not to use I6 code.
>
> No he doesn't.

That's depressingly knee-jerk of you, oh well. Rioshin an'Harthen
already provided sufficient quotation to corroborate the point,
although he seemed to think he was contradicting it.

ems...@mindspring.com

unread,
May 26, 2006, 4:21:22 PM5/26/06
to

Kevin Forchione wrote:
> "Andrew Plotkin" <erky...@eblong.com> wrote in message
> news:e51upt$kr1$3...@reader1.panix.com...
> > However, it is easy to imagine an I7 extension that provides this
> > capability -- the I6 code would be encapulated inside the extension.
> > Whether you count this as "pure I7" is a quibble; existing extensions
> > like Basic Screen Effects already do it.
>
> LOL! Such a quibble. It is as though people are asking each other, "which
> holder are you smoking your cigarette through?" Surely the important issue
> is whether the extension integrates well with the I7/I6 infrastructure

Yes, this really is the issue. In my experience it is easy to write
I7/I6 hybrids that are much uglier and less elegant than doing the same
thing in either language alone. (I also find that porting I6 to I7
tends to require a rethinking; it's rare that I run into something in
I6 that I really cannot do in I7, but trying to make the structure of
the I7 closely mirror the structure of the I6 often leads to pain and
gnashing of teeth.) So the real trick is usually to think of ways to
make I6 functionality available from within I7 in a way that fits that
paradigm naturally.

But in this particular case this sounds like a non-problem, since the
original poster is trying to drop a whole separate encapsulated thing
into the game.

ems...@mindspring.com

unread,
May 26, 2006, 4:30:39 PM5/26/06
to

That's fine.

I was able to get this to work myself by breaking up the inclusions
into several parts; just put

Include (-

some routines

-)

Include (-

more routines

-)

and so on. This breaks up the inclusion enough that the compiler is
able to handle it. The only other things I did were to remove Andrew's
Main routine and supply the following:


House of Old Arcade Games is a room. "Try PLAY to begin a game."

To play tetris:
(- PlayTetris(); -)

Understand "play" as playing. Playing is an action applying to nothing.
Carry out playing: play tetris.

Joe Mason

unread,
May 26, 2006, 4:42:59 PM5/26/06
to
On 2006-05-26, steve....@gmail.com <steve....@gmail.com> wrote:
> Andrew Plotkin wrote:
>> > It sounds really silly to me also, but in the manual, Graham urges
>> > people (particularly extension writers) not to use I6 code.
>>
>> No he doesn't.
>
> That's depressingly knee-jerk of you, oh well.

No it isn't.

Joe

Adam Thornton

unread,
May 26, 2006, 6:09:39 PM5/26/06
to
In article <slrne7eq2...@gate.notcharles.ca>,

Oh no you DI-INT!

Adam

B

unread,
May 26, 2006, 7:14:59 PM5/26/06
to
YES...really, I just want to know how to drop the whole, separate,
encapsulateed thing into the game...didn't mean to get involved in any
sort of debate...sorry for the misunderstanding to all...can anyone
just tell me...can I just drop this code in and make it work? That's
all I really want to know...honest : ) I7 is a godsend for me as a
writer/non programmer, I just would like to drop in something like the
play tetris routine and make it work...anybody have any tips on how to
do that?

Thanks,
B

ems...@mindspring.com

unread,
May 26, 2006, 7:31:41 PM5/26/06
to

B wrote:
> YES...really, I just want to know how to drop the whole, separate,
> encapsulateed thing into the game...didn't mean to get involved in any
> sort of debate...sorry for the misunderstanding to all...can anyone
> just tell me...can I just drop this code in and make it work? That's
> all I really want to know...honest : )

Sorry, I thought I did explain, but let me try again.

Yes, it is possible to drop this code into the game. I did so, and it
worked. I was able to be in non-Tetris mode, then start Tetris, then
resume normal IF-like play.

Now, as far as I can see, it is *not* to include the entirety of the I6
code at once, because the compiler gets hung up -- there's a limit on
I6 inclusions of 2K at a time. (See Ch. 19, "Longer extracts...") I
suspect this has more to do with the way that memory is set up within
the compiler than anything else, though of course I may be wrong.

The key here is *at a time*, though: there is no theoretical limit to
the *total* amount of raw I6 you include (other than the usual limits
about story file size). None of the individual routines in this code
run longer than 2K.

Therefore, you can make the inclusion work if you include it in pieces:
include a few routines, end the inclusion, include a few more routines,
etc., until you are done. I did this in 7 chunks, as it happens, though
you might be able to get away with fewer in fact -- but it doesn't
matter terribly much how many you use, so long as no piece is larger
than 2K.

Then I could make the tetris game begin by writing an I7 phrase to call
the I6 PlayTetris routine, which I posted earlier. But to repeat so
it's all in one place:

To play tetris:
(- PlayTetris(); -)

...and then you can put "play tetris" in your I7 file wherever you want
to initiate a game.

If you would like this portion of your source to be segmented off from
the rest so you don't have to look at/mess with it, you may want to do
this inclusion within an extension. But this is not required.

(I would just post the working code somewhere, but I am a little
reluctant to do that without zarf's permission; I'm not sure what
rights he wants to preserve here, as I didn't notice a license to reuse
or reprint the code on his site.)

Andrew Plotkin

unread,
May 26, 2006, 8:47:12 PM5/26/06
to
Here, ems...@mindspring.com <ems...@mindspring.com> wrote:
>
> (I would just post the working code somewhere, but I am a little
> reluctant to do that without zarf's permission

Please, post it.

--Z

--
"And Aholibamah bare Jeush, and Jaalam, and Korah: these were the borogoves..."
*

If the Bush administration hasn't thrown you in military prison without trial,
it's for one reason: they don't feel like it. Not because you're an American.

B

unread,
May 26, 2006, 10:10:35 PM5/26/06
to

Andrew Plotkin wrote:
> Here, ems...@mindspring.com <ems...@mindspring.com> wrote:
> >
> > (I would just post the working code somewhere, but I am a little
> > reluctant to do that without zarf's permission
>
> Please, post it.
>
Thank you all so much...I'm really excited about working with this, and
your generosity is so much appreciated. Looking forward to the
posting!

B

ems...@mindspring.com

unread,
May 26, 2006, 10:17:41 PM5/26/06
to

Andrew Plotkin wrote:
> Here, ems...@mindspring.com <ems...@mindspring.com> wrote:
> >
> > (I would just post the working code somewhere, but I am a little
> > reluctant to do that without zarf's permission
>
> Please, post it.

Mmkay:

http://emshort.home.mindspring.com/Tetris.txt

greg

unread,
May 27, 2006, 4:58:45 AM5/27/06
to
steve....@gmail.com wrote:

> It sounds really silly to me also, but in the manual, Graham urges
> people (particularly extension writers) not to use I6 code. It's not
> something he can directly control, so he puts it as a semi-polite
> request. -- My question is, "why?" -- and the answer is, I6 code is a
> chink in the NL pretense that Graham has cultivated.

Whether that's true or not, there could also be a
more pragmatic reason: he may regard the underlying
I6 layer as an implementation detail that could be
replaced by something else in a future version.
Any games that relied on embedded I6 code would
break then.

--
Greg

John W. Kennedy

unread,
May 27, 2006, 8:35:56 AM5/27/06
to

(- Include filename -)

But I don't know whether it would work.

B

unread,
May 27, 2006, 1:45:45 PM5/27/06
to
First of all, thank you for your patience...I'm definitely a little
over my head here, but I feel like I'm learning a lot.

Here are my last couple of questions on the subject:

1. I would like for the player, when they reach a score of 5, to be
given a secret message. I've been playing with this code block here
from the original code:


! Set the score and display the new value
[ TetSetScore newscore
ix;

tetScore = newscore;

ix = tetBannerPos + 9;
@set_cursor 15 ix;
print tetScore;
if (tetScore == 0)
print " ";

];

by adding to the end of it:

if (tetScore == 5)
print "secret message here";

This is not in and of itself enouh, as gameplay continues, it just
prints over the screen, and the player is not returned to the game
world, so I'm assuming I need to learn more. Also, I'm wondering if
there is a way to write this part in I7 style outside of the routine
itself, or if it needs to be written in the I6 code style.

2. I'd like when the someone loses a game for it to return to the game
world, instead of just starting another round of tetris. I think the
answer might be in tweaking this code block (?):

! Play a single game, and return when it's over. Return 1 if we want to
quit,
! and 0 if we want to play again.
[ TetGameLoop
piececlass
posx posy rot
piecelive dropping
kx ix;...

This way, if someone loses, they'd go back to the "game" ('in the case
of Emily's write up, back in the House of Old Arcade Games.

As always, thanks for the help, I'm really enjoying working with this.

Biagio

ems...@mindspring.com

unread,
May 27, 2006, 6:07:11 PM5/27/06
to

B wrote:
> First of all, thank you for your patience...I'm definitely a little
> over my head here, but I feel like I'm learning a lot.
>
> Here are my last couple of questions on the subject:

It is a little complex to explain how to fix these, so I have updated
the sample to do what you want, so you can see what I'm talking about.

http://emshort.home.mindspring.com/Tetris.txt

> by adding to the end of it:
>
> if (tetScore == 5)
> print "secret message here";
>
> This is not in and of itself enouh, as gameplay continues, it just
> prints over the screen, and the player is not returned to the game
> world, so I'm assuming I need to learn more.

You need to make three changes here (which you will see in the posted
source).

One is that you need to give the player time to read this message; I
did this by clearing the screen (so the message is not pasted over the
existed game space), printing the message, and then waiting for a space
key. That seemed safer than waiting for a single keystroke, given that
the player is likely to go on hitting keys and might accidentally clear
this important message without actually getting a chance to read it.
But if you prefer to allow the player to end the pause by hitting any
key, just remove the while loop from the SPACEPause routine.

The second change is that you have to tell the Tetris game loop to stop
after the maximum score is reached.

The third issue is that you probably want not == but >= ; otherwise, if
the player clears two lines at once and goes directly from a score of 4
to a score of 6, the message will never print.

Search for MAX_TETRIS_SCORE in the source to see where and how I have
implemented these changes.

Also, I'm wondering if
> there is a way to write this part in I7 style outside of the routine
> itself, or if it needs to be written in the I6 code style.

There are ways to call back to I7 from within I6, but I think in this
case it may be more trouble than it is worth. (I didn't bother.) The
chief reason to do so would be if you want to do something more than
printing a message, manipulating the I7 environment in some way.

> 2. I'd like when the someone loses a game for it to return to the game
> world, instead of just starting another round of tetris. I think the
> answer might be in tweaking this code block (?):
>
> ! Play a single game, and return when it's over. Return 1 if we want to
> quit,
> ! and 0 if we want to play again.
> [ TetGameLoop
> piececlass
> posx posy rot
> piecelive dropping
> kx ix;...
>
> This way, if someone loses, they'd go back to the "game" ('in the case
> of Emily's write up, back in the House of Old Arcade Games.

The comment tells you that when the player loses, TetGameLoop is
returning 0 to tell the outer function to start another one. We can
make it stop doing that by changing "return 0" to "return 1", which
says "quit now". I put an extra comment in the source where I did this.

steve....@gmail.com

unread,
May 27, 2006, 6:15:43 PM5/27/06
to
Emily Short wrote:
> [T]he real trick is usually to think of ways to

> make I6 functionality available from within I7 in a way that fits that
> paradigm naturally.

I have a sense that this is the art of I7 coding, or at least using the
I7 "paradigm" -- but what is that, and what is the art of this
translation? Surely it is not as simple as making a NL-sounding
statement which is in fact a function call. Do you have any general
comment on what you here call "the real trick"?

B

unread,
May 27, 2006, 7:20:57 PM5/27/06
to
First off, thank you so much for being generous with your time...I'm
learning much and am very excited about using these techniques.

I haven't been able to get the game to compile, getting the

"Translating the Source Failed" screen, where it explains that it
failed in the 2nd stage of the process. From pulling out code and
putting it back, the problem seems to stem from here:

Constant MAX_TETRIS_SCORE = 5;

! Set the score and display the new value
[ TetSetScore newscore
ix;

tetScore = newscore;

ix = tetBannerPos + 9;
@set_cursor 15 ix;
print tetScore;
if (tetScore == 0)
print " ";

if (tetScore >= MAX_TETRIS_SCORE)
{
@erase_window -1; ! clear the screen
print "^^When you reach ", MAX_TETRIS SCORE, " points,
the screen goes blank and a cryptic message appears across its face,
flashing in blue letters: THE OWLS ARE NOT WHAT THEY SEEM.^^";
print "Press SPACE to continue.";
SPACEPause();
}
];
-)

and specifically, from this part:

{
@erase_window -1; ! clear the screen
print "^^When you reach ", MAX_TETRIS SCORE, " points,
the screen goes blank and a cryptic message appears across its face,
flashing in blue letters: THE OWLS ARE NOT WHAT THEY SEEM.^^";
print "Press SPACE to continue.";
SPACEPause();
}

The message states that this could be a bug or an extension issue. Any
thoughts?

Thanks again,
Biagio

ems...@mindspring.com

unread,
May 27, 2006, 8:10:46 PM5/27/06
to

B wrote:
> First off, thank you so much for being generous with your time...I'm
> learning much and am very excited about using these techniques.
>
> I haven't been able to get the game to compile, getting the
>
> "Translating the Source Failed" screen, where it explains that it
> failed in the 2nd stage of the process. From pulling out code and
> putting it back, the problem seems to stem from here:

Argh, sorry. This is what I get for making a little unimportant
cosmetic change at the last minute without recompiling it...

The culprit is that

> print "^^When you reach ", MAX_TETRIS SCORE, " points,

lacks the underscore between TETRIS and SCORE. I've made the change and
reuploaded, but you can fix this yourself, too.

Sorry 'bout that.

steve....@gmail.com

unread,
May 27, 2006, 10:17:23 PM5/27/06
to

Oh yes it is.

ChicagoDave

unread,
May 28, 2006, 8:42:28 AM5/28/06
to
This is like standing in a forest and asking "What is a tree?"

It astounds me that so many people dislike your rhetoric and yet you
persist in believing that we're the crazy ones.

This whole thread revolves around a _hack_ of the z-machine. The
z-machine wasn't intended to have little letters move around the screen
in video game fashion. Therefore, neither Inform 6 nor 7 were meant to
write things like this. The reason it was successful in I6 was pure
luck. It _is_ a trick.

Comparing the tricks of I6 to the tricks yet to be accomplished in I7
maybe cute, but it not something one should use as a basis for any
argument for anything related to the craft of IF or the value of I7.

It's my profound wish and prayer that you tire of Interactive Fiction
quickly and move on to bore some other innocent news group.

David C.

na...@natecull.org

unread,
May 28, 2006, 9:49:52 AM5/28/06
to
>This whole thread revolves around a _hack_ of the z-machine. The
>z-machine wasn't intended to have little letters move around the screen
>in video game fashion. Therefore, neither Inform 6 nor 7 were meant to
>write things like this. The reason it was successful in I6 was pure
>luck. It _is_ a trick.

While that may be strictly true, it seems to me that the hallmark of a
successful system is that it can be extended in ways that the original
designers didn't intend. I'm not sure we should see 'hack' as a
pejorative. The Infocom designers didn't imagine an open hobbyist
community developing around their Z-machine technology, and yet here we
are. There's a lot of other ways we may want to extend IF beyond the
current I6/Z-machine model (like, for instance, adding list support,
dynamic allocation of objects, or various kinds of runtime
introspection of compile-time properties - not currently practical on
the Z-machine with its 64K RAM barrier, but given Glulx, not out of the
question). It would be nice if such extensions are able to be
implemented in ways that aren't considered 'breaking' I7.

John W. Kennedy

unread,
May 28, 2006, 10:04:13 AM5/28/06
to

I haven't looked at the Freefall source, but would have been possible to
write it if I6 hadn't allowed dropping into assembler?

Andrew Plotkin

unread,
May 28, 2006, 3:07:25 PM5/28/06
to
Here, John W. Kennedy <jwk...@attglobal.net> wrote:
>
> I haven't looked at the Freefall source, but would have been possible to
> write it if I6 hadn't allowed dropping into assembler?

Not at the time. Inform 5 (which is when I actually wrote the thing)
did not have any support for direct status-line manipulation, except
for dropping into assembly.

The 6/11 library has added support functions like MoveCursor(). You
might be able to do Freefall in I6 code, using those. (I'm not sure if
it has *all* the support functions needed.)

But of course that's exactly the same kind of support we're talking
about for I7: lower-level code encapsulated in an extension. Both I6
and I7 (unsurprisingly) share this design philosophy: they handle a
clearly-defined domain of tasks, and provide a syntax that is good
at that domain, while allowing you to bail down to a simpler level for
tasks outside that domain.

(For I6, the domain is the nuts and bolts of the Z-machine: objects,
properties, attributes, functions and function arguments, arrays and
global variables. I6 is naturally a lot like C. For I7, the domain is
a higher-level description of objects: relations, values, and
properties.)

--Z

--
"And Aholibamah bare Jeush, and Jaalam, and Korah: these were the borogoves..."
*

If the Bush administration hasn't subjected you to searches without a warrant,

it's for one reason: they don't feel like it. Not because you're innocent.

ChicagoDave

unread,
May 28, 2006, 9:49:01 PM5/28/06
to
The hallmark of a great system is the ability to use it for its
intended purpose without the need to extend. The entire point of
extending something means to create something new. Inform is a domain
specific language for a domain specific virtual machine. For the
options you've enumerated to exist, one would need to implement some
sort of IF platform that eventually compiled to a generalized platform
(machine language, JVM, .NET CLR). That's an entirely different product
and argument.

Now I will do a 180....

Now...that said, it's a great thing to argue for...I have been arguing
for just such a platform for years. But this has nothing to do with the
capabiilities of the z-machine or the capabilities of any compiler that
creates z-code.

Along with the things you've listed, I would love to see the ability to
extend an IF system so that it can use networking protocols, backend
databases, or anything that can be implemented in a generalized
language and then somehow leveraged by the IF platform.

Imagine if you could "drop down" to Java or C# within a language like
I7.....Now that would be interesting to see.

To look up a (text - word) in the dictionary:
(- DictionaryLookup(text); -)

Include (-

private string DictionaryLookup(string text)
{
SqlConnection conn = new
SqlConnection("server=localhost;database=dictionary;Trusted_Connection=true;");
SqlCommand cmd = new SqlCommand();
conn.Open();
cmd.Connection = conn;
cmd.Parameters.Add("@Word",text);
SqlDataReader reader = cmd.ExecuteReader("Select Definition From
Dictionary Where word = @word");
reader.Read();
string definition = reader("Definition");
reader.Close();
conn.Close();
return definition;
}

-)

I just opened up an IF program to an entire relational database of
dictionary references. This may be of no theoretical use to anyone in
particular, but in general, the ability to add relational data to IF
might lead to other products, like educational products or training
manuals. It could also enhance an authors ability to implement complex
relationships.

I suppose this crosses into "mud" territory a bit, but I still like the
idea of taking a platform like Inform 7 and giving it the extensibility
of a generalized platform.

David C.

Rioshin an'Harthen

unread,
May 29, 2006, 5:58:14 AM5/29/06
to
<steve....@gmail.com> wrote:
> I am being misread, intentionally and maliciously, foremost by Graham
> himself, whose ego knows no bounds, and whose rhetorical hijinx knows
> no limits when that ego is threatened. Other posters like you are happy
> to join in on the (seemingly) dominant side of the argument, without
> having anything of substance to say, just a bunch of angry "you're a
> jerk" garbage. I would say the same thing back to you, but I think in
> your case it's more incompetence than malice.
>
> In either case, I am not the one doing the misreading; it's quite the
> other way round.

Yeah right. You've gone out of your way to argue against anything,
intentionally misreading everything anyone has said, to suit your particular
preconcieved notions. And if someone has the audacity to argue against you,
you've done nothing but going into personal attacks against them. Hell,
reading your posts, you start arguing your prejudiced views with personal
attacks on anyone not of the same opinion as you.

So what's the charade, Steve? Why do you have to argue and descend into
personal attacks in your arguments? Like in talking about the paper "Natural
Language, Semantic Analysis and Interactive Fiction", you immediately
descended with wrath upon Graham's use of "At the time of writing, its user
base can be counted on the number of fingers I type with, which I may say is
fewer than ten".

If you want to argue your opinions, stay civil. Then you'll find others
being civil towards you. Don't go into personal attacks, or you'll find
others going into personal attacks on you. Be mature and not like the
pre-teen you currently act like.


James Cunningham

unread,
May 29, 2006, 12:29:28 PM5/29/06
to
On 2006-05-29 05:58:14 -0400, "Rioshin an'Harthen" <rhar...@hotmail.com> said:
>
> Yeah right. You've gone out of your way to argue against anything,
> intentionally misreading everything anyone has said, to suit your
> particular preconcieved notions. And if someone has the audacity to
> argue against you, you've done nothing but going into personal attacks
> against them. Hell, reading your posts, you start arguing your
> prejudiced views with personal attacks on anyone not of the same
> opinion as you.
>
> So what's the charade, Steve? Why do you have to argue and descend into
> personal attacks in your arguments? Like in talking about the paper
> "Natural Language, Semantic Analysis and Interactive Fiction", you
> immediately descended with wrath upon Graham's use of "At the time of
> writing, its user base can be counted on the number of fingers I type
> with, which I may say is fewer than ten".
>
> If you want to argue your opinions, stay civil. Then you'll find others
> being civil towards you. Don't go into personal attacks, or you'll find
> others going into personal attacks on you. Be mature and not like the
> pre-teen you currently act like.

C'mon, Rioshin! Let's cut li'l Stevie a break: he has shown an
inability to see anybody's stance but in the most dreadful and awful
and instulting of ways. It's become clear to me that this isn't his
fault; it's probably something he was born with. Genetic. Both
parents first cousins, or maybe siblings.

Take his argument here, for instance. Graham requests politely that
Inform 7 extensions be written with as little Inform 6 code as
possible. Instead of seeing any obvious and plausible reasons for this
- say, that keeping the use of I6 down makes the extension code more
understandable and maintainable by persons who only know I7 - he is
forced through a trick of poor breeding to assume the worst in Graham's
intentions.

Poor, poor Stevie. Let us pity him.

Best,
James

ChicagoDave

unread,
May 29, 2006, 12:43:04 PM5/29/06
to
Or maybe it's opposite day everyday where he comes from?

David C.

Graham Nelson

unread,
May 29, 2006, 2:38:54 PM5/29/06
to

Our styles of writing I7 - certainly mine, and I think Emily's too -
changed in a gradual but definite way as the project ran on. It was
never the case that we wrote I7 code in a kind of literal paraphrase of
I6: the text to set up basic spatial arrangements was always different
in character. ("The platinum pyramid is in the Dark Place", that sort
of thing.) Moreover, the ability to organise paragraphs of code to
one's own preferred arrangement (since there are very few restrictions
on the ordering of things in I7, unlike I6) does change one's style of
writing - or so I found. Then, too, the ability to give a
"pattern-matching" circumstance for rules - "kissing a woman in the
presence of a jealous man", say - cut out a good many more or less
routine if statements and loops.

On the other hand, in the early days the more procedural part of I7
coding - which I think is what Steve is really asking about: the part
instructing the computer to do something at run-time - did indeed tend
to look like I6 code in a paraphrase. It was really only when we began
routinely using tables, units, scenes, new relations and new rulebooks
that a feeling of arrival happened, if I can put it that way. Using I7
without these is like using the Unix shell without pipes and regular
expressions, or C without structures.

For instance, I think if one were implementing the mechanics of chess
pieces on a chessboard in I6 then there would probably be an array of
characters, manipulated by accessing array entries in loops, and so on.
Routines would be set up to guess who is winning, and so forth. This
would be a clean efficient design, very much the way it would be
handled in other programming languages. All of which could be imitated
in I7, but it would probably look a little clumsy and verbose there.

In I7 one might instead set up "chess piece" as a new kind of value
defined by a table, which gave suitable names, adjudication scores
(pawn = 1, bishop = 3, and so forth), current position - quoted in some
sort of algebraic notation, etc. One would then decide that Black is
winning if "the total adjudication score of untaken black pieces is
greater than the total adjudication score of untaken white pieces", or
something like that. Or to give a meaning to an adjective like "en
prise" - we might first define relations for verbs "to defend" and "to
threaten", as between pieces, and then say that a piece is en prise if
any piece threatens it. All of this could be imitated in I6, too, but
again it would look clumsy.

I'm not saying which approach is better. The second is more fun, but
the first might well be more efficient in running time. I chose this
example because it isn't very IF-like - otherwise the way that language
features in I7 are aimed at specific IF needs might cloud the issue.

I'd be interested to know if other people have found I7 different in
nature from I6. For those people who are experimenting with I7, has the
style of your writing changed over the month or so since it came out?

ChicagoDave

unread,
May 29, 2006, 4:52:05 PM5/29/06
to
There is no doubt that my own IF writing has dramatically changed. With
I6 I could carry on work in a game for a day or two, but at some point
I would have to resolve large framework issues from an OO perspective.
This would take me away from writing which would dampen my enthusiasm
for my works in progress.

With I7 I have had some small places where syntax has slowed me down,
but no matter what I have been able to continue to write my story
without much concern for OO or framework like issues. The speed alone
in which I have been able to develop entire regions of a story is
incredible.

That being said, I have yet to tackle conversation in my games. I've
done nearly everything else though. The burden of creating puzzles is
significantly eased by creating rules. And when I've found the need to
modify a scene or parts of a puzzle, it happens very fluidly, without
much concern for "larger" issues.

I have developed more IF "land" in the last month than I have in the
last 8 years. Granted I have kids and that's been the primary reason
for lack of progress, but being able to _write_ and be less concerned
with framework or OO issues keeps the fire burning. I have been having
fun writing in I7.

> Call Home
You pick up the pay phone and dial your home number. When your
answering machine answers you yell, "FUN!" and hang up.

David C.

John W. Kennedy

unread,
May 29, 2006, 10:58:04 PM5/29/06
to
Graham Nelson wrote:
> I'd be interested to know if other people have found I7 different in
> nature from I6. For those people who are experimenting with I7, has the
> style of your writing changed over the month or so since it came out?

So far, I've been concentrating on infrastructure (creating the map,
extending Emily's Basic Help Menus extension for dynamically activated
hints and sample transcripts, etc.), and things like that involve, on
the whole, the /least/ of the fundamental I7 changes, but I still find
I'm thinking differently. Mind, I've been programming for over 40 years,
in some 30 or 40 different languages, so I'm accustomed to what
linguists call "code shifting".

Nathan Ladd

unread,
May 29, 2006, 11:29:47 PM5/29/06
to
Graham Nelson wrote:
> I'd be interested to know if other people have found I7 different in
> nature from I6. For those people who are experimenting with I7, has the
> style of your writing changed over the month or so since it came out?

I haven't written anything of note in I6, but I have tried to. I'm not
a programmer by trade, but I know my way around code in several
languages. With I6, I could create simple programs but I just couldn't
wrap my head around how to create a cohesive *story* using a
programming language.

I7, on the other hand, feels natural. Instead of coding, or even
writing pseudo-code, it feels like I'm creating a requirements or
design document for a project, or that I'm writing an outline/overview
for a short story. I think in terms of what I want the piece to *have*
and *say*, instead of first trying to figure out the nuts-and-bolts of
what I want it to *do*.

Graham Nelson

unread,
May 30, 2006, 8:42:07 AM5/30/06
to
I come late to this particular party, I know, but there was another
reason: we hope to make Inform 7 cross-compile equally to Glulx as well
as the Z-machine, and the I6 code needed for these two targets is not
always the same - very similar, certainly, but not quite identical. By
using I6 only when necessary, we may make life easier for people moving
projects from Z to Glulx in midstream - as they may well do if they run
out of memory.

Neil Cerutti

unread,
May 30, 2006, 8:49:02 AM5/30/06
to
On 2006-05-29, Graham Nelson <gra...@gnelson.demon.co.uk> wrote:
> I'd be interested to know if other people have found I7
> different in nature from I6. For those people who are
> experimenting with I7, has the style of your writing changed
> over the month or so since it came out?

I haven't written very much I7 code yet (maybe 1500 words), but
the details of earlier versions of the Inform library are already
vacating my brain. The new ideas in Inform 7 are powerful enough
to replace them.

Here's one simple explanation for why:

Compare the following:

Define 0 SIZE_SMALL;
Define 1 SIZE_LARGE;
Property size LARGE;

[ CantFitThrough portal;
if (portal.size == SIZE_SMALL) {
objectloop (obj in player) {
if (obj.size == SIZE_LARGE) {
"You'll never get through carrying ", (a) obj, ".";
}
}
}
return false;
];

To this:

A thing is either large or small. Most things are large.

Before going through something that is small: If the player is
carrying something that is large: say "You'll never get through
carrying [a random large thing carried by the player]."; Stop the
action; end if.


The latter seems more profound than the former (not just in
appearance), despite being a close translation. (The missing
Inform 6 piece is that I need to arrange for CantFitThrough to be
called at the right time during action resolution).

The "larger than" relation is implicit in both versions. I ought
to be able to make that explicit in the Inform 7 version, but I
can't do it yet, from lack of experience.

--
Neil Cerutti

Inviato da X-Privat.Org - Registrazione gratuita http://www.x-privat.org/join.php

ems...@mindspring.com

unread,
May 30, 2006, 5:44:00 PM5/30/06
to

Graham Nelson wrote:
> Our styles of writing I7 - certainly mine, and I think Emily's too -
> changed in a gradual but definite way as the project ran on.

One temptation, especially in translating something from Inform 6 to
Inform 7, is to overuse properties, essentially trying to force I7 to
be as object-oriented as possible. There are certainly cases where
properties are still the right way to go, most often when we are
modeling something that really is intrinsic to a specific item (its
color, its shape, its cost in Yen, whatever). But in I6 one tends also
to use properties for output strings:

Object casket "lead-lined casket"
with
closed_name "leaden cube",
...

...or for relationships between objects:

Object Melissa "Melissa"
with
husband Bob,
...

...and in Inform 7 I find I almost always prefer to do these another
way. Relations are more elegant in Inform 7 than object properties
containing the same information (which tend to be comparatively verbose
to specify and clumsy to manipulate).

The output is a somewhat less obvious case, and there are a few points
in my example code where I do give I7 objects strings of text as
properties. But the more I played with Inform 7, the more I found I
preferred to use activities -- rules for printing the names of things
in specific situations, for instance -- because they make it easier to
add in special exceptions. This applies even to built-in Inform
properties. I6 had a raft of these things -- short_name, list_together,
plural, describe, when_open, when_closed, when_on, when_off, etc. --
and though it is sometimes desirable to set text properties for these,
I almost always prefer activities in practice (for printing the name,
grouping together, printing the plural name, and so on). (Though the
when_whatever properties are pretty much gone now: they did at one
point have a representation in I7, but we decided this was redundant
and they could go.)

The move away from tying everything to object properties has obvious
implications for the writing of extensions, as well: if I create an
extension using I6 code, I want to do so in a way that does not then
force the author to rely too heavily on properties where they aren't
appropriate.

To that end, I find that it's desirable to do exactly what the manual
suggests: keep the I6 to a minimum. Isolate the bits of procedural code
that really do have to be in Inform 6, wrap those in phrases, and write
as much as possible of the extension in Inform 7. There are a few
specific areas where I6 can still do things that are not possible in
I7: setting and unsetting properties for which there is no I7 name yet;
pausing, timing, or screen manipulation requiring opcodes (though I
tried to encapsulate the most obvious of these in Basic Screen
Effects); certain parsing tricks which require letter-by-letter rather
than word-by-word manipulation of the parse buffer. It is easy to write
an I7 routine to catch specific words and change them when a command is
read. It is less easy to write an I7 routine to, say, strip the
punctuation out of something. (Though here again I wound up writing an
extension, in the course of making my example games.) Likewise, storing
strings of input; I don't see how one would do anything like Jesse
McGrew's written-objects extension using native I7 abilities. They just
aren't there yet. Some of these areas I expect will be papered over
eventually -- in particular, I hope that there will be a better
handling of certain common parsing problems in I7, including some of
the choose-objectsy stuff people have talked about. Still, most of
those are things that can be encapsulated into a short routine and then
summoned from I7.

Where possible, I try to avoid using I6 for defining classes or objects
wholesale, representing large amounts of data (for instance in an
array), or writing routines that determine how specific classes will be
treated. The "Complex Listing" extension, for instance, uses a bare
minimum of Inform 6 to deal with object-specifications (in essence, to
allow the author to use my routine with phrases like "all the things in
the basket", "everything which can be seen by the player", etc) and
with the output stream (counting the number of letters in an output
phrase). For everything else, it sticks with an Inform 7 format for
data and processes, and this means that the author has the option of
using table continuations and activity rules to augment the extension's
behavior, without my having to write any special entry points.

Similarly, Basic Screen Effects allows the author to modify the status
line by creating a table that represents what the new status line
should look like. One could provide the same functionality in I6, but I
think the resulting code would necessarily bear less resemblance to the
intended output -- and a congruity between the format of the code and
the format of the output in this case is useful, because it helps the
author keep track of what is going on and detect potential bugs.

Perhaps a more general point is that I find my I7 coding most
successful when I approach a scenario first considering what the
fundamental concepts are. What are the basic relations between objects
I will need to model? What are the adjectives I need to define in order
to describe the situations that are going to arise? My most dramatic
experience with this was in writing the "Nickel and Dimed" example: I
struggled a bit to come up with the code to determine which bill or
coin should be offered next in an exchange, and I wrote many
unsuccessful drafts of the routine. I wasn't able to make real headway
until I backed off and defined adjectives to allow me to express ideas
like "the costliest bill carried by the player". Once I had the
terminology written, I found I was able to think of appropriate
criteria for the routine and express them easily in code.

This is a hugely different experience for me than writing I6 code,
where I often found (possibly due to my own deficiencies, I admit) that
I arrived at a solution by a process of successive refinement; when I
was done I would have found it difficult to articulate *exactly* what
the finished product did and why, and why the exceptions incorporated
were correct, and so on.

So I find that with I6 the task was often to break my idea down into
bits the computer understood (but which I possibly no longer followed
myself), whereas with I7 it is often more a matter of building up the
computer's understanding until it can follow my instructions (in
something approximating the way I think of those instructions myself).

Adam Thornton

unread,
May 30, 2006, 8:01:14 PM5/30/06
to
In article <1148920984.8...@g10g2000cwb.googlegroups.com>,

ChicagoDave <david.c...@gmail.com> wrote:
>Or maybe it's opposite day everyday where he comes from?

THE BRESLIN FROM BIZARRO-WORLD!

Adam

Kevin Forchione

unread,
May 30, 2006, 10:12:31 PM5/30/06
to
"Graham Nelson" <gra...@gnelson.demon.co.uk> wrote in message
news:1148992927.5...@j55g2000cwa.googlegroups.com...

Well, we can only hope that such cases will be the exception and not the
norm. Perhaps what is needed is a secondary language that fits in with the
aims of I7, but which can be used to express the computational aspects and
such more concisely, and which is I6/Glulx neutral so that it doesn't matter
what the target language might be?

--Kevin


Kevin Forchione

unread,
May 31, 2006, 4:09:41 AM5/31/06
to
<ems...@mindspring.com> wrote in message
news:1149025440.1...@j73g2000cwa.googlegroups.com...
<snip>

> This is a hugely different experience for me than writing I6 code,
> where I often found (possibly due to my own deficiencies, I admit) that
> I arrived at a solution by a process of successive refinement; when I
> was done I would have found it difficult to articulate *exactly* what
> the finished product did and why, and why the exceptions incorporated
> were correct, and so on.
>
> So I find that with I6 the task was often to break my idea down into
> bits the computer understood (but which I possibly no longer followed
> myself), whereas with I7 it is often more a matter of building up the
> computer's understanding until it can follow my instructions (in
> something approximating the way I think of those instructions myself).

An interesting assessment and quite revealing in the psychology of the
programmer. It is somewhat fascinating to me that, as I understand it, you
played a significant part in the development of the new language paradigm.
We could suggest, though doubtless modestly so, that the development of I7
was subtly and yet significantly shaped by your own mental predilections,
but again that would probably wander into unproductive territory. But rather
the approach of the paradigm is, to some small extent, meant to mirror, if
only darkly, the workings of the human mind rather than those of the
machine, is it not? That is my take on the application of the ideas of
professor Jackendoff et al. And so to me, the significance of I7's syntax is
not whether it is "natural" language, but whether it more closely
approximates the models of mind rather than machine.

Your explanation of your experiences with I6 suggest that you managed to
"make it work," though there again, you suggest that your ability to
"follow" the disperate components of the model you had created to do so. I
would suggest that that is a common experience for programmers dealing with
complex problems, and even more so once an object-oriented model has been
adopted and it then becomes necessary to follow the flow of "messages"
passing between objects.

But the I7 experience, as you say, appears to be one of "building up" -- of
encapsulating complex layers of instruction within abstractions that appear
to produce the effect of summarization: a kind of TNG "make it so" effect.
We understand what it is that we want done, and using the highly abstract
language of I7 we are able to express the idea at a level of detail that is
more comfortable to a non-technical mind. Others have no doubt pointed out
the limitations and pitfalls of this high-level of abstraction, but to the
degree that the mechanism is extensible, then quite complex problems can be
addressed and comprehended by authors without having to resort to delving
"beneath the hood", into the bowels of the I6 engine where the captain's
commands are turned into thrusters and warp drives. So long as the engineers
understand what the captain means, and the captain doesn't attempt time
travel, we are all a happy crew. What's more, it is more likely that the
captain (our author) is more likely to feel a congruence between the model
in his mind and the instructions he has delivered, trusting that his "make
it so" will be appropriately and adequately transformed into actions that
deliver his wishes.

What is more, the mechanism for supporting this level of abstraction is an
integral part of the I7 library, while for I6 I suspect that in many
instances the supporting mechanisms for each development had to be built by
hand, or if not, then tweaked to some degree by the author who must then
descend into the bowels of the machine (or at least the parser/command
execution process) in order to ensure a more or less flawless integration.
My limited understanding of I7 would suggest that there is much less of this
necessity, because the mechanism of I7 itself is not being overridden by the
author, but rather instructed. In other words, the author's programming
statements are fed into the process as data and operated upon by the I7
mechanism (rule-based et al.)

These are just my meandering suspicions about the differences between the
two experiences. Much less succinctly stated than your own, but I think we
are in agreement.

--Kevin


greg

unread,
May 31, 2006, 6:39:58 AM5/31/06
to
<ems...@mindspring.com> wrote in message

> So I find that with I6 the task was often to break my idea down into
> bits the computer understood (but which I possibly no longer followed
> myself), whereas with I7 it is often more a matter of building up the
> computer's understanding until it can follow my instructions (in
> something approximating the way I think of those instructions myself).

Is this really much different from what one does in a
conventional programming language? I.e. building up
functions and data structures to represent higher
levels of abstraction, until one has a set of concepts
that can be put together in an understandable way to
solve the problem.

--
Greg

ems...@mindspring.com

unread,
May 31, 2006, 1:50:39 PM5/31/06
to

Well, two things. One is that I think I7 has considerably more power to
create abstractions than I6 did; the other is that I find myself more
encouraged to think about the process in those terms.

So maybe it isn't in fact as different as it seems to me, but the
subjective experiences are quite distinct.

greg

unread,
Jun 1, 2006, 11:08:27 PM6/1/06
to
Kevin Forchione wrote:
> Perhaps what is needed is a secondary language that fits in with the
> aims of I7, but which can be used to express the computational aspects and
> such more concisely,

ZIL!

--
Greg

greg

unread,
Jun 1, 2006, 11:30:57 PM6/1/06
to
ems...@mindspring.com wrote:

> Well, two things. One is that I think I7 has considerably more power to
> create abstractions than I6 did; the other is that I find myself more
> encouraged to think about the process in those terms.

But how much of that is due to the NL flavour, and
how much that I6 was not a particularly well-designed
programming language for expressing abstractions?

In other words, maybe you're just feeling the relief
that you get when you stop banging your head on a
brick wall. :-)

--
Greg

ems...@mindspring.com

unread,
Jun 3, 2006, 7:38:11 AM6/3/06
to

greg wrote:
> ems...@mindspring.com wrote:
>
> > Well, two things. One is that I think I7 has considerably more power to
> > create abstractions than I6 did; the other is that I find myself more
> > encouraged to think about the process in those terms.
>
> But how much of that is due to the NL flavour, and
> how much that I6 was not a particularly well-designed
> programming language for expressing abstractions?

I think it's a little of each. But I suppose my experience of
programming languages is sufficiently narrow that I can't give an
objective answer.

0 new messages