Am I really the only person who doesn't get I7

Sorry to disappoint. I don’t hate Perl. To me Perl is basically Javascript on steroids for the UNIX shell programmer. Since I have spent some time developing on a LAMP stack, I have a passing understanding of PHP and Perl. Remember, PHP started life as a set of Perl scripts. Also the “P” in LAMP is now also understood to be PHP/Perl/Python.

Larry Wall, Perl’s creator, has two slogans which I really like. TMTOWTDI – There’s more than one way to do it. The second is – easy things should be easy and hard things should be possible. If you know C, C++ or C sharp, then you have the basic feel for Perl. It is a procedural language. It uses brace delimited blocks. It has control structures. It uses subroutines (CPAN is awesome).

It is true that the language supports procedural, object-oriented, and functional styles. Perl doesn’t care which you use or that you jumble them up. This must make implementing Perl a real hair-pulling event. I think somewhere in the Camel Book it says approximately – Perl is a language for getting things done. That is why writing Perl programs is not a hair-pulling event. The language neither forces you into any one style nor does it does it force you to mix styles.

I remember reading some interview with Larry Wall. He made the point that in today’s world the programmer is the most expensive part of software development. So the idea is to make it fast simple and easy for the programmer to get the job done.

That brings me back to a point I made earlier. The story teller should be the focus. I don’t care that I7 supports several different paradigms. My complaint is it forces the story teller to mix paradigms. My recent questions about conditionals (If statements) really points that out. Nesting requires indentation by tabs. It uses a kind-of-block structure that doesn’t have matching begin and end symbols. I7 does not require these structures in other if-statements. In fact it has hidden in one its error messages the statement that I7 regards if as less important than repeat. In procedural languages they are usually on an equal footing. Perhaps, this unusual view deserves more than passing mention in an obscure error message.

Like you I find the rule book structure to be intriguing. Personally, I would like to be able to create “objects” which are completely defined by their innate characteristics and behaviors. As a story teller I would then have the characters, locations and scenery I need. Hopefully, I will learn how to do that along the way.

It is the diversity of the community which keeps a language alive and developing. I hope you see my comments as constructive. I certainly intend them that way. I would like easy things to be easy. The point of I7 should be to get stories told. There is no doubt I just called your baby ugly. You resisted the all to natural desire to order me out of your house. Thank you.

Have you tried any other authoring systems? There are many and they all take more or less different approaches. I don’t think anyone has claimed that Inform would be the best fit for everyone.

That is not true - in fact, at compile time Inform converts tab-indented statements internally into begin…end blocks. If I remember correctly the conditional thread ended with someone suggesting to use the more readable (YMMV) tab-indented form, but that doesn’t mean you couldn’t use begin…end blocks just as well.

This is news to me. Which error message is that?

As for where the error message is about ifs, please look at my first post in this thread.

I think a little bit later you will see other posts about forcing indentation.

Hope this helps.

Ok, if you’re talking about “the ‘repeat’ is too important a phrase to be put at the end of a simple ‘if’ like this”, you’re reading too much into it. It’s not saying that repeat phrases are more important than conditional phrases in general. It’s saying that in this particular example the repeat phrase is too complex for the conditional phrase which is used in its simplified form (with a comma.) The reverse is also true: you can’t use full conditional phrases at the end of a simple repeat phrase.

As for the forced indentation, I’m not seeing it; people are suggesting using the tab-indented form, but no-one is saying that you can’t do it with begin…end blocks (and even if I missed the part where they said that, they were mistaken). The orignal example works fine using begin…end blocks:

Every Turn when the player is in the Forest: say "fear is [the fear of the Fruzzle]."; If the fear of the Fruzzle > 5 begin; Say "The Fruzzle has become quite agitated. It stands on it's back legs, with it's fur on end. It is now hissing and showing it's formidable fangs."; else if the fear of the Fruzzle > 3; Say "The Fruzzle begins to sway from side to side. It makes a funny noise that sounds like a warning."; Increment fear of the Fruzzle; end if.

1 Like

Well, as dannii said, it’s about letting the player interact with a world model, and there’s necessarily a certain tradeoff here. The amount of work you have to do is going to be something like the complexity of your world times the freedom the player has to interact with it. One limiting case is books (aka static fiction, read-only fiction, etc.); the author can make the world as complex as she likes, because the reader can only read what’s on the page. Henry James could write about all sorts of psychological and social complexities (in part) because he didn’t have to make up a lot of stuff about what would have happened if his reader had decided to have Isabel Archer marry [fine, no spoilers] instead. On the other hand, take something like Nethack; you can wander around freely and do all sorts of things, and the world isn’t that much more complex than hitting a bunch of things with weapons or spells or wands or whathaveyou.

In IF, if you’re going to have freeform input, you’re going to need some constraint on the things people can do. Hence things like “go north” or “touch the stone”; you can allow different kinds of commands, but there’s going to have to be some constraint (and some way of letting the player know that you can do that), and you’re going to have to deal with a fairly constrained world model. The challenge is partly in making stories that can be told in this kind of world model, through relatively constrained input from the player. On the other hand, Choose Your Own Adventures (or choice-based narratives or whatever) let you write all kinds of worlds and allow all kinds of actions, because you’re sharply restraining which actions the player can actually take. You can allow “Marry Madame Merle” as a choice at a particular juncture without having to allow the player to try to marry Madame Merle at any other time, or to implement a sequence of actions that lead up to marrying her, etc. There are some IF innovations that allow for more narrativy kinds of interactions without going all the way to CYOA; keyword interfaces, various conversation structures (multiple-choice like Best of Three, keyword-based like the conversations in Blue Lacuna and Walker and Silhouette, deeply implemented topics like Galatea). Though you’ll probably want to look into extensions if you’re interested in those.

I’m not a programmer and don’t really understand a lot of the things you’re saying about algorithms etc., but it seems to me important to understand that I7 is particularly designed for allowing turn-based text input interaction with certain kinds of world models. Given that there’s a lot of structure that you want in there, or available as a default (I think it should be easier to change than it sometimes is, but that’s another story). Expressing any algorithm with a small set of instructions is secondary to that. The, as I understand it, generally sad history of games written in homebrew systems bears this out.

All this said, from what I’ve heard it sounds like TADS3 might be more your cup of tea; it’s more object-oriented and I think more programmery in many ways. This comparison of TADS3 to Inform is a good overview, as I understand it. (TADS3 isn’t very Mac-friendly, though, so I’ve never tried it out.)

(The first part of my post was ninja’d by Juhana, but here it goes anyway):

I think the message you got:

doesn’t mean that “repeat” is more important than “if”; it’s just saying that, if you’re going to have nested conditions or loops you need to explicitly delimit them (with begin/end or tabs or something). Note that ‘if’ is on a par with “repeat” as one of the structural phrases that is not allowed within the abbreviated form of other structural phrases.

Although it doesn’t prevent editing someone else’s Perl program from being hair-pulling… :laughing:

Okay, I get why TMTOWTDI works for you in Perl while I7 is giving you a headache. But as others have pointed out the nesting alternatives in I7, it looks like the real problem is with I7’s documentation - there seems to be a general agreement that it’s wretched, and it’s well illustrated by the frequency of this “well, actually, Inform does do that” sort of comment. Where would Perl be without “Learning Perl” and “Programming Perl”? As a matter of fact, I didn’t get comfortable with Perl until I’d read a third book - Joseph Hall’s “Effective Perl Programming.”

If you consider the compiler’s messages to be part of the documentation, I think it begins to look even more like the language is fine, but the docs need an overhaul.

I’ve been thinking about the indentation issue lately too, and wondering about alternatives. I’d be interested to hear if you had anything to add to this thread:

I certainly appreciate the desire to improve I7 - it’s got a ways to go before it lives up to its promise. But what is it about TADS that makes you think I7 will ever work out better for you?

Oh, wow! I have had so many wonderful answers. It is really nice to be on a forum where NuBees don’t get flamed for asking their brain-dead questions. The responses are all well considered. I am sure I can’t get everything into a single reply. I am just going to pick something to get started. In no particular order, here we go.

I believe you are taking your life into your own hands when you try to work in another person’s Perl code. :open_mouth: This problem is generally addressed by programming style. Even though the language imposes no limits, programmers will. That fits neatly into the easy things should be easy idea. If you write code for a living, you can count on some unknown programmer in the unspecified future making modifications to your work. Since there are big bucks on the line, the simpler and more straight forward your code the better.

Perl is as much a creature of its era as it is a powerful tool. I think the first pieces were done around about 85 or so. At the time we were still looking for the single language that could do everything. What we seemed to have settled on is task-specific languages. Like any craftsman, our tool box contains more than a single tool. It has several hammers for things that respond well to whacking. Several cutting implements that let us shear or shave. The same is true for the programmer. If we need to define persistent data stores, we use a data definition language (DDL) that is specific to the capabilities of the store. We pick other languages for other problems. I love spreadsheets, but they have a specific niche.

At its fundamental level a program transforms an input string (which may be persistent) into an output string (which may be persistent). The set of input and output strings needs to be closed. The program defines a closed and hopefully small set of transformations. In effect every program is an artificial grammar. I guess that’s why provability versus testability is a hot topic

I am sorry. I can’t find the constructs of story telling in traditional programming languages. I did take a look at TADS. What I saw was programming structures getting in the way of story telling structures. When I looked at I7 I didn’t see that problem.

The link to the comparison between the two languages was perfect for me. I don’t know either language well enough to make the points the author did. I came away with my basic reaction intact. I learned a bunch besides.

I took quick look at the if thread. Its going to take me a while to catch up to where you are. So let me address the responses in this thread before I get started on the other one.

Hmm, okay. When you said

…and tied that in with syntax-level comments about Inform, I think many of us (myself included) understood that as a preference for an OO language, of which there are already several.

But now it seems like you’re asking for something else entirely. So I’m curious: in your ideal language, what would you primarily spend your time defining, and how would you express it?

Good one! :laughing: It brings up an important point about I7 though: One of my very first reactions upon seeing some I7 code was that it was really easily readable. Deceptively so, in fact, because it’s not obvious in many cases that a particular phrasing will work when a similar-looking one will not. But after you get it right, those that come after can tell what you’re trying to do much more quickly than they would in most other languages.

It has taken me a while to put together the examples that show why there are problems with the If. I going to spread them accross several posts.

Here goes the first example. This is a working nested if. It uses colons and no tabs to manage the nesting. It translates correctly and executes correctly. Just like you said it would.

The Fruzzle is an animal.

The description of the Fruzzle is "An animal about the size of a big cat. It is covered in soft lavender fur. It has a long pointed muzzle. The dark band of fur across it’s eyes makes it look like it is wearing a mask. It’s long furry tail is covered in pumpkin colored splotches. "

The Fruzzle has a number called fear.
The fear of the Fruzzle is 0.
The large nut is a thing. “A heavy brown nut about the size of a couple of golf balls”

The forest is a room.

The Fruzzle is in the Forest.

Every Turn when the player is in the Forest:
say “fear is [the fear of the Fruzzle].”;
Increment fear of the Fruzzle;
If the fear of the Fruzzle > 6:
Say “The Fruzzle shreiks at you as it throws a large nut at you. It has remarkably good aim. The bruise should fade in a few days.”;
Now the large nut is in the forest;
else If the fear of the Fruzzle > 5:
Say “The Fruzzle has become quite agitated. It stands on it’s back legs, with it’s fur on end. It is now hissing and showing it’s formidable fangs.”;
else If the fear of the Fruzzle > 3:
Say “The Fruzzle begins to sway from side to side. It makes a funny noise that sounds like a warning.”;
else:
Say “The Fruzzle sits quietly. It seems to be curious about you.”;
Say “Somehow you find that vaguely uncomfortable.”

Here goes the second example. I took the working nested if and replaced the colons with commas. This made it syntactically incorrect. I got error messages. The second error message states that I can use the colon but I must use tab indentation.

So the reason I believe you have to have tabs with colons is the error message says so.

The Fruzzle is an animal.

The description of the Fruzzle is "An animal about the size of a big cat. It is covered in soft lavender fur. It has a long pointed muzzle. The dark band of fur across it’s eyes makes it look like it is wearing a mask. It’s long furry tail is covered in pumpkin colored splotches. "

The Fruzzle has a number called fear.
The fear of the Fruzzle is 0.
The large nut is a thing. “A heavy brown nut about the size of a couple of golf balls”

The forest is a room.

The Fruzzle is in the Forest.

Every Turn when the player is in the Forest:
say “fear is [the fear of the Fruzzle].”;
Increment fear of the Fruzzle;
If the fear of the Fruzzle > 6,
Say “The Fruzzle shreiks at you as it throws a large nut at you. It has remarkably good aim. The bruise should fade in a few days.”;
Now the large nut is in the forest;
else If the fear of the Fruzzle > 5,
Say “The Fruzzle has become quite agitated. It stands on it’s back legs, with it’s fur on end. It is now hissing and showing it’s formidable fangs.”;
else If the fear of the Fruzzle > 3,
Say “The Fruzzle begins to sway from side to side. It makes a funny noise that sounds like a warning.”;
else:
Say “The Fruzzle sits quietly. It seems to be curious about you.”;
Say “Somehow you find that vaguely uncomfortable.”

Translating the Source

This is the report produced by Inform 7 (build 6E72) on its most recent run through:
Problem. The rule or phrase definition ‘Every Turn when the player is in the Forest’ seems to use both ways of grouping phrases together into ‘if’, ‘repeat’ and ‘while’ blocks at once. Inform allows two alternative forms, but they cannot be mixed in the same definition.
One way is to end the ‘if’, ‘repeat’ or ‘while’ phrases with a ‘begin’, and then to match that with an ‘end if’ or similar. (‘Otherwise’ or ‘otherwise if’ clauses are phrases like any other, and end with semicolons in this case.) You use this begin/end form here, for instance - ‘else If the fear of the Fruzzle > 5, Say “The Fruzzle has become quite agita […] and showing it’s formidable fangs.”’ .
The other way is to end with a colon ‘:’ and then indent the subsequent phrases underneath, using tabs. (Note that any ‘otherwise’ or ‘otherwise if’ clauses also have to end with colons in this case.) You use this indented form here - ‘else’ .

Here is the third example. In this example I delimited blocks using colon. For if’s that are usually understood as not having a block, I used a comma. What I get is an error message about mixing begin and colon notation. I am not too sure that is error message is particularly helpful.

The Fruzzle is an animal.

The description of the Fruzzle is "An animal about the size of a big cat. It is covered in soft lavender fur. It has a long pointed muzzle. The dark band of fur across it’s eyes makes it look like it is wearing a mask. It’s long furry tail is covered in pumpkin colored splotches. "

The Fruzzle has a number called fear.
The fear of the Fruzzle is 0.
The large nut is a thing. “A heavy brown nut about the size of a couple of golf balls”

The forest is a room.

The Fruzzle is in the Forest.

Every Turn when the player is in the Forest:
say “fear is [the fear of the Fruzzle].”;
Increment fear of the Fruzzle;
If the fear of the Fruzzle > 6:
Say “The Fruzzle shreiks at you as it throws a large nut at you. It has remarkably good aim. The bruise should fade in a few days.”;
Now the large nut is in the forest;
else If the fear of the Fruzzle > 5,
Say “The Fruzzle has become quite agitated. It stands on it’s back legs, with it’s fur on end. It is now hissing and showing it’s formidable fangs.”;
else If the fear of the Fruzzle > 3,
Say “The Fruzzle begins to sway from side to side. It makes a funny noise that sounds like a warning.”;
else:
Say “The Fruzzle sits quietly. It seems to be curious about you.”;
Say “Somehow you find that vaguely uncomfortable.”

Translating the Source

This is the report produced by Inform 7 (build 6E72) on its most recent run through:
Problem. The rule or phrase definition ‘Every Turn when the player is in the Forest’ seems to use both ways of grouping phrases together into ‘if’, ‘repeat’ and ‘while’ blocks at once. Inform allows two alternative forms, but they cannot be mixed in the same definition.
One way is to end the ‘if’, ‘repeat’ or ‘while’ phrases with a ‘begin’, and then to match that with an ‘end if’ or similar. (‘Otherwise’ or ‘otherwise if’ clauses are phrases like any other, and end with semicolons in this case.) You use this begin/end form here, for instance - ‘else If the fear of the Fruzzle > 5, Say “The Fruzzle has become quite agita […] and showing it’s formidable fangs.”’ .
The other way is to end with a colon ‘:’ and then indent the subsequent phrases underneath, using tabs. (Note that any ‘otherwise’ or ‘otherwise if’ clauses also have to end with colons in this case.) You use this indented form here - ‘If the fear of the Fruzzle > 6’ .

Here is the fourth example. In this one I use begin notation for the blocks. I still use commas for ifs that are normally not understood as having blocks. This time the error messages are consistent. They now let us know that if you use block notion anywhere in an if structure you must use it everywhere. I think this is the first time the rule is ever spelled out.

The Fruzzle is an animal.

The description of the Fruzzle is "An animal about the size of a big cat. It is covered in soft lavender fur. It has a long pointed muzzle. The dark band of fur across it’s eyes makes it look like it is wearing a mask. It’s long furry tail is covered in pumpkin colored splotches. "

The Fruzzle has a number called fear.
The fear of the Fruzzle is 0.
The large nut is a thing. “A heavy brown nut about the size of a couple of golf balls”

The forest is a room.

The Fruzzle is in the Forest.

Every Turn when the player is in the Forest:
say “fear is [the fear of the Fruzzle].”;
Increment fear of the Fruzzle;
If the fear of the Fruzzle > 6 begin;
Say “The Fruzzle shreiks at you as it throws a large nut at you. It has remarkably good aim. The bruise should fade in a few days.”;
Now the large nut is in the forest;
else If the fear of the Fruzzle > 5,
Say “The Fruzzle has become quite agitated. It stands on it’s back legs, with it’s fur on end. It is now hissing and showing it’s formidable fangs.”;
else If the fear of the Fruzzle > 3,
Say “The Fruzzle begins to sway from side to side. It makes a funny noise that sounds like a warning.”;
else begin;
Say “The Fruzzle sits quietly. It seems to be curious about you.”;
Say “Somehow you find that vaguely uncomfortable.”

Translating the Source
This is the report produced by Inform 7 (build 6E72) on its most recent run through:
Problem. You wrote ‘else If the fear of the Fruzzle > 5, Say “The Fruzzle has become quite agita […] and showing it’s formidable fangs.”’ : but an ‘otherwise if’ (or ‘else if’) which uses a comma to give a single consequence can only be used immediately following an equally simple ‘if’, and can’t be used in the middle of a begin … end if block.
To provide alternatives within such a block, use ‘otherwise if … condition…;’ (in the same way that one would use ‘otherwise;’ without a condition).
See the manual: 11.8 > Otherwise
Problem. You wrote ‘else If the fear of the Fruzzle > 3, Say “The Fruzzle begins to sway from si […] noise that sounds like a warning.”’ : again, an ‘otherwise if’ (or ‘else if’) which uses a comma to give a single consequence can only be used immediately following an equally simple ‘if’.
Problem. You wrote ‘else begin’ : but inside an ‘if … begin’/‘end if’ an ‘otherwise’ (or ‘else’) must be a single word phrase, so it appears that the two ways to use ‘otherwise’ have been mixed up. It can either be used as ‘if … begin; …; otherwise; …; end if’, or as ‘if …, …; otherwise …;’.
Problem. You wrote ‘If the fear of the Fruzzle > 6 begin’ : but the definition of the phrase ended with no matching ‘end’ for this ‘begin’, bearing in mind that every begin must have a matching end, and that the one most recently begun must be the one first to end. For instance, ‘if … begin’ must have a matching ‘end if’.
See the manual: 11.7 > Begin and end

Here is the last example. I replace all of the colons with begin; I would expect that I should get a clean translation and execution like I did with colon notation. I don’t. Now I get errors telling me that begin; is inappropriate.

To me this says that a legitimate block structure suddenly become inappropriate simply by changing the symbol used as a block delimiter. That just doesn’t make any sense to me. Trying to sort out this syntax error from the error messages, just stumps me.

The Fruzzle is an animal.

The description of the Fruzzle is "An animal about the size of a big cat. It is covered in soft lavender fur. It has a long pointed muzzle. The dark band of fur across it’s eyes makes it look like it is wearing a mask. It’s long furry tail is covered in pumpkin colored splotches. "

The Fruzzle has a number called fear.
The fear of the Fruzzle is 0.
The large nut is a thing. “A heavy brown nut about the size of a couple of golf balls”

The forest is a room.

The Fruzzle is in the Forest.

Every Turn when the player is in the Forest:
say “fear is [the fear of the Fruzzle].”;
Increment fear of the Fruzzle;
If the fear of the Fruzzle > 6 begin;
Say “The Fruzzle shreiks at you as it throws a large nut at you. It has remarkably good aim. The bruise should fade in a few days.”;
Now the large nut is in the forest;
else If the fear of the Fruzzle > 5 begin;
Say “The Fruzzle has become quite agitated. It stands on it’s back legs, with it’s fur on end. It is now hissing and showing it’s formidable fangs.”;
else If the fear of the Fruzzle > 3 begin;
Say “The Fruzzle begins to sway from side to side. It makes a funny noise that sounds like a warning.”;
else begin;
Say “The Fruzzle sits quietly. It seems to be curious about you.”;
Say “Somehow you find that vaguely uncomfortable.”

Translating the Source
This is the report produced by Inform 7 (build 6E72) on its most recent run through:
Problem. You wrote ‘else If the fear of the Fruzzle > 5 begin’ : but an ‘otherwise if’ (or ‘else if’) should not take a ‘begin’, but acts as a divider within a begin/end block all by itself.
See the manual: 11.8 > Otherwise
Problem. You wrote ‘else If the fear of the Fruzzle > 3 begin’ : again, an ‘otherwise if’ (or ‘else if’) should not take a ‘begin’.
Problem. You wrote ‘else begin’ : but inside an ‘if … begin’/‘end if’ an ‘otherwise’ (or ‘else’) must be a single word phrase, so it appears that the two ways to use ‘otherwise’ have been mixed up. It can either be used as ‘if … begin; …; otherwise; …; end if’, or as ‘if …, …; otherwise …;’.
Problem. You wrote ‘If the fear of the Fruzzle > 6 begin’ : but the definition of the phrase ended with no matching ‘end’ for this ‘begin’, bearing in mind that every begin must have a matching end, and that the one most recently begun must be the one first to end. For instance, ‘if … begin’ must have a matching ‘end if’.
See the manual: 11.7 > Begin and end

I love i7. I think there are still a few stuffs to straighten but it’s a good metalanguage.
IMO the i6 level is what is wrong with I7, because of the structural limitation (no floating numbers, ridiculously awkward arrays, etc…).
For example, i developed an extension that is able to construct and initialize objects from indexed texts (a kind of small syntactic parser, build with a metalanguage, I7, manipulating a language that is interpreted/compiled for a virtual machine; I6. yep). It takes me around 1 sec to build one of those objects (because of the 7 or so regular expressions it uses). I also tried to implement an ascii animation reader. I cadenced it at 10 fps, but unfortunately it takes glux more than one second to read a 100*100 characters long frame. Meanwhile in the same time i can generate a 5000 pages long pdf with java.

So why not adapt i7 for java ? Why stick to a to a technology that date from the 70s ? I read somewhere the reason was that it “theoretically” enables zmachine games to be played on old nokia phones or something. But what kind of people use these devices ? Everyone has a smartphone nowadays !
Seriously, replace i6 with java. I tend to think that i6 now limits i7. Interactive fictions haven’t really change since the first ones were created. But what if someone wants to implement a semantic engine or a syntactic parser based on generative grammar ? You’ll probably need an efficient I/O system as well as various and robust memory structures. How are you supposed to do that when the functions you write must handle the way information is stored in memory ?

I am not sure if I am derailing or re-railing this thread by posting this, but here goes.

In response to: “Am I really the only person who doesn’t get I7”

No. I don’t get it, either. While I would never call myself a programmer, I do a lot of scripting at work and have written several small-to-medium sized VB apps. I am familiar with code, and I am familiar with content, and the way I feel right now at the moment is, the two should remain separate. I’ll admit that the majority of what I’ve seen of I7 code has come from this forum, but … and this is kind of hard to explain, but it makes more sense to me to write “if x = y then score = score + 1” than to write it out in natural English. I’d be curious to know if any other people with programming experience feel the same way. Or perhaps it’s just me. Or perhaps I haven’t given I7 a fair shake yet.

It seems to me that troubleshooting something in I7 would be much more difficult than I6.

I’ll give you an example. I’m the type of guy who prefers over . I know what will do every time, whereas may/could do different things in different browsers.

Re the fourth Fruzzle example:

Your code can be made to compile (correctly) by removing three "begin"s, and adding an “end if”.

Every Turn when the player is in the Forest:
say "fear is [the fear of the Fruzzle].";
Increment fear of the Fruzzle;
If the fear of the Fruzzle > 6 begin;
Say "The Fruzzle shreiks at you as it throws a large nut at you. It has remarkably good aim. The bruise should fade in a few days.";
Now the large nut is in the forest;
else If the fear of the Fruzzle > 5;
Say "The Fruzzle has become quite agitated. It stands on it's back legs, with it's fur on end. It is now hissing and showing it's formidable fangs.";
else If the fear of the Fruzzle > 3;
Say "The Fruzzle begins to sway from side to side. It makes a funny noise that sounds like a warning.";
else;
Say "The Fruzzle sits quietly. It seems to be curious about you.";
Say "Somehow you find that vaguely uncomfortable.";
end if;

I more or less followed the error messages here. The first two say “this thing does not take a ‘begin’”, so I removed “begin” and that was the correct action. The third is more obscure, but removing “begin” was still the right thing to do. The fourth error message says there’s no “end” for the “if…begin”.

I don’t know if that’s the code you want to write, but it’s the translation of your example into begin/end syntax.

I feel the same way. I’ve dabbled in Inform 7 over the last couple years and never gotten very far with it. Perhaps it’s necessary to overcome the mental bias toward regarding it as natural language, instead of an extremely verbose programming language. I found Ron’s document useful in that regard, as it spelled out equivalences between more traditional syntax structures.

But I’m not that interested in what’s left over once the natural language veil is lifted. Debugging seems to become exponentially harder past a certain amount of source text, owing to a variety of factors - lack of encapsulation, preponderance of global variables, one file limitation. The available extensions are nice but official support has been erratic in the past.

TADS is cool. It has its faults but I find I prefer them to Inform’s. Its infrastructure is lacking - no web interpreters, no cross-platform IDE - but that situation won’t ever change if people stop making TADS games. Right now I am happy writing out the content in transcript form and doing the implementation in a more familiar way. Mixing the two has a certain novelty value but the fun factor is lost on me.

I don’t know that I “get” I7, but you get accustomed to it, sort of like living with a cat. You may never fully understand why the cat feels the need to run growling through the apartment, hair on end, claws out, just at the moment there’s a jump scare on Amnesia, but after awhile, you sort of get accustomed to its moods and you both can coexist in mutual respect.

But not everyone is a cat person, so it’s worth shopping around. (I looked at TADS 3, and edged slowly away. It’s not the syntax or rules so much as the Cliffs-of-Despair-like learning curve. I just don’t want to spend that kind of time up front. I tend to work in manic bursts, and that kind of programming is hard to do that with unless I have pretty solid knowledge of the language involved - otherwise, I spend most of my energy playing catch-up. Still, if I get to a point in my life where I have a stable creative drive, I might give it another go.)