# replaceval

## Purpose

Replace the values of an attribute. There are three variants of replaceval, one each for replacing the value of a concept concept's attribute named attrNameStr with either integer valueInt, string valueString or concept values valueConcept.

## Syntax

None = replaceval(concept, attrNameStr, valueInt)

concept - type: con
attrNameString - type: str
valueInt - type: int

None = replaceval(concept, attrNameStr, valueString)

concept - type: con
attrNameString - type: str
valueString - type: str

None = replaceval(concept, attrNameStr, valueConcept)

concept - type: con
attrNameString - type: str
valueConcept - type: con

## Returns

Nothing

## Remarks

If the attr-val pair arguments do not exist under the concept, replaceval creates new ones. If passed a bad concept argument, a warning is written to the output log. If passed a value like G("foo") that does not refer to a concept, the value is written as a string.

Differs from addnumval, addstrval and addconval in that replaceval replaces existing values, while add* adds new attr-val pairs. If the attr-val pairs do not exist already, replaceval acts like the add* functions.

Differs from attrchange in a number of respects. First, attrchange takes four arguments (e.g., attrchange(concept, attrNameString, oldValString, newValString)) while replaceval takes three. Second, attrchange only operates on strings, while replaceval operates on strings, integers or concepts as values. Third, recall a concept can have zero or more attributes, and each attribute can have zero or more values. If there is more than one concept listed as values of an attribute (e.g., apples having many colors, each color being a concept unto itself) then replaceval will replace them all with the new one (i.e., delete the existing old concept values). attrchange, on the other hand, is able to 'hone in' on a specific value. However, attrchange only operates on strings as values of attributes, not concepts as values of attributes.

## Example

@CODE
if(findconcept(findroot(),"apples"))
rmconcept(findconcept(findroot(),"apples"));
G("apples") = makeconcept(findroot(),"apples");
if(findconcept(findroot(),"color"))
rmconcept(findconcept(findroot(),"color"));
G("color") = makeconcept(findroot(),"color");
G("red") = makeconcept(G("color"),"red");
G("blue") = makeconcept(G("color"),"blue");
addnumval(G("apples"),"weight", 3);
addstrval(G("apples"),"name", "MacIntosh");
addconval(G("apples"),"color", G("red"));
"output.txt" << "apples weight = "
<< numval(G("apples"),"weight") << "\n";
"output.txt" << "apples name = "
<< strval(G("apples"),"name") << "\n";
"output.txt" << "apples color = "
<< conceptname(conval(G("apples"),"color")) << "\n";
"output.txt" << "Replacing apple's attr vals:\n";
replaceval(G("apples"),"weight", 4);
replaceval(G("apples"),"name", "Granny Smith");
replaceval(G("apples"),"color", G("blue"));
"output.txt" << "apples weight = "
<< numval(G("apples"),"weight") << "\n";
"output.txt" << "apples name = "
<< strval(G("apples"),"name") << "\n";
"output.txt" << "apples color = "
<< conceptname(conval(G("apples"),"color")) << "\n";

The code above should print out:

apples weight = 3
apples name = MacIntosh
apples color = red
Replacing apple's attr vals:
apples weight = 4
apples name = Granny Smith
apples color = blue

## See Also

attrchange, rmval, rmvals, rmattr, rmattrs, Knowledge Base Functions