[Verb] is an action applying to one [Custom Kind]

I’d like to grant the player certain tokens, in the example case below, they are called memories. I seem to be getting stuck with the template [Verb] is an action applying to one [Custom Kind] however…

Before I get to emotional, as I am also trying to quit smoking after 20 years, I just going to show what I’ve done and hope somebody explains how to do it properly.A knowledge is a kind of object. A knowledge has a text called a description. Knowing relates one person to various knowledges. The verb to know (he knows, they know, he knew, it was known, he is learning) implies the knowing relation. Squat is a knowledge. The description of squat is "Not much at all." Diddilly is a knowledge. The description of diddilly is "Even less than squat." The player knows squat. The player knows diddilly. Definition: A knowledge (called a memory) is remembered if a person knows a knowledge. Remembering is an action applying to nothing. Understand "Remember" as remembering. Report remembering: say "You can think about [the list of remembered knowledge]." Recalling is an action applying to one knowledge.Inform 7 gives me the following explanation

The way I see it one knowledge is a kind of value, but meh! I’m still new to I7…

So if someone could suggest a better way of achieving my goal, or even simply correct the mistake, I’d appreciate it, I’ve flicked through the documentation that distributes with I7 quite a bit, and I’m not really finding the answers I need…

Edit: I’ve got a bit further…

A knowledge is a kind of object. A knowledge has a text called a description. Knowing relates one person to various knowledges. The verb to know (he knows, they know, he knew, it was known, he is learning) implies the knowing relation. Definition: A knowledge (called a memory) is remembered if a person knows a knowledge. Remembering is an action applying to nothing. Understand "remember" as remembering. Report remembering: say "You can think about [the list of remembered knowledge]." Recalling is an action applying to one thing. Understand "recall" as recalling. Check recalling: if the noun is not a knowledge, say "[The noun] is not a memory." instead; if the player does not know the noun, say "You know nothing about [the noun]." instead. Carry out recalling: say "[the description of the noun]" Squat is a knowledge. The description of squat is "Not much at all." Diddilly is a knowledge. The description of diddilly is "Even less than squat." The player knows squat. The player knows diddilly. This compiles, but the test doesn’t work as expected…

Looks like you’re almost there. What you still need to do is two things: first, tell the parser that the player should specify a memory to recall:

Understand "recall [any remembered knowledge]" as recalling.

and also tell the accessibility rules that the knowledge need not be physically touchable by the player:

Recalling is an action applying to one visible thing. ["visible" here means "not necessarily touchable"]

(IMO, this part of Inform syntax is completely awful and counterintuitive. I hope it will get fixed in a future release.)

Oh, and your definition of remembered knowledge looks a bit weird. What you probably want is something like:

Definition: A knowledge is remembered if the player knows it.

Also, as written, your “knowing” relation is one-to-many, meaning that a person can know several things, but any thing can only be known by at most one person at a time. If you want to let NPCs know things that the player also knows, you should probably make the relation many-to-many:

Knowing relates various persons to various knowledges.

Or, if only the player can know things, it would be simpler and more efficient to get rid of the “knowing” relation and just let each piece of knowledge have a boolean “remembered” attribute:

A knowledge can be remembered. A knowledge is usually not remembered.

Oh, and you probably want to make knowledge a thing, not an object; dealing with non-thing objects (other than the few built-in kinds like rooms and directions) can be kind of tricky. That will also automatically give your knowledge a description.

Putting all that together:

"Amnesia"

The story headline is "An interactive example".

Memory Lane is a room.

Knowledge is a kind of thing. Knowledge is usually proper-named.

Knowing relates various persons to various knowledges.
The verb to know (he knows, they know, he knew, it was known) implies the knowing relation.
Definition: Knowledge is remembered if the player knows it.

Remembering is an action applying to nothing.
Understand "remember" as remembering.

Report remembering: say "You can think about [the list of remembered knowledges]."

Recalling is an action applying to one visible thing.
Understand "recall [any remembered knowledge]" as recalling.

[This rule should be redundant, as the parser will only let us recall remembered knowledge anyway. If we changed the understand rule above to "any knowledge", however, it would trigger if the player tried to recall some knowledge they didn't know.]
Check recalling:
	if the noun is not knowledge, say "[The noun] is not a memory." instead;
	if the the noun is not remembered, say "You know nothing about [the noun]." instead.

Report recalling: say "[the description of the noun][paragraph break]".

Some squat is knowledge. The description of squat is "Not much at all."
Some diddilly is knowledge. The description of diddilly is "Even less than squat."
Some jack is knowledge. The description of jack is "You don't remember."

The player knows squat. The player knows diddilly. [The player doesn't know jack.]

Test me with "remember / recall squat / recall diddilly / recall jack / recall me".

Well, in line 1, you said “A knowledge is a kind of object.” Objects and values are mutually exclusive, as you can see in the Kinds Index. (The dotted line half way down the index divides the values from the objects.)

Generally you don’t want to define new kinds of objects, anyway; it’s not a very useful superclass. Inform is optimized for iterating over things, for example, not objects.

Also for readability, it might be better to rename “knowledges” “facts” or similar.

thx for the info too the pair of you, hopefully now I will make some headway…

I’ll change that then…Edit: Though I did choose Object, because I didn’t need a lot of the data contained within thing, its not like a memory can be lit or unlit, edible or inedible, etc…

I really hadn’t given it much thought as I hadn’t gotten that far yet, still working only on what I want the player to be able to do, but of course you are right, now that you’ve brought it up, I do want it as you suggest…
Edit2: Out of curiousness, could I use object and still display the names? or is that like not happening?
Edit3: Actually I really liked changing knowledge to fact, especially when I got to the line that now reads…

Squat is a fact.

Edit4: I found this a little anomalous, I have the following in my source…

Carry out remembering: say "You can recall [list of remembered facts]."but the output is

How does it figure the ‘about’ should go in there…

My source now reads as below:[code]Section 0 Definition

A historical fact is a kind of thing.

Knowing relates various person to various historical facts.
The verb to know (he knows, they know, he knows, it was known, he is learning) implies the knowing relation.
Definition: A historical fact is remembered if a person knows it.

Fact linking relates various historical facts to various historical facts.
The verb to be linked to implies the fact linking relation.

Remembering is an action applying to nothing.
Understand “remember” as remembering.
Carry out remembering:
say “You can recall [list of remembered historical facts].”

Recalling is an action applying to one visible object.
Understand “recall [any remembered historical fact]” as recalling.
Check recalling:
if the noun is not a historical fact, say “[The noun] is not a fact.” instead;
if the player does not know the noun, say “You do not know [the noun].” instead.
Carry out recalling:
repeat with the related fact running through the list of historical facts linked to the noun:
You know the related fact.
Report recalling:
say “[the description of the noun]”;

Section 1 Test

The cube is a room. Squat is a historical fact. The Description of squat is “Not much at all.” Diddilly is a historical fact. The description of diddilly is “Even less than squat.”

You know squat. Diddilly is linked to squat.

Test me with “remember / recall squat / remember / recall diddilly”. [/code]
You know squat works, but You know the related fact does not, how do I fix this?

Edit: I answered this myself… Now the player does know the related fact.

and so neither can a thing, by default. That’s why you have to tell inform that “a donut is edible” or “a torch can be lit” (or, for that matter, “The desk can be locked. It is locked.” – because by default, only containers are defined as lockable). If you check the Kinds index, you’ll see that historical facts list no associated attributes, unlike most other kinds of things.