"HeldExpression" (比較法)
"HeldExpression" (比較法)
式を評価せずに比較する.
詳細
- "HeldExpression"比較法は,2つの式が任意のホールドラッパー内で同一なら両者が等価であるとみなす.
- 解答集の値と提出された答の両方が,Hold,HoldPattern,HoldComplete等のホールドラッパーに包まれて与えられることが多い.
- パターン付きの解答集の値は,標準的なパターンマッチングをサポートするために,HoldPattern[expr]を使って与えられなければならない.HoldCompleteあるいはHoldの使用にはパターン式のリテラルなマッチングが必要である.
例題
すべて開く すべて閉じる例 (2)
未評価の式用のAssessmentFunctionを作成する:
heldtest = AssessmentFunction[Hold[Nest[f, x, 3]], "HeldExpression"]heldtest[Hold[Nest[f, x, 3]]]heldtest[Hold[f[f[f[x]]]]]未評価の数式用のAssessmentFunctionを作成する:
heldmath = AssessmentFunction[Hold[1 + 2], "HeldExpression"]heldmath[Hold[1 + 2]]heldmath[Hold[2 + 1]]heldmath[Hold[3]]スコープ (1)
rangetest = AssessmentFunction[Hold[Range /@ Range[4]], "HeldExpression"]QuestionObjectでこれを使う:
qo = QuestionObject[QuestionInterface["Code", "Use only Range and Map to create this output:
{{1},{1,2},{1,2,3},{1,2,3,4}}"],
rangetest]qoqo特性と関係 (4)
Holdを使った評価関数は,パターンを文字通りに扱う:
holdassess = AssessmentFunction[Hold[Nest[f, x, _]], "HeldExpression"]holdassess[Hold[Nest[f, x, 2]]]holdassess[Hold[Nest[f, x, _]]]代りにHoldPatternを使ってパターンマッチをサポートする:
holdpatternassess = AssessmentFunction[HoldPattern[Nest[f, x, _]], "HeldExpression"]holdpatternassess[Hold[Nest[f, x, 2]]]holdpatternassess[Hold[f[f[x]]]]"Expression"比較法は,存在する場合はホールドラッパーを含めて式全体を比較する:
exprcomp = AssessmentFunction[HoldPattern[_ + 2], "Expression"]exprcomp[Hold[1 + 2]]"HeldExpression"を使ってホールドラッパー内の式を比較する:
heldexprcomp = AssessmentFunction[HoldPattern[_ + 2], "HeldExpression"]heldexprcomp[Hold[1 + 2]]holdaf = AssessmentFunction[Hold[1 + 2 + 3], "HeldExpression"]同じ答を"ArithmeticResult"として扱う別の評価を作成する:
mathaf = AssessmentFunction[Hold[1 + 2 + 3], "ArithmeticResult"]"HeldExpression"は,加算における項の並べ替えのような基本的等価性も許容しないが,"ArithmeticResult"はこれを許容する:
holdaf[Hold[3 + 1 + 2]]mathaf[Hold[3 + 1 + 2]]holdaf = AssessmentFunction[HoldPattern[Table[i ^ 2, {i, RandomInteger[10]}]], "HeldExpression"]同じ答を"CodeEquivalence"解として扱う別の評価を作成する:
codeaf = AssessmentFunction[HoldPattern[Table[i ^ 2, {i, RandomInteger[10]}]], "CodeEquivalence"]"HeldExpression"は同一ではない答の等価性を求めようとしないが,"CodeEquivalence"は求めようとする:
holdaf[HoldPattern[# ^ 2& /@ Range[RandomInteger[10]]]]codeaf[HoldPattern[# ^ 2& /@ Range[RandomInteger[10]]]]考えられる問題 (1)
QuestionObjectは,Holdラッパーに包み込まれて与えられた場合でも,値のフォーマットを許容する:
QuestionObject["Which creates a 2D display of values", AssessmentFunction[{Hold[Grid[{{a, b}, {c, d}}]] -> 1, Hold[Table[{{a, b}, {c, d}}, 1]], Hold[{Row@{a, b}, Row@{c, d}}]}, "HeldExpression"]]DisableFormattingを使ってQuestionObjectのフォーマットを回避する:
QuestionObject["Which creates a 2D display of values", AssessmentFunction[{Hold[DisableFormatting@Grid[{{a, b}, {c, d}}]] -> 1, Hold[Table[{{a, b}, {c, d}}, 1]], Hold[DisableFormatting@{Row@{a, b}, Row@{c, d}}]}, "HeldExpression"]]関連するガイド
-
▪
- 質問と評価